如何让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的实现源码
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;
[解决办法]
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方法,还可以用钩子
[解决办法]