Windows 获取表格';当我知道表单';拉手
我正在尝试获取表单的图标,并将其设置为我自己应用程序的图标。我发现了这段代码,但它对我来说并不适用:Windows 获取表格';当我知道表单';拉手,windows,delphi,icons,Windows,Delphi,Icons,我正在尝试获取表单的图标,并将其设置为我自己应用程序的图标。我发现了这段代码,但它对我来说并不适用: MyIcon := TIcon.Create; Try MyIcon.Handle := MyHandle; MyForm.Icon := MyIcon; Finally MyIcon.Free; End; end; 我尝试打开一个我知道有特定图标的应用程序,我找到了它的句柄,但我的应用程序中显示的图标是默认的Windows exe图标 有什么想法
MyIcon := TIcon.Create;
Try
MyIcon.Handle := MyHandle;
MyForm.Icon := MyIcon;
Finally
MyIcon.Free;
End;
end;
我尝试打开一个我知道有特定图标的应用程序,我找到了它的句柄,但我的应用程序中显示的图标是默认的Windows exe图标
有什么想法吗?要回答文章标题中的问题: 要从
HWND
获取TIcon
,也就是说,要获取与窗口关联的图标(不一定在您自己的应用程序中),请执行以下操作
procedure TForm1.FormClick(Sender: TObject);
var
HIco: HICON;
Icon: TIcon;
begin
HIco := SendMessage(Handle, WM_GETICON, ICON_BIG, 0);
if HIco = 0 then
HIco := SendMessage(Handle, WM_GETICON, ICON_SMALL2, 0);
Icon := TIcon.Create;
try
Icon.ReleaseHandle;
Icon.Handle := HIco;
// Do something with Icon, for instance
Canvas.Draw(10, 10, Icon);
finally
Icon.Free;
end;
end;
要使用HWND
窗口的图标作为您自己表单的图标,请执行以下操作
procedure TForm1.FormClick(Sender: TObject);
var
HWin: HWND;
HIco: HICON;
begin
HWin := FindWindow(nil, 'New file'); // A Rejbrand Text Editor window
HIco := SendMessage(HWin, WM_GETICON, ICON_BIG, 0);
if HIco = 0 then
HIco := SendMessage(HWin, WM_GETICON, ICON_SMALL2, 0);
Self.Icon.ReleaseHandle; // important!
Self.Icon.Handle := HIco;
end;
要回答文章标题中的问题: 要从
HWND
获取TIcon
,也就是说,要获取与窗口关联的图标(不一定在您自己的应用程序中),请执行以下操作
procedure TForm1.FormClick(Sender: TObject);
var
HIco: HICON;
Icon: TIcon;
begin
HIco := SendMessage(Handle, WM_GETICON, ICON_BIG, 0);
if HIco = 0 then
HIco := SendMessage(Handle, WM_GETICON, ICON_SMALL2, 0);
Icon := TIcon.Create;
try
Icon.ReleaseHandle;
Icon.Handle := HIco;
// Do something with Icon, for instance
Canvas.Draw(10, 10, Icon);
finally
Icon.Free;
end;
end;
要使用HWND
窗口的图标作为您自己表单的图标,请执行以下操作
procedure TForm1.FormClick(Sender: TObject);
var
HWin: HWND;
HIco: HICON;
begin
HWin := FindWindow(nil, 'New file'); // A Rejbrand Text Editor window
HIco := SendMessage(HWin, WM_GETICON, ICON_BIG, 0);
if HIco = 0 then
HIco := SendMessage(HWin, WM_GETICON, ICON_SMALL2, 0);
Self.Icon.ReleaseHandle; // important!
Self.Icon.Handle := HIco;
end;
(1) “表单”是您自己应用程序中的表单,还是外部应用程序中的窗口?(2) 您只需要获取图标,还是需要更改表单的图标(可能在外部应用程序中)?MyForm是我自己的表单。我需要更改我的图标:)但如果它是您自己的表单,那么您当然可以只做
MyForm.icon:=MyIcon
或MyForm.icon.LoadFromFile()
或…?好的,我想我现在明白了。通过“将其设置为我自己的…”我首先认为您希望更改刚刚找到的图标,但是相反,您希望使用该特定图标作为您自己的图标,对吗?你的意思是“将它设置为我自己的…”。上面的代码不起作用,因为在MyForm.Icon:=MyIcon
之后,MyForm.Icon
和MyIcon
是同一个对象。因此,当您释放MyIcon
时,您也可以释放MyForm.Icon
。您应该改用MyForm.Icon.Assign(MyIcon)
。或者只需执行MyForm.Icon.ReleaseHandle
,然后执行MyForm.Icon.Handle:=handleOfExternalAlicon
,您可以通过向外部窗口发送WM_GETICON
消息来获取该操作。也就是说,您使用WM_GETICON
获取HWND
的HICON
(1)“表单”是您自己应用程序中的表单,还是外部应用程序中的窗口?(2) 您只需要获取图标,还是需要更改表单的图标(可能在外部应用程序中)?MyForm是我自己的表单。我需要更改我的图标:)但如果它是您自己的表单,那么您当然可以只做MyForm.icon:=MyIcon
或MyForm.icon.LoadFromFile()
或…?好的,我想我现在明白了。通过“将其设置为我自己的…”我首先认为您希望更改刚刚找到的图标,但是相反,您希望使用该特定图标作为您自己的图标,对吗?你的意思是“将它设置为我自己的…”。上面的代码不起作用,因为在MyForm.Icon:=MyIcon
之后,MyForm.Icon
和MyIcon
是同一个对象。因此,当您释放MyIcon
时,您也可以释放MyForm.Icon
。您应该改用MyForm.Icon.Assign(MyIcon)
。或者只需执行MyForm.Icon.ReleaseHandle
,然后执行MyForm.Icon.Handle:=handleOfExternalAlicon
,您可以通过向外部窗口发送WM_GETICON
消息来获取该操作。也就是说,使用WM_GETICON
获取HWND
的HICON
。