默认情况工程目录都有一个与工程同名的资源文件*.res,里面有一个图标资源MAINICON,
我自己又加进去一个图标101。
下面的代码可以让图标101显示在消息框上,可是如何才能在消息框上使用MAINICON呢??
请各位高人赐教。
procedure TForm1.Button1Click(Sender: TObject);
function MessageEx(lText, lCaption: PChar; lStyle: DWORD; IconId: Integer): Integer;
var
Msg: TMsgBoxParams;
begin
Msg.cbSize := Sizeof(Msg);
Msg.hwndOwner := Application.Handle;
Msg.hInstance := HInstance;
Msg.lpszText := lText;
Msg.lpszCaption := lCaption;
Msg.dwStyle := lStyle;
Msg.lpszIcon := MakeIntResource(IconId);
{如果改成Msg.lpszIcon := 'MAINICON';不能显示图标MAINICON}
Msg.dwContextHelpId := 0;
Msg.lpfnMsgBoxCallback := nil;
Msg.dwLanguageId := LANG_NEUTRAL;
Result := Integer(MessageBoxIndirect(Msg));
end;
begin
MessageEx('MessageEx', 'MessageEx', MB_OK or MB_USERICON, 101);//可以显示图标101
end;
我自己又加进去一个图标101。
下面的代码可以让图标101显示在消息框上,可是如何才能在消息框上使用MAINICON呢??
请各位高人赐教。
procedure TForm1.Button1Click(Sender: TObject);
function MessageEx(lText, lCaption: PChar; lStyle: DWORD; IconId: Integer): Integer;
var
Msg: TMsgBoxParams;
begin
Msg.cbSize := Sizeof(Msg);
Msg.hwndOwner := Application.Handle;
Msg.hInstance := HInstance;
Msg.lpszText := lText;
Msg.lpszCaption := lCaption;
Msg.dwStyle := lStyle;
Msg.lpszIcon := MakeIntResource(IconId);
{如果改成Msg.lpszIcon := 'MAINICON';不能显示图标MAINICON}
Msg.dwContextHelpId := 0;
Msg.lpfnMsgBoxCallback := nil;
Msg.dwLanguageId := LANG_NEUTRAL;
Result := Integer(MessageBoxIndirect(Msg));
end;
begin
MessageEx('MessageEx', 'MessageEx', MB_OK or MB_USERICON, 101);//可以显示图标101
end;
解决方案 »
- 想问问加速ide的用啥好,
- Tdbgrid 组件显示两个表的数据。
- 怎么在Delphi7 中用dbexpress连接sql server2000?
- 请问.yuv文件用什么打开?它的文件格式是什么?
- 急!!请问:为何DELPHI7无法向ACCESS97中输入数据?ACCESS97数据库结构能在DELPHI中更改吗?
- 30分在线等待(马上结帐):怎么打开制定的excel文件?小问题啊!
- 求SQL SERVER表的解决之道
- 当用调试器调试的时,当程序需要消息触发时?怎么调试?就是说我怎么设置才能看到消息传递的全过程?
- 关于视频播放
- 谁有RemObjects Pascal Script 语法手册
- datasnap的问题:如何让中间层服务器执行一个事务
- 从ACCESS中读取图片和视频
如果是HICON类型的,可以这样:Msg.lpszIcon := Application.Icon.Handle;
MessageBoxIndirect是API函数,TMsgBoxParams.lpszIcon的类型是PAnsiChar。
都不是我自定义的。
请楼上兄弟测试一下,多谢
application.icon.handle就可以了
我测试结果:
Msg.lpszIcon := Application.Icon.Handle;//报错类型不匹配
MessageEx('MessageEx', 'MessageEx', MB_OK or MB_USERICON, application.icon.handle);//显示空白
不得闲你是怎么写的?
原来TMsgBoxParams.lpszIcon就是资源文件里的资源名字。但我不会。再顶
function MessageEx(lText, lCaption: PChar; lStyle: DWORD; IconId: Integer): Integer;
var
Msg: TMsgBoxParams;
begin
Msg.cbSize := Sizeof(Msg);
Msg.hwndOwner := Application.Handle;
// Msg.hInstance := HInstance;
Msg.hInstance := 0;//如果使用系统定义的标准图标,这个句柄必须为0
Msg.lpszText := lText;
Msg.lpszCaption := lCaption;
Msg.dwStyle := lStyle;
Msg.lpszIcon := MakeIntResource(IconId);
{如果改成Msg.lpszIcon := 'MAINICON';不能显示图标MAINICON}
Msg.dwContextHelpId := 0;
Msg.lpfnMsgBoxCallback := nil;
Msg.dwLanguageId := LANG_NEUTRAL;
Result := Integer(MessageBoxIndirect(Msg));
end;
begin
MessageEx('MessageEx', 'MessageEx', MB_OK or MB_USERICON, 101);//可以显示图标101
MessageEx('MessageEx', 'MessageEx', MB_OK or MB_USERICON, 32512);//应用程序图标end;
不能能显示图标时因为没有找到资源。ms 实现 MessageBoxIndirect函数时,将图标资源的标识符视为一个整数,因此,不支持以字符标识表示的资源。
通过十六进制比对资源文件(*.res)我发现'MAINICON'的十六进制串是这样的:'AD 00 41 00 49 00 4E 00 49 00 43 00 4F 00 4E 00',豁然开朗了:
测试Msg.lpszIcon := 'M'+#0+'A'+#0+'I'+#0+'N'+#0+'I'+#0+'C'+#0+'O'+#0+'N'+#0;成功!
或者说应该直接使用宽字符的MessageBoxIndirectW:procedure TForm1.Button1Click(Sender: TObject);
var
Msg: TMsgBoxParamsW;
begin
Msg.cbSize := Sizeof(Msg);
Msg.hwndOwner := Application.Handle;
Msg.hInstance := HInstance;
Msg.lpszText := 'MY MAINICON !';
Msg.lpszCaption := 'MAINICON';
Msg.dwStyle := MB_OK or MB_USERICON;
Msg.lpszIcon := 'MAINICON';
Msg.dwContextHelpId := 0;
Msg.lpfnMsgBoxCallback := nil;
Msg.dwLanguageId := LANG_NEUTRAL;
MessageBoxIndirectW(Msg);{成功显示MAINICON}
end;
var
Msg: TMsgBoxParamsW;
begin
Msg.cbSize := Sizeof(Msg);
Msg.hwndOwner := Application.Handle;
Msg.hInstance := HInstance;
Msg.lpszText := lText;
Msg.lpszCaption := lCaption;
Msg.dwStyle := lStyle;
Msg.lpszIcon := IconID;
Msg.dwContextHelpId := 0;
Msg.lpfnMsgBoxCallback := nil;
Msg.dwLanguageId := LANG_NEUTRAL;
Result := Integer(MessageBoxIndirectW(Msg));
end;begin
MessageEx('Hello MessageEx!','MessageEx', MB_OK or MB_USERICON, 'MAINICON');{PWideChar(101)}
end;数字ID,字符串ID都没问题了!