如何使用OpenDialog取得字型檔? |
答題得分者是:pceyes
|
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
小弟使用OpenDialog可以開始*.ttf檔案
但若是想要直接去取得C:\windows\fonts\裡的字型檔案,該如何得到該ttf檔的檔名呢? 另外,小弟取得ttf檔後,該如何傳TTF檔裡的檔案名稱讓Tmemo裡的字改變字型? 小弟搜尋過站內的文章,但到 [code delphi] AddFontResource(PChar(D:\A.TTF)); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); [/code] 這兩句後就卡住了 小弟愚鈍,實在不知道該怎麼傳給Tmemo...= =b
------
永遠都是新手 |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
HI, 先請教一下,您知道有 TFontDialog 可以用嗎? 還是這個不是您要用的???
因為看下面的目的似乎也只是要換字型而已,還是有其他用途? ===================引 用 Reiji 文 章=================== 小弟使用OpenDialog可以開始*.ttf檔案 但若是想要直接去取得C:\windows\fonts\裡的字型檔案,該如何得到該ttf檔的檔名呢? 另外,小弟取得ttf檔後,該如何傳TTF檔裡的檔案名稱讓Tmemo裡的字改變字型? 小弟搜尋過站內的文章,但到 [code delphi] AddFontResource(PChar(D:\A.TTF)); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); [/code] 這兩句後就卡住了 小弟愚鈍,實在不知道該怎麼傳給Tmemo...= =b
------
價值的展現,來自於你用哪一個角度來看待它!! |
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
HI, 可以這樣試試 (參考網站:delphi.about.com )
拉一個 Combobox 在 Form 上,並他的屬性 Style 設為 csOwnerDrawFixed ,並命名為 FontCombo 然後在 FormCreate 的地方加上 var cnt : integer; begin for cnt := 0 to Screen.Fonts.Count-1 do FontCombo.Items.Add(Screen.Fonts.Strings[cnt]) ; end; 在這個 ComboBox 的 OnDrawItem 寫下 [code delphi] procedure TForm1.FontComboDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TComboBox).Canvas do begin Font.Name := Screen.Fonts.Strings[Index]; FillRect(Rect) ; TextOut(Rect.Left, Rect.Top, PChar(Screen.Fonts.Strings[Index])) end; end; [/code] 參考圖如下 ===================引 用 Reiji 文 章=================== 是,小弟主要是想做的像FONTVIEW的小工具 並且是可以自由load各目錄下的字型檔來查看字型 還打算要做個字型輸出比較的功能 所以TFontDialog對小弟來說感覺好像無法達到?
------
價值的展現,來自於你用哪一個角度來看待它!! |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
參考這篇
\\winnt\fonts\標楷體 是不行的,必須Copy Delphi 新手問題 / 作業研討 » 如何SHOW檔案列表 http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=94610 GETMYFILE('c:\winnt\fonts'); [code delphi] function GetFontName(FileNameTTF : string): string; { return the "friendly name" for a TrueType font from a .TTF file } var hFile : file; Buffer : string; TempName : string; iPos, jPos : Integer; begin {Build name for new resource file in} {a temporary file, and call the API.} TempName := ExtractFilePath(Application.ExeName) '~TEMP.FOT'; { build temporary .FOT file for the .TTF } if CreateScalableFontResource(1, PChar(TempName), PChar(FileNameTTF), nil) then begin { open .FOT file and read it into a string buffer } AssignFile(hFile, TempName); Reset(hFile, 1); SetLength(Buffer, FileSize(hFile)); BlockRead(hFile, Buffer[1], FileSize(hFile)); { The name sits behind the text 'FONTRES:' } iPos := Pos('FONTRES:', Buffer) 8; { search for next null character } jPos := iPos; while Buffer[jPos] <> #0 do Inc(jPos); { Return the font name } Result := Copy(Buffer, iPos, jPos - iPos); { clean up } CloseFile(hFile); DeleteFile(TempName); end else Result:='Error'; // ShowMessage(SysErrorMessage(GetLastError)); end; procedure TForm1.Button1Click(Sender: TObject); begin if form1.OpenDialog1.Execute then begin edit1.text := OpenDialog1.FileName; edit2.text := GetFontName(edit1.text); Memo1.Font.Name := edit2.text; // 設定字型名稱 end; end; [/code]
------
努力會更接近成功 |
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
To careychen:
這個方式似乎只能顯示c:\windows\fonts\下的字型 有沒有辦法能自由取得其他路徑下的字型檔呢? To pceyes: 小弟試過這段程式後發現有兩個問題 首先,存取c:\windows\fonts時,點選檔案後不會有反應 也不會關閉開啟檔案的視窗,只有取消的份 即使加入GETMYFILE(ExtractFileDir(opendialog1.Files))也依然是沒反應 當然,存取其他目錄的ttf檔是正常的 另外,小弟在Memo1.Font.Name := edit2.text;前加入 [code delphi] AddFontResource(PChar(opendialog1.Files)); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); [/code] 但在Memo1裡的字仍舊沒有變成載入的字型,不曉得是不是小弟還遺漏了什麼?
------
永遠都是新手 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
是否要先在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts 註冊??
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
Reiji
初階會員 發表:30 回覆:57 積分:32 註冊:2008-06-26 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
除了OpenDialog外,在win31page內的FileListbox也無法顯示winnt\fonts的內容,所以應是被windows Api限制住了,一個方法是自己寫一個OpenDialog(很簡單);至於你所提的方式,我在站上看到它是暫時性的安裝,關機後就不存在了,故容易混淆視聽,沒有再測了。
===================引 用 Reiji 文 章=================== To pceyes: 小弟試過這段程式後發現有兩個問題 首先,存取c:\windows\fonts時,點選檔案後不會有反應 也不會關閉開啟檔案的視窗,只有取消的份 即使加入GETMYFILE(ExtractFileDir(opendialog1.Files))也依然是沒反應 當然,存取其他目錄的ttf檔是正常的
------
努力會更接近成功 |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
|
歸木淡
中階會員 發表:1 回覆:49 積分:75 註冊:2005-09-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |