Как загрузить TImage с помощью общих значков диалога задач? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь загрузить значки, используемые диалогами задач Delphi, в элемент управления TImage.Как я узнал здесь , я использую функцию LoadImage, но значки выглядят слегка отличающимися от тех, которые используются функцией MessageDlg.

example form

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.Icon.Handle := LoadImage( 0, IDI_WARNING, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE or LR_SHARED );
  MessageDlg('mtWarning', mtWarning, [mbOk], 0);

  Image1.Picture.Icon.Handle := LoadImage( 0, IDI_ERROR, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE or LR_SHARED );
  MessageDlg('mtError', mtError, [mbOk], 0);

  Image1.Picture.Icon.Handle := LoadImage( 0, IDI_INFORMATION, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE or LR_SHARED );
  MessageDlg('mtInformation', mtInformation, [mbOk], 0);

  Image1.Picture.Icon.Handle := LoadImage( 0, IDI_QUESTION, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE or LR_SHARED );
  MessageDlg('mtConfirmation', mtConfirmation, [mbOk], 0);
end;

end.

Как видите, значки в TImage отличаются от соответствующего значка, используемого функцией MessageDlg.

mtWarning dialog mtError dialog mtInformation dialog mtConfirmation dialog

Дальнейшие тесты:

  1. Я обнаружил, что функция MessageDlg использует те же значки, полученные LoadImage, когда установлен флаг Включить темы выполнения деактивировано (в Параметры проекта ).

  2. Кажется, что функция MessageDlg использует некоторые константы, определенные в единице CommCtrl:

{Общие значки диалогового окна задачи}

{$ EXTERNALSYM TD_WARNING_ICON}
TD_WARNING_ICON = MAKEINTRESOURCEW (Word (-1));
{$ EXTERNALSYM TD_ERROR_IC_ONTD_ERROR_ICON = MAKEINTRESOURCEW (Word (-2));
{$ EXTERNALSYM TD_INFORMATION_ICON} TD_INFORMATION_ICON = MAKEINTRESOURCEW (Word (-3));
{$ EXTERNALSYM TD_SHIELD_ICON}
TD_SHIELD_ICON = * MAKEINTRESOURCEW (10 *) * 1068) (68 *) * 686 * 686)Я получаю те же значки, которые используются в диалогах задач?

...