Entwickler-Ecke

Sonstiges (Delphi) - Kann man in nem MessageDlg "eigene" Buttons anzei


M@gindosch - Fr 27.02.04 23:55
Titel: Kann man in nem MessageDlg "eigene" Buttons anzei
Hallo,

kann mir jemand sagen ob (und wenn ja wie) ich bei einem MessageDlg einen "eigenen" Button einbinden kann?

Mein Problem ist folgendes:

Ich muss fürs Studium ein Rezeptverwaltungsprogramm schreiben, das auch Rezepte aus einer Datei importieren kann. Am Ende des Importiervorgangs erscheint ein MessageDlg -->


Delphi-Quelltext
1:
if MessageDlg(IntToStr(Anzahl_neue_Rezepte)+' Rezept(e) wurden importiert!', mtInformation,[mbOk], 0) = mrOk then Statusformular.Close;                    


Ich würde jetzt gerne dem User die Möglichkeit bieten sich durch einen Button "Details" die neu importierten Rezepte anzeigen zu lassen. Ist es möglich einen solchen "Details"-Button in den MessageDlg einzubinden?

Wäre cool wenn mir jemand weiterhelfen könnte
:D

Moderiert von user profile iconDeCodeGuru: Code- durch Delphi-Tags ersetzt


Urba - Sa 28.02.04 01:48

Ich wüsste nicht, wie man mit MessageDlg eigene Buttons hinzufügen kann, aber schau mal in der Hilfe nach MessageBox - ist quasi der Vorläufer ... da kannst du dich auch ein wenig durch die DialogLinks in der Hilfe klicken.

Gruss
Urba


Popov - Sa 28.02.04 06:00

Ich hab hier [http://www.delphiforum.de/viewtopic.php?p=132688] ein Tipp geschrieben mit dem man in einem MessageDlg Fenster ein eigenen Button haben kann. Dazu muß allerdings ein eingenes Meldungsfenster entwickelt werden.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
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
        {Hier dem Button "Ignorieren" eine neue Bezeichnung geben.}
        {Das ändert aber nichts an der Abfrageart. Es muß weiterhin _}
        {nach if MyMessageDlg(...) = mrIgnore abgefragt werden.}
        if UpperCase(Name) = 'IGNORE' then Caption := '&Details';
      end;
    end;
    Result := ShowModal;
  end;
end;


Hier wird der Button Ignorieren angepasst. Wenn du den brauchst, dann kannst du einen anderen dafür nehmen. Abfragen mußt du allerdings weiterhin den Ignore Button.

Hier ein Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TO<span class="inlineSyntax"></span>bject);
begin
  if MyMessageDlg('Das ist die Message.', mtInformation, [mbOk, mbIgnore], 0) =
    mrIgnore then
    ShowMessage('Es wurde der Button "Deteils" geklickt. Tatsächlich ist ' +
      'aber der Button "Ignorieren", nur mit anderen Caption-Bezeichnung.');
end;


M@gindosch - Sa 28.02.04 10:40

Dankeschön für diese ausführliche Antwort. Werds gleich mal versuchen!