MessageBox对话框中间对齐问题 ( 积分: 50 )

  • 主题发起人 主题发起人 qianwt
  • 开始时间 开始时间
Q

qianwt

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把MessageBox的对话框, 显示当前窗体的中间位置<br><br>MessageBox(Handle, '提示', '.....', MB_OK);<br><br>但是当Handle的句柄是MDI窗体的时候, MessageBox弹出框的位置是在主窗体中央, 如何解决
 
我想把MessageBox的对话框, 显示当前窗体的中间位置<br><br>MessageBox(Handle, '提示', '.....', MB_OK);<br><br>但是当Handle的句柄是MDI窗体的时候, MessageBox弹出框的位置是在主窗体中央, 如何解决
 
MessageBox(FrmDetail.Handle, '提示', '.....', MB_OK);<br>试一试
 
我就是在MDI窗体中调用 MessageBox 的呀, 这样Handle等于FrmDetail.Handle呀
 
MessageBox(GetActiveWindow, '提示', '.....',MB_ICONINFORMATION+MB_OK);
 
这个不是窗体句柄的问题呀, <br>Handle = FrmDetail.Handle = GetActiveWindow, 这个不是问题的所在<br>关键的是窗体是MDI的窗体.
 
如果用MessageBox,fsMDIForm 和 fsMDIChild 不是一样的效果吗?没明白[:(]<br>要显示在窗体中央这样行不?<br>MessageDlgPosHelp('your msg',mtInformation,[mbOK],0,Left + Width div 2,Top + Height div 2,'');
 
不好意思, 没把问题表达清楚,<br><br>我要效果是的是在MDIChild窗体中调用MessageBox弹出的提示框要显示在MDIChild窗体的中间位置, 但是他却显示在MDIForm窗体的中间位置
 
[red]MessageDlgPosHelp('your msg',mtInformation,[mbOK],0,Left + Width div 2,Top + Height div 2,'');[/red]<br>这句就可以。。。
 
这样还是有点问题, 要想中间对齐, 弹出框的Left = (FrmDetail.Left + FrmDetail.Width - Width) div 2, 这样才对齐, 但是弹出框的Width我得不到呀,<br>正在看看MessageDlgPosHelp函数如何实现的
 
实在不行自己写MyMessageDlgPosHelp[:D]<br>function MyMessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;<br> &nbsp;Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;<br> &nbsp;const HelpFileName: string): Integer;<br>begin<br> &nbsp;with CreateMessageDialog(Msg, DlgType, Buttons) do<br> &nbsp; &nbsp;try<br> &nbsp; &nbsp; &nbsp;HelpContext := HelpCtx;<br> &nbsp; &nbsp; &nbsp;HelpFile := HelpFileName;<br> &nbsp; &nbsp; &nbsp;if X &gt;= 0 then Left := X - Width div 8;<br> &nbsp; &nbsp; &nbsp;if Y &gt;= 0 then Top := Y - Height div 8;<br> &nbsp; &nbsp; &nbsp;if (Y &lt; 0) and (X &lt; 0) then Position := poScreenCenter;<br> &nbsp; &nbsp; &nbsp;Result := ShowModal;<br> &nbsp; &nbsp;finally<br> &nbsp; &nbsp; &nbsp;Free;<br> &nbsp; &nbsp;end;<br>end;<br>当然,这样你还可以去掉HelpCtx和HelpFileName,更方便了。
 
to shine007:<br> &nbsp;谢过先了, 我也是这样改的, 但是调用的时候却有新的问题了, MIDIChild窗体的Top的值好像是相对与MDIForm客户端区域的. 这样定位就出问题了<br><br>那怕用ClientToScreent转化成屏幕的位置, 居然还是错误的()
 
变通一下:<br>function MyMessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;<br> &nbsp;Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;<br> &nbsp;const HelpFileName: string): Integer;<br>begin<br> &nbsp;with CreateMessageDialog(Msg, DlgType, Buttons) do<br> &nbsp; &nbsp;try<br> &nbsp; &nbsp; &nbsp;HelpContext := HelpCtx;<br> &nbsp; &nbsp; &nbsp;HelpFile := HelpFileName;<br> &nbsp; &nbsp; &nbsp;if X &gt;= 0 then Left := Application.MainForm.Left + X - ClientWidth div 2;<br> &nbsp; &nbsp; &nbsp;if Y &gt;= 0 then Top := Application.MainForm.Top + Y - ClientHeight div 2;<br> &nbsp; &nbsp; &nbsp;if (Y &lt; 0) and (X &lt; 0) then Position := poScreenCenter;<br> &nbsp; &nbsp; &nbsp;Result := ShowModal;<br> &nbsp; &nbsp;finally<br> &nbsp; &nbsp; &nbsp;Free;<br> &nbsp; &nbsp;end;<br>end;<br><br>[blue]MyMessageDlgPosHelp('your msg',mtInformation,[mbOK],0,Left+ Width div 2,TOP + Height div 2,'');[/blue]
 
自己写个Form,让它弹出来就不用这么麻烦了[:)]<br><br>同时又能满足客户以后的变化,比如说要这个对话框彩色等等
 
to: shine007<br> &nbsp;你那样的方法跟ClientToScreen是一样的, 我主界面上面有CoolBar, <br> &nbsp;这样CoolBar高度没有算上, 我也不知道怎么回事.
 
后退
顶部