Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 获取表格';当我知道表单';拉手_Windows_Delphi_Icons - Fatal编程技术网

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