![]() |
Frage zu MessageDlg
Hi,
Ich habe da eine kleine Frage... In MessageDlg kann man ja mittels [mbYes, mbNo,...] usw. festlegen welche Buttons angezeigt werden. Meine Frage ist nun wenn mein Programm das mit einer deutschen Delphi geschrieben wurde auf einen Englischen Windows ausgeführt wird...werden dann die Button Caption auch in englisch statt in deutsch angezeigt? |
Re: Frage zu MessageDlg
nein, sie bleiben deutsch. genauso umgekehrt.
du kannst aber hier im forum mal nach "mymessagedlg" suchen. diese funktion formatiert den button text. |
Re: Frage zu MessageDlg
Leider nein. Die Captions erscheinen in der Sprache deiner Delphi-Version, weil Delphi Konstanten dafür benutzt. Immerhin sind es resourcestrings, sie können also in der Exe mit einem Ressourceneditor bearbeitet werden. Aber dass sich die Beschriftung automatisch der Sprache des Betriebssystems anpasst, schafft man so nicht.
|
Re: Frage zu MessageDlg
Oha...danke für die Antwort.
Dann werde ich mir diese mymessagedlg Function mal ansehen oder zur Not bastel ich mir halt einen eigenen MsgDlg. |
Re: Frage zu MessageDlg
Oder du probierst mal
![]() |
Re: Frage zu MessageDlg
Auch interessant...werde mir einfach mal beides ansehen.
Wobei MyMessageDlg schon prima Funktioniert. Da ich ja keine "Neuen" Buttons reinmachen, sondern nur die Vorhandenen entsprechend der gewählten Sprache anpassen will. Das Funktioniert recht gut mit MyMessageDlg. |
Re: Frage zu MessageDlg
Hy
hab grad auch noch was zu dem Thema. Entweder suche ich falsch oder ich bin zu blöd dafür. Wenn ich nach "mymessagedlg" suche, find ich nur diesen Thread. Hab als Alternative MessageBox probiert, ein Problem von mir is nun folgendes:
Code:
GetSelectedUser.User ist natürlich vom Typ String. Mit MessageDlg geht das ja auch, nur MessageBox erwartet da PAnsiChar...
if MessageBox(self.Handle, 'Soll der User ' + PChar(GetSelectedUser.User) + ' wirklich gelöscht werden?','Titel',MB_ICONQUESTION or MB_YESNO) = IDYES then
// TODO: User löschen Lässt sich aus folgendem Grund nicht kompilieren: Zitat:
Code:
wenn ich das entferne, gehts soweit. Nur ich möchte es trotzdem drin haben. Sollte mit PChar() ja worken normal :roll:
PChar(GetSelectedUser.User)
|
Re: Frage zu MessageDlg
also ich poste mal das, was ich dachte bei diesem thread stand. hier der daraus entstandene code:
Delphi-Quellcode:
function MyMessageDlg(const Msg: String; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; Captions: Array of String): Integer; var aMsgDlg: TForm; I: Integer; DlgButton: TButton; CaptionIndex: Integer; begin aMsgDlg := CreateMessageDialog(Msg, DlgType, Buttons); CaptionIndex := 0; for I := 0 to aMsgDlg.ComponentCount - 1 do begin if (aMsgDlg.Components[i] is TButton) then begin DlgButton := TButton(aMsgDlg.Components[I]); if CaptionIndex > High(Captions) then Break; // Keine weiteren Buttons da DlgButton.Caption := Captions[CaptionIndex]; //<- ändern // Todo: MyMessageDlg: Problem bei zu langen Captions wird die // Buttonbreite nicht geändert. //DlgButton.Width := //DlgButton.Left := Inc(CaptionIndex); end; end; Result := aMsgDlg.ShowModal; end; |
Re: Frage zu MessageDlg
MyMessageDlg ist eine Funktion...weis leider auch nicht mehr genau wo ich sie dann gefunden habe darum poste ich sie einfach mal mit rein.
Die dlg_xxx Variablen enthalten hier in meinem Fall einen String in der entsprechenden Sprache. Das Prinzip der Funktion sollte aber klar sein.
Delphi-Quellcode:
function MyMessageDlg(const Msg: String; AType: TMsgDlgType; AButtons:TMsgDlgButtons; HelpCtx: Longint): Word;
var Comp: TComponent; k: Integer; begin with CreateMessageDialog(Msg, AType, AButtons) do begin for k := 0 to ComponentCount - 1 do begin Comp := Components[k]; if Comp is TButton then with TButton(Comp) do begin if UpperCase(Name) = 'YES' then Caption := dlg_yes; if UpperCase(Name) = 'NO' then Caption := dlg_no; if UpperCase(Name) = 'OK' then Caption := dlg_ok; if UpperCase(Name) = 'CANCEL' then Caption := dlg_cancel; end; end; Result := ShowModal; end; end; {Popov} |
Re: Frage zu MessageDlg
so sollte es mit deinem code gehen:
delphi-code: @('Soll der User ' + PChar('Test') + ' wirklich gelöscht werden?')[1] ... also einfach ein @ vor den string, sowie ein [1] danach. (habe 'test' eingefügt, da ich mit deiner variablen nichts anfangen konnte). ps: gehen delphi tags sowie bold-tags egtl. nicht gleichzeitg? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz