众所周知 messagebox 可以返回
if Application.MessageBox('xxxx?','提示信息',MB_YESNO)=6 then  
然后执行后面的语句而showmessagepos可以将提示框的位置自由改变那有没有即可以改变提示框位置,又可以有messagebox提示框 if (按YES按钮后执行代码) THEN 的功能?
messagedlgposhelp可以吗?还是别的?

解决方案 »

  1.   

    MessageDlgPos可以做到的,楼主试过吗?
      

  2.   


    不用绝望,为什么叫你用from代替,因为除了API,D里面的提示框差不多都是用from
    ShowMessage调用ShowMessagePos
    ShowMessagePos调用MessageDlgPos,
    MessageDlgPos调用MessageDlgPosHelp
    最终的MessageDlgPosHelp也是创建一个form再ShowModal而已
    只不过他根据用户的参数使用了不同的按扭+图标所以,自己做一个也很方便,或者用现成的MessageDlgPos与MessageDlgPosHelp都行
      

  3.   

    对,只不过按钮上的文字什么的是英文的。其实那些英文都是可以改成中文的——自己把英文所在单元(即Dialogs单元所引用的Consts单元)复制一份到自己的工程中,然后把英文改成中文。
      

  4.   

    只需要改Consts单元的这些个值就可以了:
      SMsgDlgWarning = 'Warning';
      SMsgDlgError = 'Error';
      SMsgDlgInformation = 'Information';
      SMsgDlgConfirm = 'Confirm';
      SMsgDlgYes = '&Yes';
      SMsgDlgNo = '&No';
      SMsgDlgOK = 'OK';
      SMsgDlgCancel = 'Cancel';
      SMsgDlgHelp = '&Help';
      SMsgDlgHelpNone = 'No help available';
      SMsgDlgHelpHelp = 'Help';
      SMsgDlgAbort = '&Abort';
      SMsgDlgRetry = '&Retry';
      SMsgDlgIgnore = '&Ignore';
      SMsgDlgAll = '&All';
      SMsgDlgNoToAll = 'N&o to All';
      SMsgDlgYesToAll = 'Yes to &All';注意Build工程之前,做如下设置:菜单project -> options -> Compiler -> 勾选Use Debug DCUs。
      

  5.   

    还可以有更简单的:var
      F: TForm;
    begin
      F := CreateMessageDialog('xxxx?', mtConfirmation, [mbYes, mbNo], mbNo);
      try
        F.Caption := '提示信息';
        TButton(F.FindChildControl('Yes')).Caption := '是(&Y)';
        TButton(F.FindChildControl('No')).Caption := '否(&N)';
        F.Left := 1;
        F.Top := 100;
        case F.ShowModal() of
          mrYes: ShowMessage('Yes clicked');
          mrNo: ShowMessage('No clicked');
          mrCancel: ShowMessage('close');
        end;
      finally
        F.Free
      end;
    end;