恆知科技

恆知科技 資訊軟體 恆知用心.服務創新

24/08/2026

B4A 自定義 Activity Title 方式

Public Sub SetTitle(rs As RichString)
Dim jo As JavaObject
jo.InitializeContext
jo.RunMethodJO("getActionBar", Null).RunMethod("setTitle", Array(rs))
End Sub

Public Sub SetTitle(cs As CSBuilder)
Dim jo As JavaObject
jo.InitializeContext
jo.RunMethodJO("getActionBar", Null).RunMethod("setTitle", Array(cs))
End Sub

23/08/2026

B4A 修正小數數值輸入鍵盤
在 Basic4Android (B4A) 中,當 EditText 設定為 INPUT_TYPE_DECIMAL_NUMBERS 時,在某些手機品牌(特別是三星 Samsung、部分 HTC 或特定舊版 Android 系統)的內建鍵盤上會出現「沒有小數點(.)」或「負號(-)」的臭蟲(Bug)。

Sub Settings_Click
IME1.HideKeyboard

Dim m As Map = CreateMap("修正小數數值輸入鍵盤": hot_module.g_INPUT_TYPE_DECIMAL_NUMBERS)
Dim sf As JavaObject = InputMapAsync(m, "參數設定", True)
Dim b As Button = sf.RunMethod("getButton", Array(DialogResponse.POSITIVE))
b.Text = "確定"
Wait For InputMap_Result

hot_module.g_INPUT_TYPE_DECIMAL_NUMBERS = m.Get("修正小數數值輸入鍵盤")
Starter.kvs.Put("INPUT_TYPE_DECIMAL_NUMBERS", hot_module.g_INPUT_TYPE_DECIMAL_NUMBERS)
Fixed_INPUT_TYPE_DECIMAL_NUMBERS(hot_module.g_INPUT_TYPE_DECIMAL_NUMBERS)
End Sub

Sub Fixed_INPUT_TYPE_DECIMAL_NUMBERS(value As Boolean)
If value Then
IME1.SetCustomFilter(EditText101, EditText101.INPUT_TYPE_TEXT, "-0123456789.")
Else
EditText101.InputType = EditText101.INPUT_TYPE_DECIMAL_NUMBERS
End If
End Sub

23/08/2026

在 Basic4android (B4A) 中,使用 CSBuilder 來優化 MenuItem 的文字顯示,可以讓介面看起來更專業、更有層次感(例如加入顏色、粗體、甚至是圖標)

Dim cs As CSBuilder
Activity.AddMenuItem3(cs.Initialize.Size(18).Append("重填").PopAll, "Cancel", Null, True)
Activity.AddMenuItem3(cs.Initialize.Size(18).Append("送出").PopAll, "Ok", Null, True)

20/08/2026

.NET 空白類字元

VB.NET
Public all_whitespaces As Char() = New Char() {
" "c, ' U+0020 SPACE(一般空格)
" "c, ' U+00A0 NO-BREAK SPACE(不換行空格)
""c, ' U+180E MONGOLIAN VOWEL SEPARATOR
" "c, ' U+2000 EN QUAD
" "c, ' U+2001 EM QUAD
" "c, ' U+2002 EN SPACE
" "c, ' U+2003 EM SPACE
" "c, ' U+2004 THREE-PER-EM SPACE
" "c, ' U+2005 FOUR-PER-EM SPACE
" "c, ' U+2006 SIX-PER-EM SPACE
" "c, ' U+2007 FIGURE SPACE
" "c, ' U+2008 PUNCTUATION SPACE
" "c, ' U+2009 THIN SPACE
" "c, ' U+200A HAIR SPACE
ChrW(8203), ' U+200B ZERO WIDTH SPACE
ChrW(8204), ' U+200C ZERO WIDTH NON-JOINER
ChrW(8205), ' U+200D ZERO WIDTH JOINER
" "c, ' U+202F NARROW NO-BREAK SPACE
ChrW(8287), ' U+205F MEDIUM MATHEMATICAL SPACE
ChrW(8288), ' U+2060 WORD JOINER
" "c, ' U+3000 IDEOGRAPHIC SPACE(全形空格)
ChrW(8232), ' U+2028 LINE SEPARATOR
ChrW(8233), ' U+2029 PARAGRAPH SEPARATOR
vbTab, ' U+0009 CHARACTER TABULATION
vbLf, ' U+000A LINE FEED
vbVerticalTab, ' U+000B LINE TABULATION
vbFormFeed, ' U+000C FORM FEED
vbCr, ' U+000D CARRIAGE RETURN
ChrW(133), ' U+0085 NEXT LINE (NEL)
ChrW(173), ' U+00AD SOFT HYPHEN
ChrW(8199), ' U+2007 FIGURE SPACE(備援明確版)
""c ' U+FEFF BOM / ZERO WIDTH NO-BREAK SPACE
}

C #
public static readonly char[] all_whitespaces = new char[] {
'\u0020', // U+0020 SPACE(一般空格)
'\u00A0', // U+00A0 NO-BREAK SPACE(不換行空格)
'\u180E', // U+180E MONGOLIAN VOWEL SEPARATOR
'\u2000', // U+2000 EN QUAD
'\u2001', // U+2001 EM QUAD
'\u2002', // U+2002 EN SPACE
'\u2003', // U+2003 EM SPACE
'\u2004', // U+2004 THREE-PER-EM SPACE
'\u2005', // U+2005 FOUR-PER-EM SPACE
'\u2006', // U+2006 SIX-PER-EM SPACE
'\u2007', // U+2007 FIGURE SPACE
'\u2008', // U+2008 PUNCTUATION SPACE
'\u2009', // U+2009 THIN SPACE
'\u200A', // U+200A HAIR SPACE
'\u200B', // U+200B ZERO WIDTH SPACE
'\u200C', // U+200C ZERO WIDTH NON-JOINER
'\u200D', // U+200D ZERO WIDTH JOINER
'\u202F', // U+202F NARROW NO-BREAK SPACE
'\u205F', // U+205F MEDIUM MATHEMATICAL SPACE
'\u2060', // U+2060 WORD JOINER
'\u3000', // U+3000 IDEOGRAPHIC SPACE(全形空格)
'\u2028', // U+2028 LINE SEPARATOR
'\u2029', // U+2029 PARAGRAPH SEPARATOR
'\t', // U+0009 CHARACTER TABULATION
'\n', // U+000A LINE FEED
'\v', // U+000B LINE TABULATION
'\f', // U+000C FORM FEED
'\r', // U+000D CARRIAGE RETURN
'\u0085', // U+0085 NEXT LINE (NEL)
'\u00AD', // U+00AD SOFT HYPHEN
'\u2007', // U+2007 FIGURE SPACE(備援明確版)
'\uFEFF' // U+FEFF BOM / ZERO WIDTH NO-BREAK SPACE
};

碼位 名稱 說明
U+200B Zero Width Space 常見於網頁複製的隱形字元
U+200C Zero Width Non-Joiner 阿拉伯/梵文排版用
U+200D Zero Width Joiner Emoji 組合符(如家庭 Emoji)
U+205F Medium Mathematical Space 數學公式排版用
U+2060 Word Joiner 取代已棄用的 U+FEFF 用途
U+00AD Soft Hyphen 隱形連字號,出現在複製文字中

20/08/2026

B4X 4 步教把跨平台元件打包成 .b4xlib 函式庫

b4xlib 的真面目其實是...
它本質上就是一個 ZIP 壓縮檔!裡面只裝了兩樣東西:

你的原始碼(我們寫好的 .bas 檔)

設定檔(manifest.txt)

只要把它放進附加函式庫資料夾,B4X 編輯器就會自動解壓縮並讀取資源,完美支援 B4A、B4i 與 B4J 三大平台。

跟著以下 4 步,輕鬆完成封裝:

步驟 1:準備原始碼與資料夾
在桌面建一個新資料夾(例如命名為 MyB4XTabStrip_Build),把專案裡的例如 B4XTabStrip.bas 複製貼進去。

步驟 2:建立 manifest.txt 設定檔
在同一個資料夾內新增純文字檔 manifest.txt,貼上以下參數並存檔:

Version=1.00
Author=你的名字或公司名稱
Description=跨平台新擬物化 B4XTabStrip 自訂元件
Tags=UI, TabStrip, Neumorphism, CustomView
B4A.DependsOn=XUI, JavaObject
B4i.DependsOn=iXUI
B4J.DependsOn=jXUI

提醒:B4A.DependsOn 這一行超級重要!我們在 B4A 實作圓角時呼叫了底層,這行設定會自動幫使用者把 XUI 和 JavaObject 打勾,完美避開編譯錯誤!

步驟 3:壓縮並更改副檔名
把這兩個檔案一起圈選,點擊右鍵選擇「加到壓縮檔 (ZIP)」,接著將產生出來的 .zip 檔名直接重新命名為 .b4xlib!
(小撇步:如果看不到副檔名,記得先到 Windows 資料夾上方的「檢視」把「副檔名」打勾喔)

步驟 4:佈署與使用
將 .b4xlib 檔案丟進 B4X 的 Additional Libraries (附加函式庫) 資料夾。打開編輯器,在右下角 Libraries Manager 空白處按右鍵選擇 Refresh,找到你的函式庫打勾,就能作為 CustomView 使用。

25/07/2026

ASP.NET 中 Web Farm (架構) 與 Web Forms (框架) 區分

Web Farm (架構)
指硬體部署架構。為了分攤流量,使用兩台或以上的伺服器來執行同一個網站 (負載平衡 Load Balancing)。在此架構下必須手動統一 Machine Key。

Web Forms (框架)
指軟體開發框架。是微軟早期的網頁開發技術 (副檔名為 .aspx)。它大量依賴 ViewState,而 ViewState 就是靠 Machine Key 來加解密的。

2026.06.22 記述 -「PSQIS標案檢索及快查系統」V6.0.0.0 版本。1. 全面替換內部資料處理運作核心元件,大幅度提昇資料處理效率。2. 加強資料處理過程訊息顯示。恆知用心.服務創新
22/06/2026

2026.06.22 記述 -「PSQIS標案檢索及快查系統」V6.0.0.0 版本。
1. 全面替換內部資料處理運作核心元件,大幅度提昇資料處理效率。
2. 加強資料處理過程訊息顯示。

恆知用心.服務創新

22/06/2026

通用型:動態產生絕對網址 (ChgFullUrl)
適用於 WebForms、MVC 或一般 ASHX。這段程式碼能自動抓取伺服器的通訊協定 (HTTP/HTTPS) 與通訊埠 (Port),完美取代寫死的 http://或https:// 網址,並適用於圖片路徑、跳轉連結與 API 端點。

'''
''' 將相對路徑轉換為包含網域、Port與協定的絕對網址
'''
Private Function ChgFullUrl(ByVal p As String) As String
' 步驟 1:將傳入的路徑轉換為應用程式的相對路徑 (例如: /MyApp/Images/pic.jpg)
Dim relativeUrl As String = ResolveUrl(p)

' 步驟 2:動態取得目前的根目錄網址,自動包含 HTTP/HTTPS 與 Port (例如: https://www.example.com:8080)
Dim baseUrl As String = Request.Url.GetLeftPart(UriPartial.Authority)

' 步驟 3:組合並回傳
Return baseUrl & relativeUrl
End Function

' 【使用範例】
' 1. 圖片設定: imgAvatar.ImageUrl = ChgFullUrl("~/Images/user.png")
' 2. 網頁跳轉: Response.Redirect(ChgFullUrl("~/Home.aspx"))
' 3. API 回傳: Return "{ ""url"": """ & ChgFullUrl("~/api/data") & """ }"

18/06/2026
12/06/2026

IIS / ASP.NET Web Application 為主,當 HTTP Response Header 中出現 Server 或 X-Powered-By,可能揭露網站所使用的 Web Server、框架或技術,例如 IIS、ASP.NET、PHP、Express 等。雖然此資訊本身不一定構成直接入侵風險,但可能協助攻擊者快速判斷系統環境,進一步搜尋對應版本或平台的已知弱點。

修補建議
建議移除或隱藏以下 HTTP Response Headers:
Server
X-Powered-By
X-AspNet-Version
X-AspNetMvc-Version

IIS / ASP.NET 修補方式
web.config 範例



















Address

1F. , No. 7-3, Minsheng Road , Madou Township
Tainan
72145

Opening Hours

Monday 09:00 - 17:30
Tuesday 09:00 - 17:30
Wednesday 09:00 - 17:30
Thursday 09:00 - 17:30
Friday 09:00 - 17:30

Telephone

+88665710732

Website

Alerts

Be the first to know and let us send you an email when 恆知科技 posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Shortcuts

Share