Использование MessageBoxIndirect. [D6, WinXP]
Forelli © (2004-08-11 22:55:00)
Есть проблема. В свойство hInstance задаю HINstance,
dwStyle:=MB_USERICON; Ресурс с иконкой прикреплён к проекту
директивой
{$R resource.res}. А вот что задавать в свойстве lpszIcon?
Что только не перепробовал! Ничего не работает. Сообщение вылазит,
а иконки нет.
Cobalt
©
Вообще-то он объявлен, как PAnsiChar...
А что ты этому полю присваивал?
GuAV
©
> Ресурс с иконкой прикреплён к проекту директивой
{$R resource.res}.
>
А как иконка обозавна? если обозавна числом, например 100 то
PAnsiChar(100), если текстом, например ICON1, то 'ICON1'
Игорь Шевченко
©
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{$R ADD.RES}
procedure TForm1.Button1Click(Sender: TObject);
var
Msg: TMSGBOXPARAMS;
begin
Msg.cbSize:= SizeOf(Msg);
Msg.hwndOwner:= Handle;
Msg.hInstance:= hInstance;
Msg.lpszText:= 'Test message box with user defined
icon';
Msg.lpszCaption:= 'TestMessage';
Msg.dwStyle:= MB_USERICON;
Msg.lpszIcon:= MakeIntResource(7);
Msg.dwContextHelpId:= 0;
Msg.lpfnMsgBoxCallback:= nil;
Msg.dwLanguageId:= LANG_NEUTRAL;
MessageBoxIndirect(Msg);
Showmessage(SysErrorMessage(GetLastError));
end;
end.
add.rc
#include "add.rh"
HS_ICON ICON "hs_main.ico"
add.rh
#define HS_ICON 7
ALS
©
if Win32Platform = VER_PLATFORM_WIN32_NT then
PWideChar(MSGBOXPARAMS.lpszIcon) := 'MAINICON'
else
MSGBOXPARAMS.lpszIcon := 'MAINICON';
Игорь Шевченко
©
ALS © (12.08.04 11:20) [4]
Зачем ? Вызывается же messageBoxIndirectA
ALS
©
>
Игорь Шевченко © (12.08.04 11:28) [5]
Help - Windows SDK - MessageBoxIndirect - Quick info:
Unicode WinNT
Если обращаться к ресурсу по имени, без приведения типа к
PWideChar под W2000,D5,D6 у меня иконка не появляется
Игорь Шевченко
©
ALS © (12.08.04 11:40) [6]
> Help - Windows SDK - MessageBoxIndirect - Quick info:
> Unicode WinNT
MessageBoxIndirect: Unicode: Implemented as Unicode and ANSI
versions on Windows NT, Windows 2000, Windows XP
MSGBOXPARAMS: Unicode: Implemented as Unicode and ANSI
versions on Windows NT, Windows 2000, Windows XP
http://msdn.microsoft.com
Однако, твоя правда, иконка по имени не показывается до тех
пор, пока ее в Unicode не переведешь.
Причем, такое поведение заложено в Windows, так как внутри
MessageBoxIndirect все время вызывается LoadIconW, вне зависимости
от того, какая из функций MessageBoxIndirectA или
MessageBoxIndirectW вызвана.
Баг-с.
Наверх