Make your own free website on Tripod.com


讓軟體個性飛揚
-----——dfm之聰明中文化篇
--作者: 偉乾

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

dfm1.gif

(圖 1)


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

     
看了關於對話框,有些不滿意,對話框主體的背景顏色,有關文字太多,部分重複,滑鼠移到連結處,還是箭頭,顏色也好像不好看,還有中文軟體 ,居然還有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

MyPicture4.gif

CrDrag

MyPicture10.gif

CrNo

MyPicture16.gif

CrNone

t1.gif

CrSizeNS

MyPicture5.gif

CrNoDrop

MyPicture11.gif

CrAppStart

MyPicture17.gif

CrArrow

t2.gif

CrSizeNWSE

MyPicture6.gif

CrHSplit

MyPicture12.gif

CrHelp

MyPicture18.gif

CrCross

MyPicture1.gif

CrSizeWE

MyPicture7.gif

CrVSplit

MyPicture13.gif

CrHandPoint

MyPicture19.gif

CrIBeam

MyPicture2.gif

CrUpArrow

MyPicture8.gif

CrMultiDrag

MyPicture15.gif

 

 

CrSize

MyPicture3.gif

CrHourGlass

MyPicture9.gif

CrSQLWait

MyPicture14.gif

 

 


      就上面的例子我們做些修改: 阿濤首頁的字型改為粗體、下劃線,顏色紅色,游標樣式為小手,代碼如下:

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 

 dfm4.gif

 

    左邊的紅色字串是作了修改的,右邊的效果看了如何 !
   好,現在我們就對整個對話框進行修改,我前面說了對話框主體的背景顏色,有關文字太多,部分重複,滑鼠移到連結處,還是箭頭,顏色也好像不好看,還有中文軟體 ,居然還有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檔案壓縮打包,請下載回去比較。好了 ! 看看我修改的效果:
 

dfm5.gif

    本文涉及的對話框是最簡單的類型,實際的對話框要複雜得多 ! 需要大家慢慢摸索,不過基本原理應該通用 ! 用formread修改好,看了效果滿意儲存,然後再用exescope 匯入exe檔案中。然後執行程式,看看效果是否一樣,因為有些控件在程式的其它地方定義,用formread看的效果,有時會與實際有些偏差,請大家注意 !
   關於修改對話框我就暫時講到這,下面我說說如何修改dfm選單 !
  比起對話框,選單能夠修改的地方不多,我這裡只說如何添加選單項和幾選單項 !
  選單一般分為主選單 (MainMenu) 和彈出式選單 (PopupMenu) ,我們還是拿formread 舉例

主選單 (MainMenu) 彈出式選單 (PopupMenu)
dfm6.gif         dfm7.gif dfm8.gif

主選單、彈出式選單的視窗代碼比較簡單,

主選單 彈出式選單
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
dfm7.gif
dfm9.gif

  選單項不一定是文字,還可以是物件,只要我們在選單控件中將圖片資料拷貝到視窗代碼中即可!格式如下:
Bitmap.Data={
這裡是物件資料
............
}
這樣選單項就會有一幅物件在文字前面出現 ! 這物件資料的獲得,您可以用任何物件編輯軟體編輯好您滿意的物件 (注意物件的寬度和高度) ,存為BMP檔案。用16進制編輯程式 (Hex workshop) 開啟,全部複製,在複製的物件資料前加上F6060000 ,就構成了完整的dfm識別的物件資料,按照以上格式添加到視窗控件中,既可在選單加入物件 !
    好,現在看看修改後的效果 ! (有興趣可以下載修改前後的dfm檔案,下載)

dfm10.gif

    同樣道理,我們也可以在對話框適當的位置加上物件,格式如下 !
object Image1: TImage
Left = 20
Top = 16
Width = 32
Height = 32
Picture.Data = {
這裡是物件資料
............
}
end

  此處物件資料的獲得,您可以用任何物件編輯軟體編輯好您滿意的物件 (注意物件的寬度和高度) ,存為BMP檔案。用16進制編輯程式 (Hex workshop) 開啟,全部複製,在複製的物件資料前加上07544269746D617076020000 ,就構成了完整的dfm識別的物件資料,按照以上格式添加到視窗控件中,既可在對話框中加入物件 ! 看看按照這種方法添加物件的效果 !

dfm11.gif

   註: 1.雖然用16進制編輯程式 (Hex workshop) 可以複製物件資料,但由於複製的資料沒有換行,超過程式的允許長度,會出錯 ! 需要自己手工換行 (65字節一行) ,十分不便 ! 我們可以用language localizator 開啟一個內嵌有以上類型物件的檔案,選定相應的物件,然後在物件編輯工具欄中選擇載入新圖片按鈕匯入新的bmp檔案,dfm12.gif再按工具欄中的編輯視窗資源按鈕dfm13.gif,複製物件控件代碼,然後在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檔案更好 ! 再次感謝清池為我們帶來如此方便的中文化輔助工具 !

 



回教學