2016-01-29 151 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

虽然我意识到自己在这个问题上的态度以及在提问的方式上都很努力,但是昨天我很累,我知道这不是理由......你可能永远不会感到疲倦......我认为没有你这样对我说话的理由。你应该学会帮助,同时善良。 –