Получение иконки формы, когда я знаю дескриптор формы - PullRequest
0 голосов
/ 08 мая 2011

Я пытаюсь получить значок формы и установить для него значок собственного приложения. Я нашел этот код, однако он не работает для меня:

  MyIcon := TIcon.Create;
   Try
   MyIcon.Handle := MyHandle;
   MyForm.Icon := MyIcon;
   Finally
     MyIcon.Free;
   End;
 end;

Я попытался открыть приложение, которое, как мне известно, имеет определенный значок, я нахожу его дескриптор, но значок, который отображается в моем приложении, является Windows exe по умолчанию.

Есть идеи?

1 Ответ

4 голосов
/ 08 мая 2011

Чтобы ответить на вопрос в заголовке вашего поста:

Чтобы получить TIcon из HWND, то есть получить значок, связанный с окном (не обязательно в вашем собственном приложении), выполните что-то вроде

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...