2015-07-10 59 views
1

我有主要的.exe應用程序和與窗體.dll。我可以從.exe創建和顯示錶單,但它沒有任務欄圖標(和左上角的小圖標)。我想從另一個DLL加載這個圖標。我該怎麼做?德爾福 - 更改任務欄圖標

回答

3

以下是您需要做的事情。我沒有包含太多的細節,因爲你的問題沒有細節,也沒有辦法讓我確切地知道你將如何適應你的程序。關鍵是要從高層明確你需要做什麼。

加載包含資源

爲此,使用LoadLibraryLoadLibraryEx的DLL。如果您需要調用DLL中的代碼,請使用前者。否則使用後者通過LOAD_LIBRARY_AS_IMAGE_RESOURCE。這兩個函數都產生一個模塊句柄HMODULE

負載從DLL

圖標傳遞HMODULELoadIcon或​​從資源加載的圖標。這將產生一個HICON。將其分配給TIcon實例的Handle屬性。

指定的圖標形式

分配您在上一步到窗體的Icon財產獲得的圖標對象。

1

非常感謝。我嘗試了類似Form.Icon.Assign(Icon);但它創建了AV錯誤消息。這裏是工作代碼:

procedure TformOptions.FormCreate(Sender: TObject); 
var 
    lib: THandle; 
    icon: TIcon; 
begin 
    icon := TIcon.Create; 
    lib := LoadLibrary('res.dll'); 
    if lib > 0 then icon.Handle := LoadIcon(lib, 'ICON2'); 
    if icon.Handle > 0 then Application.Icon.Assign(icon); 
    icon.Free; 
    FreeLibrary(lib); 
end; 
+0

該AV將是因爲你的代碼中的錯誤。可能的表單無效。測試不等於零而不是大於。使用LoadLibraryEx來避免在dll中執行代碼。最後嘗試使用。簡單的分配給圖標比分配更習慣。 –