Jak zmienić w MessageDlg polskie odpowiedzi?

0
var
  x: Integer;
begin
  x := MessageDlg('Zapisać plik?', mtCustom, mbYesNo, 0);
  if x  = mrYes then

jak zmienić przyciski żeby wpisać tak, nie zamiast yes, no

1

Najkrócej mówiąc nie da się choć to nie do końca prawda, bo da się tylko to trochę skomplikowane a zupełnie bez sensu skoro można użyć MessageBox.
Chyba że chcesz zupełnie zmienić teksty przycisków to coś w stylu https://engineertips.wordpress.com/2018/06/19/localisation-of-messagedlg-in-delphi/
albo TTaskDialog.

0

Taki dialog możesz zrobić sam i mniej czasu by to zajęło, niż szukanie w sieci sposobu na przerobienie MessageDlg.

2

Uściślając, predefiniowane okienko informacyjne otwierane funkcją MessageBox w WinAPI albo też na przykład instrukcją MsgBox w VB ma opisy przycisków w języku zgodnym z wersją językową systemu. Tzn. że jeśli użyjesz MessageBox i cały interfejs będzie po polsku, to na polskiej wersji systemu te przyciski też będą po polsku, ale na angielskiej będą po angielsku, a reszta interfejsu pozostanie oczywiście po polsku i nie będzie się zgadzać.

0

Dzięki za podpowiedzi zrobiłem to na MessageBox.

1

Można też stworzyć okno dialogowe z własnymi caption-ami przycisków przy użyciu metody CreateMessageDialog, np.:

Function CustomMessageDialog(DialogCaption, DialogMessage: String): Integer;
Var
  ModalRezultat: Integer;
  Dlg: TForm;
  hMenuHandle : hMenu;
Begin
  Dlg:=CreateMessageDialog(PChar(DialogMessage), mtConfirmation,  [mbYes, mbNo, mbOK, mbCancel]); //utworzenie okna dialogowego z 4 przyciskami: 'Yes', 'No', 'OK' i 'Cancel'
  Dlg.Caption:=DialogCaption; //ustawienie captiona nagłówka okna dialogowego
  //TImage(Dlg.FindComponent('Image')).Picture.Assign(Application.Icon); //ikonka na dialogu
  Dlg.BorderIcons:=[biSystemMenu]; //ustawienie przycisków na pasku okna (np. biMinimize, biMaximize, biSystemMenu, biHelp)
  Dlg.BorderStyle:=bssingle; //ikonka programu na początku paska tytułowego
  //Dlg.Height:=130; //wysokość i szerokośc okna dialogowego
  //Dlg.Width:=400; //ustawienie szerokości okienka dialogu
  Dlg.Position:=poScreenCenter; //spozycjonowanie dialogu na środku ekranu
  Dlg.ActiveControl:=TButton(Dlg.FindComponent('Yes')); //domyślny aktywny przycisk (jako pierwotny będzie 'Yes', czyli 1 przycisk)
  //---------------------------- wyszarzenie przycisku zamknięcia (krzyżyka) okienka dialogu ------------------------
  //hMenuHandle:=GetSystemMenu(Dlg.Handle, false);
  //If hMenuHandle<>0 then DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
  //------------------------------------------------------------------------------------------------------
  With TButton(Dlg.FindComponent('Yes')) do //ustawienia dla pierwotnego przycisku 'Yes'
    Begin
      //Left:=25; //ustawienie pozycji i szerokości przycisku
      //Width:=75;
      Caption:='Zmień'; //zmiana captiona przycisku 'Yes' na inną nazwę
      ShowHint:=true; //ustawienia hinta dla przycisku
      Hint:=' Zmień ścieżkę do pliku ';
      TabOrder:=0;
    End;

  With TButton(Dlg.FindComponent('No')) do //j.w.
    Begin
      //Left:=220;
      //Width:=75;
      Caption:='Czyść';
      ShowHint:=true;
      Hint:=' Czyść ścieżkę do pliku ';
      TabOrder:=1;
    End;

  With TButton(Dlg.FindComponent('OK')) do //j.w.
    Begin
      //Left:=220;
      //Width:=75;
      Caption:='Znajdź';
      ShowHint:=true;
      Hint:=' Znajdź plik na dysku ';
      TabOrder:=2;
    End;

  With TButton(Dlg.FindComponent('Cancel')) do //j.w.
    Begin
      //Left:=300;
      //Width:=75;
      Caption:='Anuluj';
      ShowHint:=true;
      Hint:=' Anuluj ';
      TabOrder:=3;
    End;
  //---------------------------------
  Dlg.ShowModal; //pokazanie okna dialogowego i oczekiwanie na kliknięcie jakiegoś przycisku
  Result := Dlg.ModalResult; //rezultat wyboru przycisku po zamknięciu okna dialogowego
  //Result = IDYes:kliknięcie "Zmień"
  //Result = IdNo: kliknięcie "Czyść"
  //Result = IdOK: kliknięcie "Znajdź"
  //Result = IdCancel: kliknięcie "Anuluj"
  Dlg.Free; //zwolnienie dialogu z pamięci
End;
0

Kiedyś polski dystrybutor udostępniał tłumaczenia komunikatów i używałem tego z powodzeniem w swoich aplikacjach:
http://web.archive.org/web/20070823051801/http://www.borland.pl/delphi/tlum_delphi.shtml

...edit...

Przypomniałem sobie jeszcze o metodzie tłumaczenia resourcestring. Dołączam przykład.pol.zip

0

Dodaj pliki z zip do folderu ze źródłami i w uses dodaj DLGMlang, i w oncreate formy SetLanguage(1);

pol.zip

1 użytkowników online, w tym zalogowanych: 0, gości: 1