代码之家  ›  专栏  ›  技术社区  ›  Soon Santos

更改消息Dlg语言Delphi

  •  0
  • Soon Santos  · 技术社区  · 6 年前

    当我使用 MessageDlg() 功能如下:

    if MessageDlg(SWarningWishToDelete + ' ' + PersonName + '?',
      mtWarning, [mbNo, mbYes], 0) = mrYes then
    

    “Yes/No(是/否)”按钮以英语而不是我的操作系统语言显示。我在互联网上搜索过,但是,我发现了大而老的解决方案。我想知道是否有一种简单/新的方法来改变它?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Ilyes    6 年前

    你可以使用 CreateMessageDialog() 作为

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with CreateMessageDialog('Msg', mtConfirmation, [mbYes, mbNo], mbNo) do
        begin
          try
            TButton(FindComponent('Yes')).Caption:= 'نعم';
            TButton(FindComponent('No')).Caption:= 'لا';
            ShowModal;
          finally
            case ModalResult of
              mrYes: ShowMessage('You click نعم');
              mrNo: ShowMessage('You click لا');
              mrCancel: ShowMessage('Dialog cancled!');
            end;
            Free;
          end;
        end;
    end;
    

    使用 TTaskDialog 作为

    procedure TForm1.Button2Click(Sender: TObject);
    Var
      Dlg: TTaskDialog;
    begin
      Dlg := TTaskDialog.Create(Self);
      try
        with Dlg do
          begin
            CommonButtons:= [];
            Caption:= 'Caption here';
            Text:= 'Text here';
            with Buttons.Add do
              begin
                Caption:= 'نعم';
                ModalResult:= mrYes;
              end;
            with Buttons.Add do
              begin
                Caption:= 'لا';
                ModalResult:= mrNo;
              end;
            if Execute then
              case ModalResult of
                mrYes: ShowMessage('You click نعم');
                mrNo: ShowMessage('You click لا');
                mrCancel: ShowMessage('Dialog cancled!');
              end;
          end;
      finally
        Dlg.Free;
      end;
    end;
    

    注: TTASK对话 特定于平台,需要Vista、Windows 7或更高版本的Windows操作系统。

    为了好玩,你甚至可以创建自己的功能:

    function TForm1.MyDialog(const DlgCaption, DlgText: String; DlgButtons: array of string;
      DlgType: TMsgDlgType; Buttons: TMsgDlgButtons): TForm;
    Var
      I: Integer;
      F: TForm;
    begin
      F:= CreateMessageDialog(Text, DlgType, Buttons);
      F.Caption:= DlgCaption;
      TLabel(F.Components[1]).Caption:= DlgText;
      for I := Low(DlgButtons) to High(DlgButtons) do
        begin
          TButton(F.Components[I+2]).Caption:= DlgButtons[I];
        end;
      Result:= F;
    end;
    

    并测试它

    MyDialog('Caption', 'Text', ['Yes do', 'No don''t'], mtConfirmation, [mbYes, mbNo]).ShowModal;
    

    这也是该函数的另一个版本

    function MyDialog(Const DlgCaption, DlgText: string; DlgButtons: array of string;
                 DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; 
                 BidiMode: TBiDiMode = bdLeftToRight;
                 DefultButton: TMsgDlgBtn = mbOK):TForm;
    

    功能代码

    function TForm1.MyDialog(const DlgCaption, DlgText: string;
      DlgButtons: array of string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons;
      BidiMode: TBiDiMode; DefultButton: TMsgDlgBtn): TForm;
    Var
      I, CntBtns: Integer;
      F: TForm;
      Btn: TMsgDlgBtn;
    begin
      // Check for strings
      CntBtns:= 0;
      for Btn in Buttons do
      begin
        Inc(CntBtns);
      end;
      if Length(DlgButtons) <> CntBtns then
        raise Exception.Create('DlgButtons and Buttons params should have the same count');
      //Get the Form created by CreateMessageDialog function
      F:= CreateMessageDialog(DlgText, DlgType, Buttons, DefultButton);
      // Set the Caption of th form
      F.Caption:= DlgCaption;
      // Change the buttons Captions
      for I := Low(DlgButtons) to High(DlgButtons) do
        TButton(F.Components[I+2]).Caption:= DlgButtons[I];
      // Check for bidimode
      if BidiMode = bdRightToLeft then
        begin
          TImage(F.Components[0]).Left:= (F.Width - (TImage(F.Components[0]).Left + TImage(F.Components[0]).Width));
          TLabel(F.Components[1]).Left:= (TImage(F.Components[0]).Left - (TLabel(F.Components[0]).Width + 10));
        end;
      // Return the form
      Result:= F;
    end;
    

    将函数调用为

    MyDialog('العنوان', 'النص', ['نعم', 'لا'], mtWarning, [mbYes, mbNo], bdRightToLeft, mbNo).ShowModal;
    

    享受。