Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Caption der Buttons Yes/No im Dialog MessageDlg ändern (https://www.delphipraxis.net/3307-caption-der-buttons-yes-no-im-dialog-messagedlg-aendern.html)

design5 6. Mär 2003 07:58


Caption der Buttons Yes/No im Dialog MessageDlg ändern
 
Hallo,

mal wieder eine dumme Frage...

Ich habe eine kleine Anwendung geschrieben die mir ein Ergebnis zurückliefert. Da das sehr umfangreich ist, möchte ich den User auffordern, ob er das gesamte oder nur ein Teil-Ergebnis angezeigt haben möchte...

Dazu würde ich gerne den MessageDlg verwenden. Der liefert mir die Buttons Ja, Nein, Abbrechen.

Nun meine Frage: Kann ich die Beschriftung der Buttons (Caption) ändern? [Alles],[Teil],[Abbrechen]

Da der Dialog bzw. die aufgerufene Form nicht von mir selbst geschrieben ist, kann ich nicht darauf zugreifen... was man so denke ich auch nicht machen sollte (da es sich ja um etwas 'programminternes' von Delphi handelt).

Gibt es da irgendwelche Übergabeparameter, mit der man doch die Caption zuweist?

Gruß

Motzi 6. Mär 2003 08:39

MessageDlg ist eine reine VCL-Funktion, dh es wird intern eine Instanz einer TForm mit ein paar Buttons erzeugt.. die Buttons erhalten nur Beschriftungen, die in der Unit Const.pas gespeichert sind (ich glaub zumindest dass es die Unit war..). Du könntest jetzt entweder die Unit Const.pas übersetzen, oder aber einfach eine API-Funktion verwenden. Zweiteres hätte den Vorteil, dass die Beschriftung deiner Message-Box automatisch in der für Windows gewählten Sprache ist.

sakura 6. Mär 2003 08:52

Hi Motzi,

Du hast nicht ganz aufgepasst ;) Es ging ihm um bestimmte Texte, welche jedoch wenig mit den Originalen gemein haben (Alles, Teil, Abbrechen). Er nutzt bereits eine deutsche Delphi-Version.

An dieser Stelle ist die einzig vernünftige Lösung einen eigenen Dialog zu erstellen. Änderungen in der consts.pas wirken sich auf alle Messageboxen in allen Programmen aus ;)

...:cat:...

eddy 6. Mär 2003 09:07

Hallo design5,

getestet unter Delphi5:

Delphi-Quellcode:
//...bei einem Message Dialog die Beschriftungen der Buttons ändern
function xMessageDlg(const Msg: string; DlgType : TMsgDlgType;
                     Buttons : TMsgDlgButtons; Captions: array of string) : Integer;
var
  aMsgDlg : TForm;
  CaptionIndex,
  i : integer;
  dlgButton : TButton; // uses stdctrls
begin
  // Dlg erzeugen
  aMsgDlg := CreateMessageDialog(Msg, DlgType, buttons);
  CaptionIndex := 0;
  // alle Objekte des Dialoges testen
  for i := 0 to aMsgDlg.ComponentCount - 1 do begin
    // wenn es ein Button ist, dann...
    if (aMsgDlg.Components[i] is TButton) then begin
      dlgButton := TButton(aMsgDlg.Components[i]);
      if CaptionIndex > High(Captions) then Break;
      // Beschriftung entsprechend Captions-array ändern
      dlgButton.Caption := Captions[CaptionIndex];
      Inc(CaptionIndex);
    end;
  end;
  Result := aMsgDlg.ShowModal;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
var
  erg : integer;
begin
  erg := xMessageDlg('Hier steht der gewünschte Text,' + chr($0D) + 'die Buttons sind geändert',
                      mtConfirmation,
                      [mbYes, mbNo, mbCancel],       // benutzte Schaltflächen
                      ['Alles', 'Teil','Abbrechen']); // zugehörige Texte
  case erg of                                        // zugehörige Antworten
    mrYes  : ShowMessage('"1" clicked');
    mrNo   : ShowMessage('"2" clicked');
    mrCancel: ShowMessage('"3" clicked');
  end; // of case
end;
mfg
eddy

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]

Motzi 6. Mär 2003 09:15

Zitat:

Zitat von sakura
Hi Motzi,

Du hast nicht ganz aufgepasst ;) Es ging ihm um bestimmte Texte, welche jedoch wenig mit den Originalen gemein haben (Alles, Teil, Abbrechen). Er nutzt bereits eine deutsche Delphi-Version.

An dieser Stelle ist die einzig vernünftige Lösung einen eigenen Dialog zu erstellen. Änderungen in der consts.pas wirken sich auf alle Messageboxen in allen Programmen aus ;)

...:cat:...

Oops.. stimmt! Das kommt davon wenn man das ganze nur schnell überfliegt.. *schäm* :oops:

design5 6. Mär 2003 11:37

Danke erst mal für Eure zahlreichen Antworten!

Den eigenen Dialog habe ich in der Zwischenzeit geschrieben und mit eigenen Buttons versehen. Dieser erfüllt schonmal den Zweck.

Die andere Methode werde ich auch noch ausprobieren (toll, was Du für eine Mühe investierst!). Sie hört sich auf jeden Fall interessant an!

Gast 11. Mär 2003 14:37

Hallo Eddy 8)

das ist sehr gut was Du gemacht hast...


Weiß vielleicht auch jemand wie kann ich in diesem Konstrukt die Message z.B. Fett darstellen? - also NUR den Text!

Gruß

Paul Jr.

eddy 11. Mär 2003 14:57

Hallo Paul Jr.

vielen Dank für die Blumen ....


Fette Darstellung funtioniert mit:
Delphi-Quellcode:
  ....
      // Beschriftung entsprechend Captions-array ändern
      dlgButton.Caption := Captions[CaptionIndex];

      dlgButton.Font.Style := [fsBold]; // <-- Style ändern

      Inc(CaptionIndex);
  ...
Ich wollte mit dieser Methode auch noch die Schriftfarbe ändern, aber das hat nicht geklappt.

mfg
eddy

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]

sakura 11. Mär 2003 15:03

Er meinte aber die Message ;-)

Ich denke mal, dass er da nach aMsgDlg.Components[i] is TButton suchen muss und entsprechend verfahren sollte.

...:cat:...

eddy 11. Mär 2003 15:30

Hallo sakura,

darf man denn nicht mal ein bischen Text sparen?

Hier steht doch:
Delphi-Quellcode:
begin
  // Dlg erzeugen
  aMsgDlg := CreateMessageDialog(Msg, DlgType, buttons);
  CaptionIndex := 0;
  // alle Objekte des Dialoges testen
  for i := 0 to aMsgDlg.ComponentCount - 1 do begin
    // wenn es ein Button ist, dann...
    if (aMsgDlg.Components[i] is TButton) then begin
      dlgButton := TButton(aMsgDlg.Components[i]);
      if CaptionIndex > High(Captions) then Break;
      // Beschriftung entsprechend Captions-array ändern
      dlgButton.Caption := Captions[CaptionIndex];
      dlgButton.Font.Style := [fsBold];
      Inc(CaptionIndex);
    end;
  end;
  Result := aMsgDlg.ShowModal;
end;
(aMsgDlg.Components[i] is TButton) im Quelltext drin.

Oder welche Bedeutung hat Dein Einwurf?

Wäre vielleicht noch interessant zu wissen, wie man die Farbe und den Style der eigentlichen Msg : string ändern kann. Eine Lösung dafür würde das ganze komplettieren.

mfg
eddy


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz