讓軟體個性飛揚
-----——dfm之聰明中文化篇
--作者: 偉乾
----清池製作的FormRead
,是一個DELPHI視窗檔案查看修改工具,可以查看的檔案格式有dfm,txt,exe等,操作非常方便,是一個專為中文化Delphi編譯的軟體而特製的的中文化輔助工具,非常適合在中文化DELPHI格式程式時與language
localizator 和 exescope 配合使用 !

(圖 1)
這是程式執行的界面,簡單可以分為三部分: 檔案清單界面、檔案內嵌dfm界面和視窗代碼界面三部分。其中檔案內嵌dfm界面只在選定exe檔案起作用,當您選擇其他檔案如dfm,txt檔案時,這部分視窗不起作用,但它還保留上次選擇exe檔案的內容,直到您選擇另一個exe檔案。按 取消這部分視窗界面,您選擇另一exe檔案,自動顯示這視窗。檔案清單界面也設計得不好,即使您在選單中在選擇
了「檔案顯示檔案清單項」也經常在切換不同檔案時會遺失此界面。這時您只要再按一下
F12或在檔案選單中選擇「檔案顯示檔案清單項
,就可以重新見到這個界面,再重複以上操作,界面消失。
選定dfm 視窗後,此dfm視窗的代碼,顯示在視窗
代碼界面。直接在裡面進行修改,按預覽按鈕查看實際效果,修改滿意了按保存按鈕保存。txt,dfm格式的檔案直接保存,exe
檔案中的dfm會彈出一個另存對話框,提示您制定檔案儲存的位置、檔案名和檔案後綴。 (註: 修改後要注意隨時儲存,當您切換dfm視窗
或退出程式,軟體不會提醒您保存,您的勞動成果就........)
下面我們就拿FormRead
自己開刀,解釋一下如何用FormRead
做出完美化、個性化的界面 !
FormRead 的主程式用了upx0.72加殼壓縮,需要procdump脫殼後,才能進行以下步驟 !
首先我們看看他的關於對話框 (圖2)

看了關於對話框,有些不滿意,對話框主體的背景顏色,有關文字太多,部分重複,滑鼠移到連結處,還是箭頭,顏色也好像不好看,還有中文軟體
,居然還有OK這個命令 ! 那我們就發揚
DIY的傳統,自己動手。
我們首先看看有關阿濤首頁這部分的視窗代碼
object Label6: TLabel--------------------標籤名為 (Label6) ,每個標籤都有自己獨有標籤名
Left
= 168---------------------------標籤的位置訊息,代表標籤的左邊界
Top
= 136----------------------------標籤的位置訊息,代表標籤的上邊界
Width
= 48---------------------------標籤的大小訊息,代表標籤的寬度
Height
= 12--------------------------標籤的大小訊息,代表標籤的高度
Hint
= 'http://jwjjt.yeah.net'-------提示訊息,指滑鼠移到標籤出現的提示
Caption
= '阿濤首頁'-----------------標籤的標題內容,就是顯示在對話框的文字
Font.Charset
= GB2312_CHARSET--------標籤的字型的語系內容
Font.Color
= clNavy------------------字型顏色
Font.Height
= -12--------------------字型的大小
Font.Name
= '新細明體'-------------------字型的類型
Font.Style
= [fsUnderline]-----------字型風格
ParentFont
= False-------------------上一級字型內容
ParentShowHint
= False---------------上一級提示的內容
ShowHint
= True----------------------顯示提示內容為真,表示顯示提示
OnClick
= Label6Click----------------事件響應函數,就是滑鼠按擊後執行的事件,程式中定義
end
好了,我們在這裡詳細解釋一下代碼的含義 !
一般視窗控件的最簡單的代碼如以下格式:
object 控件名:
控件類型---前面的例子控件為標籤(TLabel),此外還有按鈕(TButton)視窗(TForm1)選單(TMainMenu)等等
Left
= ***--------┐
Top
= ***---------│—這四項代表了控件的位置、大小訊息
Width
= ***-------│
Height
= **-------┘
Caption
= '********'--控件的標題內容,一般都是這種格式,也有例外: 編輯框控件(TEdit)格式為Text=
'****'
end-------------------控件結束標誌 ! 與object
成對出現,可以嵌套
講完視窗控件的最簡單格式,現在開始解釋上面那個標籤控件的例子: 他除了最基本的代碼項,還有提示的設定,字型的設定,滑鼠響應事件。我一個個解釋
Hint與ShowHint = True
項成對出現,表示滑鼠移到標籤處出現的提示訊息 !
Font.Charset,字型的語系內容,一般我們中文化都改為
GB2312_CHARSET
Font.Color = cl***,字型顏色,一般使用顏色的英文單詞,如RED-紅色,BLUE-藍色等等,您可以一個個試 !
Font.Height = -12,字型的大小根據需要調整,一般中文化選
-12。
Font.Name = '新細明體',字型的類型,不用多解釋 !
Font.Style = [],字型風格,有三類,fsItalic(斜體),fsBold(粗體),
fsUnderline(下劃線),中間有逗號隔開,可多選,也可不選 !
ParentFont
,上一級字型的內容,內容為真時,顯示上一級定義的字型內容,內容為否或沒有這項,則顯示本級定義的字型內容 !
ParentShowHint
,上一級提示的內容,這代碼項好像意義不大,內容為真,並且在本級內容為否時,才在此控件處顯示上一級提示。可能在上級定義了提示內容,在各個控件中定義ParentShowHint內容,可以控制提示出現的不同區域您 !
OnClick = Label6Click,這是事件響應函數,就是您滑鼠按擊後執行的事件,具體進行的時間在程式中定義,在這裡按擊滑鼠,自動調用瀏覽器訪問著名中文化人阿濤的網址,此處好像無法修改 ! 由於這軟體脫殼後,無法修改,沒有辦法實際測試 !
好,現在回想一下文章開始的問題,聰明的讀者,您讀到這,一定意識到這標籤視窗代碼沒有定義游標內容,所以程式選用了預設的游標,一般是箭頭。有關游標的代碼格式是這樣的: Cursor
= ********* ,不同的取值代表不同的意義,這裡就簡單舉幾個實例,
CrDefault
|
預設游標,一般是箭頭
|
CrSizeNESW
|

|
CrDrag
|

|
CrNo
|

|
CrNone
|

|
CrSizeNS
|

|
CrNoDrop
|

|
CrAppStart
|

|
CrArrow
|

|
CrSizeNWSE
|

|
CrHSplit
|

|
CrHelp
|

|
CrCross
|

|
CrSizeWE
|

|
CrVSplit
|

|
CrHandPoint
|

|
CrIBeam
|

|
CrUpArrow
|

|
CrMultiDrag
|

|
|
|
CrSize
|

|
CrHourGlass
|

|
CrSQLWait
|

|
|
|
就上面的例子我們做些修改: 阿濤首頁的字型改為粗體、下劃線,顏色紅色,游標樣式為小手,代碼如下:
object Label6: TLabel
Left = 168
Top = 136
Width = 48
Height = 12
Hint = 'http://jwjjt.yeah.net'
Cursor =
CrHandPoint
Caption = '阿濤首頁'
Font.Charset = GB2312_CHARSET
Font.Color = clRed
Font.Height = -12
Font.Name = '新細明體'
Font.Style = [fsBold,fsUnderline]
ParentFont = False
ParentShowHint = False
ShowHint = True
OnClick = Label6Click
end
|

|
左邊的紅色字串是作了修改的,右邊的效果看了如何 !
好,現在我們就對整個對話框進行修改,我前面說了對話框主體的背景顏色,有關文字太多,部分重複,滑鼠移到連結處,還是箭頭,顏色也好像不好看,還有中文軟體
,居然還有OK這個命令 ! 這些要修改的地方 !
我們先看看主視窗的代碼 !
object AboutForm: TAboutForm-----------對話框控件名
Left = 183---------------------------位置,左邊界
Top = 191----------------------------位置,上邊界
BorderIcons = [biSystemMenu]---------標題欄的圖示,如最大化,最小化、關閉等按鈕
BorderStyle = bsDialog---------------對話框風格內容
Caption = '關於Form輔助編輯工具'-----視窗標題,出現在視窗的標題欄中
ClientHeight = 165-------------------大小,高度
ClientWidth = 404--------------------大小,寬度
Color = clBtnFace--------------------顏色
Font.Charset = GB2312_CHARSET--------字型語系內容
Font.Color = clWindowText------------字型顏色
Font.Height = -12--------------------字號
Font.Name = '新細明體'-------------------字型類型
Font.Style = []----------------------字型風格
OldCreateOrder = False---------------
Position = poScreenCenter------------在螢幕出現的位置
PixelsPerInch = 96-------------------
TextHeight = 12----------------------
其他的不太清除具體含義,我就簡單介紹個別的代碼意思:
BorderIcons,標題欄的圖示,如最大化(BiMaximize),最小化(BiMinimize)、關閉(BisystemMenu)等按鈕
BorderStyle,對話框風格內容,BsDialog-對話框風格的邊框;BsNone-無邊框(無標題欄);BsSingle-單線邊框(無標題欄);BsSizeable-可以改變大小的邊框(預設);BsSizeToolWindow-可以改變大小的工具視窗;BsToolWindow-工具視窗
Color = clBtnFace,對話框主體的背景顏色,不包括標題欄,這裡用了常規的灰色,您可以象上面介紹,cl+顏色的英文單詞調出您喜歡的背景色,如clwhite
(白色),clred (紅色)等等;其他的各項有的前面已經解釋了,有些我也不懂,這裡再說一個這個例子沒有提及的視窗的設定 (FormStyle) ,有些比較重要的視窗,或者說需要隨時監視的視窗,儘管不是當前的活動視窗,但也在其他視窗上面,是可見的,FormStyle的取值意義FsMDIChild——MDI(多文檔)應用程式的幾視窗風格;FsMDIForm——MDI應用程式的框架視窗風格;FsNormal——一般視窗風格(預設);FsStayOnTop——永遠在頂部。
註: 這裡的對話框的位置大小好像修改後沒有效果,到底什麼原因,請您告訴我 !
我們在看看那個確定按鈕的代碼,經過分析原來缺少Caption項,視窗顯示預設的樣式,我們只要加上這一項即可,紅色項是修改加入的。
object BitBtn1: TBitBtn
Left = 312
Top = 128
Width = 75
Height = 25
TabOrder = 0
Kind = bkOK
Caption = '確定'
end
我把修改後的dfm檔案和原始dfm檔案壓縮打包,請下載回去比較。好了 ! 看看我修改的效果:

