首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么让MessageDlg显示的信息总在最前面

2012-03-03 
如何让MessageDlg显示的信息总在最前面?用Application-MessageBox可以,但不知用MessageDlg行吗?如果行,应

如何让MessageDlg显示的信息总在最前面?
用Application->MessageBox可以,但不知用MessageDlg行吗?如果行,应该怎么做?急,在线等,解决马上给分。

Application->MessageBox(MSG,"Information",MB_OK|MB_TOPMOST);

[解决办法]
MessageDlg好像没有设置TOPMOST的功能,为什么楼主非得要用MessageDlg,一般而言MessageBox比MessageDlg好,
·MessageDlg 的按钮caption是英文,MessageBox是中文
·MessageDlg带HelpCtx(即 Help Context,一般用不着),而MessageBox可以自定对话框标题(常用)
·MessageDlg是Delphi对 MessageBox的二次实现,在Uses里要加Dialogs声明
[解决办法]
这是MessageDlg的实现源码

Delphi(Pascal) code
function MessageDlg(const Msg: string; DlgType: TMsgDlgType;  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;begin  Result := MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, -1, -1, '');end;function DoMessageDlgPosHelp(MessageDialog: TForm; HelpCtx: Longint; X, Y: Integer;  const HelpFileName: string): Integer;begin  with MessageDialog do    try      HelpContext := HelpCtx;      HelpFile := HelpFileName;      if X >= 0 then Left := X;      if Y >= 0 then Top := Y;      if (Y < 0) and (X < 0) then Position := poScreenCenter;      Result := ShowModal;    finally      Free;    end;end;function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;  Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;  const HelpFileName: string): Integer;begin  Result := DoMessageDlgPosHelp(CreateMessageDialog(Msg, DlgType, Buttons),    HelpCtx, X, Y, HelpFileName);end;
[解决办法]
C/C++ code
MessageDlg("测试",mtWarning, TMsgDlgButtons() << mbOK,0);... ...        HWND hWnd;    hWnd=FindWindow("TMessageForm","Warning");    if(hWnd!=NULL)    {     SetWindowPos(hWnd, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);          }
[解决办法]
正常的MessageDlg不可以,正如yeyanbin所说,你为何一定要用MessageDlg?
无论是MessageDlg还是ication->MessageBox,最终都是用
::MessageBox实现的,你也可用SDK的MessageBox
如果一定要MessageDlg显示在最前面,除了yeyanbin写的FindWidwos方法,还可以用钩子
[解决办法]
探讨
Application->MessageBox()在win7下显示会异常,很难看,这是我要换的原因。如果要用用SDK的MessageBox,要怎么用?

[解决办法]
探讨

Application->MessageBox()在win7下显示会异常,很难看,这是我要换的原因。如果要用用SDK的MessageBox,要怎么用?

热点排行