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ß |
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.
|
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:... |
Hallo design5,
getestet unter Delphi5:
Delphi-Quellcode:
mfg
//...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; eddy [edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit] |
Zitat:
|
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! |
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. |
Hallo Paul Jr.
vielen Dank für die Blumen .... Fette Darstellung funtioniert mit:
Delphi-Quellcode:
Ich wollte mit dieser Methode auch noch die Schriftfarbe ändern, aber das hat nicht geklappt.
....
// Beschriftung entsprechend Captions-array ändern dlgButton.Caption := Captions[CaptionIndex]; dlgButton.Font.Style := [fsBold]; // <-- Style ändern Inc(CaptionIndex); ... mfg eddy [edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit] |
Er meinte aber die Message ;-)
Ich denke mal, dass er da nach aMsgDlg.Components[i] is TButton suchen muss und entsprechend verfahren sollte. ...:cat:... |
Hallo sakura,
darf man denn nicht mal ein bischen Text sparen? Hier steht doch:
Delphi-Quellcode:
(aMsgDlg.Components[i] is TButton) im Quelltext drin.
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; 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 01:36 Uhr. |
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