線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2788
推到 Plurk!
推到 Facebook!

請教如何讓新增的字型立即生效呢?

尚未結案
SKYSTAR
中階會員


發表:76
回覆:198
積分:64
註冊:2002-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-12 10:19:29 IP:203.73.xxx.xxx 未訂閱
各位大大好:    目前我遇到一個問題: 我想要做一個安裝字型的安裝程式,因為在專案軟體中有使用到這些字型,而又 考慮到客戶那裡沒有這些字型,所以才會想將這些字型透過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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-12 11:50:41 IP:202.39.xxx.xxx 未訂閱
關於第一點, 參考 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-12 11:53:23 IP:202.39.xxx.xxx 未訂閱
第二點參考: 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-12 17:07:38 IP:61.221.xxx.xxx 未訂閱
引言: 我目前已經可以成功的將這些字型給複製到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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-13 18:41:13 IP:203.73.xxx.xxx 未訂閱
引言:
引言: 我目前已經可以成功的將這些字型給複製到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
您好: 我是要安裝華康字型....這個應該不算是正規字型吧! 所以我將字型複製到 Windows\Fonts之後,就算是重新開機,只要是沒有在複製後先開啟過一次控制台 中的字型視窗時,所新增加的字型是無法正常使用的!! 也就是在軟體中的字型 清單中是看不到這些字型的!! 最後的解決方式,是利用複製完字型之後,緊接著叫出外部程式:控制台中的字型 視窗...然後自動由程式將字型視窗給關閉....如此一來就可以正常使用了!! 至於如何控管何時安裝字型完畢後才叫出字型視窗....我在另一個主題中已有 解決方案了....也可以請大家參考!! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44814 Thanks!!
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-13 19:01:38 IP:61.221.xxx.xxx 未訂閱
怪怪 本人在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
系統時間:2024-05-18 5:45:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!