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
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
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.
Taki dialog możesz zrobić sam i mniej czasu by to zajęło, niż szukanie w sieci sposobu na przerobienie MessageDlg
.
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ć.
Dzięki za podpowiedzi zrobiłem to na MessageBox.
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;
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
Dodaj pliki z zip do folderu ze źródłami i w uses dodaj DLGMlang, i w oncreate formy SetLanguage(1);