加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何使MessageDlg以所有者形式为中心

发布时间:2020-12-15 04:27:27 所属栏目:大数据 来源:网络整理
导读:我希望MessageDlg以其父表单为中心. 关于如何在Delphi 2010中完成这项工作的任何建议? 我在下面找到了这个代码:http://delphi.about.com/od/formsdialogs/l/aa010304a.htm,但对我来说并不行.弹出窗口仍然不是以所有者形式为中心. (对我来说,方法实际上不知
我希望MessageDlg以其父表单为中心.
关于如何在Delphi 2010中完成这项工作的任何建议?

我在下面找到了这个代码:http://delphi.about.com/od/formsdialogs/l/aa010304a.htm,但对我来说并不行.弹出窗口仍然不是以所有者形式为中心. (对我来说,方法实际上不知道所有者的形式是不清楚的)

function TForm1.MessageDlg(const Msg: string; DlgType: TMsgDlgType;
   Buttons: TMsgDlgButtons; HelpCtx: Integer): Integer;
 begin
   with CreateMessageDialog(Msg,DlgType,Buttons) do
     try
       Position := poOwnerFormCenter;
       Result := ShowModal
     finally
       Free
     end
 end;

解决方法

你可以做
function MessageDlg(const AOwner: TForm; const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Integer = 0): Integer;
begin
  with CreateMessageDialog(Msg,Buttons) do
    try
      Left := AOwner.Left + (AOwner.Width - Width) div 2;
      Top := AOwner.Top + (AOwner.Height - Height) div 2;
      Result := ShowModal;
    finally
      Free;
    end
end;

并称之为

procedure TForm1.FormClick(Sender: TObject);
begin
  MessageDlg(Self,'This is a test',mtInformation,[mbOK]);
end;

但是,我个人不会这样做,因为CreateMessageDialog所显示的对话框不是本地Windows对话框.将视觉效果与原始内容进行比较:

procedure TForm1.FormClick(Sender: TObject);
begin
  case MessageBox(Handle,PChar('This is a test. Do you wish to do something?'),PChar('A Silly Example'),MB_ICONQUESTION or MB_YESNO) of
    ID_YES:
      MessageBox(Handle,PChar('Great!'),MB_ICONINFORMATION or MB_OK);
    ID_NO:
      MessageBox(Handle,PChar('OK,well,I cannot force you...'),MB_ICONINFORMATION or MB_OK);
  end;
end;

至少在启用Aero主题的Windows 7中,本机对话框看起来好多了.然而,似乎这不能集中在任何特定的形式上.相反,对话框以当前显示器为中心.但这也是Windows中的默认行为(尝试记事本,写字板或油漆),那么为什么需要这种新行为?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读