2016-01-29 81 views
-2

我想玩LoadIconWithScaleDown API。 我使用的是Delphi 2007,我編寫了一個簡單的示例程序,在點擊一個按鈕後,我調用COMMCTRL.LoadIconWithScaleDown。我嘗試了各種組合,實例爲零,實例設置爲hInstance,對於第二個參數,我嘗試傳遞當前模塊名稱MAKEINTRESOURCE(IDI_APPLICATION),...總是沒有運氣,我總是得到一個返回值-2147467263 。任何想法我做錯了什麼?LoadIconWithScaleDown總是失敗

根據David的建議編輯,以顯示我如何嘗試調用API。

procedure TForm31.Button1Click(Sender: TObject); 

    var moduleName : string; 
    var moduleNameW : widestring; 

    var retVal  : HRESULT; 
    var iconHandle : HICON; 

begin 
    iconHandle := 0; 

    SetLength(moduleName, 1024); 

    WINDOWS.GetModuleFileName(
       hInstance, 
       PCHAR(moduleName), 
       LENGTH(moduleName)); 

    moduleNameW := moduleName; 

    retVal := COMMCTRL.LoadIconWithScaleDown(
         HINSTANCE, 
         PWidechar(moduleNameW), 
         image1.width, 
         image1.height, 
         iconHandle); 
end; 
+1

你在做什麼錯誤是問關於你的代碼的問題,而不包括[mcve] –

+0

我瞭解你的評論David,但我嘗試了各種組合,但都沒有成功。如果你只有一個工作,我會很感激。我會編輯我的信息,舉例說明我嘗試過的。 –

+0

你根本不檢查錯誤。下一步閱讀文檔。聽起來很明顯,但你還沒有做到。仔細閱讀。兩次。您傳遞的資源名稱錯誤是我的猜測。錯誤會告訴你。再次閱讀文檔。這就是他們的目的。 –

回答

0

這一個很好的示範,爲什麼你應該沒有閱讀和理解文檔不使用WinAPI的功能。

LoadIconWithScaleDown的文檔清楚地說明了參數以及如何使用它們。沒有理由使用GetModuleFileName,並且傳遞它的參數錯誤,文檔中明確指出。

以下是兩種使用函數的示例,首先從外部磁盤文件加載圖標,然後從應用程序中的圖標資源加載。它是在Delphi 10 Seattle下編譯和測試的,只要文件或資源存在於您使用的位置即可。

uses 
    CommCtrl; 

var 
    hIco: HICON; 
    Ico: TIcon; 
    NewWidth, NewHeight: Integer; 
begin 
    NewWidth := 16; 
    NewHeight := 16; 
    if Succeeded(LoadIconWithScaleDown(0, 
            'C:\Images\SomeFile.ico', 
            NewWidth, NewHeight, hIco)) then 
    begin 
    Ico := TIcon.Create; 
    Ico.Handle := hIco; 
    // Do whatever with the icon. Clean up is left to you 
    end; 

    if Succeeded(LoadIconWithScaleDown(hInstance, 
            'MYRESOURCENAME', 
            NewWidth, NewHeight, hIco)) then 
    begin 
    // See code above 
    end; 
end; 

(不,這個問題是不是你需要首先調用InitCommonControlsEx。包括CommCtrl做必要的初始化操作。)

+0

嗨,肯,我同意我使用模塊名稱作爲第二個參數很厚。事情是我曾嘗試其他的東西圖標,MAKEINTRESOURCE之前沒有運氣。在我的Delphi版本(2007)中,我需要明確調用InitCommControlsEx,我很確定。我調試了COMMCTRL。所以請不要太傲慢。有時你可能會錯。 :-) –

+0

我不喜歡你的傲慢語氣肯。 –

+0

雖然我意識到自己在這個問題上的態度以及在提問的方式上都很努力,但是昨天我很累,我知道這不是理由......你可能永遠不會感到疲倦......我認爲沒有你這樣對我說話的理由。你應該學會幫助,同時善良。 –