Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Frage zu MessageDlg (https://www.delphipraxis.net/50355-frage-zu-messagedlg.html)

BTeam 24. Jul 2005 12:30


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?

dahead 24. Jul 2005 13:00

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.

SMO 24. Jul 2005 13:03

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.

BTeam 24. Jul 2005 16:37

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.

jfheins 24. Jul 2005 16:39

Re: Frage zu MessageDlg
 
Oder du probierst mal MSDN-Library durchsuchenMessageBox, imho müsste das dann entsprechend der Windowsversion anzeigen ;)

BTeam 24. Jul 2005 17:56

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.

Killer 2. Aug 2005 22:20

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:
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
GetSelectedUser.User ist natürlich vom Typ String. Mit MessageDlg geht das ja auch, nur MessageBox erwartet da PAnsiChar...

Lässt sich aus folgendem Grund nicht kompilieren:
Zitat:

[Error] Unit1.pas(243): Incompatible types: 'String' and 'PAnsiChar'
Es liegt an diesem Teil:
Code:
PChar(GetSelectedUser.User)
wenn ich das entferne, gehts soweit. Nur ich möchte es trotzdem drin haben. Sollte mit PChar() ja worken normal :roll:

dahead 2. Aug 2005 23:48

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;

BTeam 2. Aug 2005 23:52

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}

dahead 2. Aug 2005 23:52

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.
Seite 1 von 3  1 23      

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