請教如何讓新增的字型立即生效呢? |
尚未結案
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
各位大大好: 目前我遇到一個問題:
我想要做一個安裝字型的安裝程式,因為在專案軟體中有使用到這些字型,而又
考慮到客戶那裡沒有這些字型,所以才會想將這些字型透過InstallShield給安
裝到客戶電腦中的Windows\Fonts 我目前已經可以成功的將這些字型給複製到Windows\Fonts中,可是卻發現專案
軟體還是無法顯示出這些字型,於是我使用登錄機碼的方式,在安裝時自動新增
機碼到:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts
結果還是一樣無法使用!! 後來發現Windows有一個特性,那就是當我安裝好字型後,先去叫出控制台-->字
型的視窗後,往後在執行軟體專案時,就可以正常了!! 因此想請教一下,有什麼方式可以讓我在安裝好字型之後,就可以立刻生效,而不
是必須先叫出控制台-->字型後才會生效!! (畢竟在安裝過程中,莫名奇妙的在
客戶眼前出現控制台的視窗,不是很奇怪嗎?) 不好意思,多請教一個問題.....
那就是在Delphi中如何得知目前電腦中置放字型的目錄在那裡呢?
我只知道可以求出Windows或System的所在目錄,可是不知怎麼求得Fonts的所在
位置.....?? 難不成是固定在Windows所在目錄下的Fonts嗎? (我的意思是指:
是不是任何的Windows版本,都是這一個Fonts的目錄名稱嗎?) 在此先謝謝各位囉!!
發表人 -
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
關於第一點, 參考 To use a font in your application without having to install it in Windows: http://www.q3.nu/trucomania/truco.cgi?33&ing
// To load it, (by example, into OnCreate event of your form): procedure TForm1.FormCreate(Sender: TObject); begin AddFontResource('c:\FONTS\FUENTE.TTF'); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); end; // And before exit from your application, you must free it with: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin RemoveFontResource('D:\FONTS\FUENTE.TTF'); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); end;--- Everything I say is a lie. --<-<-<@ |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
第二點參考: http://www.q3.nu/trucomania/truco.cgi?279&ing
procedure TForm1.Button1Click(Sender: TObject); var PIDL:PItemIDList; Info:TShellExecuteInfo; pInfo:PShellExecuteInfo; WaitCode:DWord; begin {Obtenemos PIDL de la carpeta virtual} {get PIDL of the virtual folder} SHGetSpecialFolderLocation(Handle, CSIDL_FONTS, PIDL); {Puntero a Info} {Pointer to Info} pInfo:=@Info; {Rellenamos Info} {Fill info} With Info do begin cbSize:=SizeOf(Info); fMask:=SEE_MASK_NOCLOSEPROCESS SEE_MASK_IDLIST; wnd:=Handle; lpVerb:=nil; lpFile:=nil; {Parametros al ejecutable} {Executable parameters} lpParameters:=nil; lpDirectory:=nil; nShow:=SW_ShowNormal; hInstApp:=0; lpIDList:=PIDL; end; {Ejecutamos} {Execute} ShellExecuteEx(pInfo); {Esperamos que termine} {Wait to finish} repeat WaitCode := WaitForSingleObject(Info.hProcess,500); Application.ProcessMessages; until (WaitCode <> WAIT_TIMEOUT); end;--- Everything I say is a lie. --<-<-<@ |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
引言: 我目前已經可以成功的將這些字型給複製到Windows\Fonts中,可是卻發現專案 軟體還是無法顯示出這些字型,於是我使用登錄機碼的方式,在安裝時自動新增 機碼到:1個人經驗 當正規的字型直接複製於系統Fonts時應該是不用再至控制台 重新開機即可 2 登錄檔98與2000位置參數不一樣 如果將2000字用於98會有當機的疑慮 3 一般有內碼自訂的字型 需要搭配輸入法對印使用 所以有時安裝很不ez 2000下的是 C:\WINNT\Fonts 安裝複製於時此資料夾最好是最高權限使用者 此資料夾不是一般的資料夾 可以複製一個exe或txt就知道了 98 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32877 發表人 - conundrum 於 2004/02/12 17:20:47 |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言:您好: 我是要安裝華康字型....這個應該不算是正規字型吧! 所以我將字型複製到 Windows\Fonts之後,就算是重新開機,只要是沒有在複製後先開啟過一次控制台 中的字型視窗時,所新增加的字型是無法正常使用的!! 也就是在軟體中的字型 清單中是看不到這些字型的!! 最後的解決方式,是利用複製完字型之後,緊接著叫出外部程式:控制台中的字型 視窗...然後自動由程式將字型視窗給關閉....如此一來就可以正常使用了!! 至於如何控管何時安裝字型完畢後才叫出字型視窗....我在另一個主題中已有 解決方案了....也可以請大家參考!! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44814 Thanks!!引言: 我目前已經可以成功的將這些字型給複製到Windows\Fonts中,可是卻發現專案 軟體還是無法顯示出這些字型,於是我使用登錄機碼的方式,在安裝時自動新增 機碼到:1個人經驗 當正規的字型直接複製於系統Fonts時應該是不用再至控制台 重新開機即可 2 登錄檔98與2000位置參數不一樣 如果將2000字用於98會有當機的疑慮 3 一般有內碼自訂的字型 需要搭配輸入法對印使用 所以有時安裝很不ez 2000下的是 C:\WINNT\Fonts 安裝複製於時此資料夾最好是最高權限使用者 此資料夾不是一般的資料夾 可以複製一個exe或txt就知道了 98 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=32877 發表人 - conundrum 於 2004/02/12 17:20:47 |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
怪怪 本人在win2000下 複製貼上 ok
不需至 控制台
寫個 bat 批次檔 試試
xcopy /y/s/e c:\華康流葉體.ttc C:\WINNT\Fonts
終於知道問題了 哈哈 不需至控制台的說法 有誤
應該說
1 控制台方式
2 開啟C:\WINNT\Fonts 再關閉即會自動產生作用
上述的批次方式再加上 開啟C:\WINNT\Fonts 關閉即ok
由於再dos複製會比較慢 可以使用api方式複製 xcopy /y/s/e c:\111\*.ttc C:\WINNT\Fonts
C:\WINNT\explorer.exe C:\WINNT\Fonts 發表人 - conundrum 於 2004/02/13 20:57:21
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |