AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Caption der Buttons Yes/No im Dialog MessageDlg ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Caption der Buttons Yes/No im Dialog MessageDlg ändern

Ein Thema von design5 · begonnen am 6. Mär 2003 · letzter Beitrag vom 11. Nov 2015
Antwort Antwort
Seite 1 von 3  1 23      
design5

Registriert seit: 20. Jan 2003
20 Beiträge
 
#1

Caption der Buttons Yes/No im Dialog MessageDlg ändern

  Alt 6. Mär 2003, 07:58
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ß
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2
  Alt 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.
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#4
  Alt 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]
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#5
  Alt 6. Mär 2003, 09:15
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

......
Oops.. stimmt! Das kommt davon wenn man das ganze nur schnell überfliegt.. *schäm*
Manuel Pöter
  Mit Zitat antworten Zitat
design5

Registriert seit: 20. Jan 2003
20 Beiträge
 
#6
  Alt 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!
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#7
  Alt 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.
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#8
  Alt 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]
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 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.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#10
  Alt 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 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