如何使用任务对话框常用图标加载TImage?

时间:2019-02-22 11:25:25

标签: delphi dialog icons delphi-2007 standard-icons

我正在尝试将Delphi的任务对话框使用的图标加载到TImage控件中。 据我所知here,我正在使用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. 我发现,当启用运行时主题标志被停用时(在 Project Options中,MessageDlg函数使用的是LoadImage所获得的相同图标)。

  2. MessageDlg函数似乎使用了以CommCtrl单位定义的一些常量:

  

{任务对话框常用图标}

     

{$ EXTERNALSYM TD_WARNING_ICON}
  TD_WARNING_ICON = MAKEINTRESOURCEW(Word(-1));
  {$ EXTERNALSYM TD_ERROR_ICON}
  TD_ERROR_ICON = MAKEINTRESOURCEW(Word(-2));
  {$ EXTERNALSYM TD_INFORMATION_ICON} TD_INFORMATION_ICON = MAKEINTRESOURCEW(Word(-3));
  {$ EXTERNALSYM TD_SHIELD_ICON}
  TD_SHIELD_ICON = MAKEINTRESOURCEW(Word(-4));

如何获得任务对话框使用的相同图标?

0 个答案:

没有答案