本文涉及的對話框是最簡單的類型,實際的對話框要複雜得多 ! 需要大家慢慢摸索,不過基本原理應該通用 ! 用formread修改好,看了效果滿意儲存,然後再用exescope
匯入exe檔案中。然後執行程式,看看效果是否一樣,因為有些控件在程式的其它地方定義,用formread看的效果,有時會與實際有些偏差,請大家注意 !
關於修改對話框我就暫時講到這,下面我說說如何修改dfm選單 !
比起對話框,選單能夠修改的地方不多,我這裡只說如何添加選單項和幾選單項 !
選單一般分為主選單 (MainMenu) 和彈出式選單 (PopupMenu) ,我們還是拿formread
舉例
主選單 (MainMenu) |
彈出式選單 (PopupMenu) |
 |
 |
主選單、彈出式選單的視窗代碼比較簡單,
主選單 |
彈出式選單 |
object MainMenu1: TMainMenu(主選單控件名)
Left = 392 (位置)
Top = 176 (位置)
object File1: TMenuItem (選單項名)
Caption = '檔案(&F)' (選單項標題)
Checked = True (標記選單項) 本例此處這個代碼好像沒有用
object HideFileList1: TMenuItem (下拉選單項名)
Caption = '顯示檔案清單(&F)' (下拉選單項名)
Checked = True (標記選單項) 標記後的選單項前有小標記
ShortCut = 123 (快速鍵內容) 快速鍵控件在視窗代碼中是存為整數OnClick
= HideFileList1Click (事件響應函數)
類型的
end (控件結束標誌) 與object
成對出現,可以嵌套
object SaveAs1: TMenuItem
Caption = '另存為...(&S)'
OnClick = SaveAs1Click
end
object Exit1: TMenuItem
Caption = '退出(&E)'
OnClick = Exit1Click
end
end
object Help1: TMenuItem
Caption = '說明(&H)'
object About1: TMenuItem
Caption = '關於(&A)'
OnClick = About1Click
end 注意: 在這行後面,我們將添加一些控件代碼 !
end
end |
object PopupMenu1: TPopupMenu(彈出式選單控件名)
OnPopup = PopupMenu1Popup
Left = 400 (位置)
Top = 112 (位置)
object U1: TMenuItem (選單項名)
Caption = '撤銷(&U)' (選單項標題)
OnClick = U1Click
end
object R1: TMenuItem
Caption = '重做(&R)'
OnClick = R1Click
end
object N3: TMenuItem
Caption = '-' (選單項為水平分割線)
end
object M1: TMenuItem
Caption = '標記(&M)...'注意: 此行下面沒有end項
object N11: TMenuItem
Caption = '&0'
OnClick = N11Click
end
.....
object N53: TMenuItem
Tag = 9
Caption = '&9'
OnClick = N11Click
end
end 注意: end項在此行出現,與上面的objest
Mi 控件
.... 呼應 ! 中間的object
N11等為幾選單
object A1: TMenuItem
Caption = '全選(&A)'
OnClick = A1Click
end
end
|
現在我們說說DIY計劃,在選單說明項中添加一些中文化人訊息,中間用水平線隔開。
添加一些中文化人訊息的代碼 |
選單前後對照 ! |
object N5:
TMenuItem
Caption = '-'
end
object About2: TMenuItem
Caption = '中文化'
object About3: TMenuItem
Caption = '中文化人: 偉乾'
end
object About4: TMenuItem
Caption = 'weiqian@21cn.com'
end
object About5: TMenuItem
Caption = 'http://weiqian.soim.net'
end
end
|
 |
 |
選單項不一定是文字,還可以是物件,只要我們在選單控件中將圖片資料拷貝到視窗代碼中即可!格式如下:
Bitmap.Data={
這裡是物件資料
............
}
這樣選單項就會有一幅物件在文字前面出現 ! 這物件資料的獲得,您可以用任何物件編輯軟體編輯好您滿意的物件 (注意物件的寬度和高度) ,存為BMP檔案。用16進制編輯程式 (Hex
workshop) 開啟,全部複製,在複製的物件資料前加上F6060000
,就構成了完整的dfm識別的物件資料,按照以上格式添加到視窗控件中,既可在選單加入物件 !
好,現在看看修改後的效果 ! (有興趣可以下載修改前後的dfm檔案,下載)

同樣道理,我們也可以在對話框適當的位置加上物件,格式如下 !
object Image1: TImage
Left = 20
Top = 16
Width = 32
Height = 32
Picture.Data = {
這裡是物件資料
............
}
end
此處物件資料的獲得,您可以用任何物件編輯軟體編輯好您滿意的物件 (注意物件的寬度和高度) ,存為BMP檔案。用16進制編輯程式 (Hex
workshop) 開啟,全部複製,在複製的物件資料前加上07544269746D617076020000
,就構成了完整的dfm識別的物件資料,按照以上格式添加到視窗控件中,既可在對話框中加入物件 ! 看看按照這種方法添加物件的效果 !

註: 1.雖然用16進制編輯程式 (Hex
workshop) 可以複製物件資料,但由於複製的資料沒有換行,超過程式的允許長度,會出錯 ! 需要自己手工換行 (65字節一行) ,十分不便 ! 我們可以用language
localizator
開啟一個內嵌有以上類型物件的檔案,選定相應的物件,然後在物件編輯工具欄中選擇載入新圖片按鈕匯入新的bmp檔案, 再按工具欄中的編輯視窗資源按鈕 ,複製物件控件代碼,然後在readfrom中添加到dfm檔案的視窗控件中。
2.
加入的物件等代碼太多,不能保證最後寫入exe檔案或程式正常執行。
3.
字型、背景的顏色內容有: maroon black green olive
navy purple teal gray silver red lime yellow blue fuchsia aqua light
gray dark grav white 。
總的來說,FormRead是一個不錯的
delphi form的輔助編輯工具,我們利用他可以完美化您的中文化作品,使您的軟體界面多姿多彩。但是這軟體感覺作的不過精細,除了上面所說的儲存問題外,希望作者在下一版本中,能夠加入以下功能: 尋找、替換,同時開啟多個dfm檔案,簡單地檔案比較,如果能夠寫入exe檔案更好 ! 再次感謝清池為我們帶來如此方便的中文化輔助工具 !
|