Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigenen Dialog aufrufen (https://www.delphipraxis.net/60440-eigenen-dialog-aufrufen.html)

bundy 6. Jan 2006 22:42


Eigenen Dialog aufrufen
 
Hy ich mal wieder.


Ich hab mir nen eigenen Dialog (form) gemacht.

Meine Frage , wie kann ich diesen aufrufen und abfragen welcher button gedrückt worden ist (JA,Nein);

Also so wie man das mit einen Normalen Dialog auch macht.

lg

Bundy

arbu man 6. Jan 2006 22:53

Re: Eigenen Dialog aufrufen
 
Das Ganze könnte in etwa so aussehen:
Delphi-Quellcode:
function Execute:boolean; // Der Aufruf
begin
  fdeineform:= Tfdeineform.Create(Application);
  try
    fdeineform.ShowModal;
    result:=fdeineform.execute;
  finally
    fdeineform.Free;
  end;
end;

type
  Tfdeineform = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  public
    execute:boolean;
  end;

...

procedure Tfdeineform .Button2Click(Sender: TObject);
begin
  execute:=false;
  close;
end;

procedure Tfdeineform .Button1Click(Sender: TObject);
begin
  execute:=true;
  close;
end;
Aber wenn du nur einen dialog mit ja und nein brauchst guckst du dir am besten mal application.messagebox oder windows.messagedlg an.

bundy 6. Jan 2006 22:55

Re: Eigenen Dialog aufrufen
 
Eigendlich hab ich da eh nur Ja und nein drauf, aber mir gefällter der standart Dialog nicht.

SirThornberry 6. Jan 2006 23:00

Re: Eigenen Dialog aufrufen
 
du kannst ein Form mit "ShowModal" aufrufen. ShowModal liefert einen Integer zurück. Und den Integer kannst du vom Formular her setzen. Wenn zum Beispiel auf den Ja-Button geklickt wird brauchst du nur folgendes schreiben:
Delphi-Quellcode:
ModalResult := mrYes;
und schon wird das Formular geschlossen und ShowModal hat somit den Wert von mrYes.

bundy 6. Jan 2006 23:02

Re: Eigenen Dialog aufrufen
 
Gleich mal testen . :-D

bundy 6. Jan 2006 23:04

Re: Eigenen Dialog aufrufen
 
Wie werte ich dann den Modalresult im Form aus ? :gruebel:

SirThornberry 6. Jan 2006 23:09

Re: Eigenen Dialog aufrufen
 
ganz einfach. Du hast ein Hauptformular (im folgenden als Form1 bezeichnet) und von da aus willst du deinen Dialog aufrufen (im folgenden als Form2 bezeichnet). Mal angenommen du zeigst den Dialog per ButtonClick an:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2.ShowModal = mrYes then
    ShowMessage('ja wurde gedrückt')
  else
    ShowMessage('ja wurde NICHT gedrückt').
end;
und in Form2 schreibst du dann beim Button-Ja folgendes:
Delphi-Quellcode:
procedure TForm2.ButtonJaClick(Sender: TObject)
begin
  ModalResult := mrYes; //mrYes ist eine Konstante, kann auch jeder andere Integer sein
end;
und im OnClick von Button-Nein:
Delphi-Quellcode:
procedure TForm2.ButtonJaClick(Sender: TObject)
begin
  ModalResult := mrNo;
end;

ManuMF 6. Jan 2006 23:10

Re: Eigenen Dialog aufrufen
 
ModalResult setzen: Wie SirThornberry geschrieben hat, oder per BitButton (für die kann man ein ModalResult setzen).

Abfrage:
Delphi-Quellcode:
case EigenesForm.ShowModal of
  mrYes: ...
  mrNo: ...
end;
Habe den Roten Kasten gesehen. Ich wollte aber auf die BitButtons hinweisen ;-)

Gruß,
ManuMF

SirThornberry 6. Jan 2006 23:11

Re: Eigenen Dialog aufrufen
 
der Normale TButton hat auch unter Delphi7 bereits das Property ModalResult.
Allerdings wollte ich nicht darauf hinweisen weil sonst irgendwann die Frage kommt wie man das macht wenn jemand auf ein Image klickt.

bundy 6. Jan 2006 23:19

Re: Eigenen Dialog aufrufen
 
also irgendwas klapt da nich, schaut mal


ich hab im dialog

Delphi-Quellcode:
procedure TfmDialogDiensteAuchBuchen.btJaClick(Sender: TObject);
begin
ModalResult:=mrYes;
close;
end;

procedure TfmDialogDiensteAuchBuchen.btNeinClick(Sender: TObject);
begin
ModalResult:=mrNo;
close;
end;
und im Mainform das
Delphi-Quellcode:
case fmDialogDiensteAuchBuchen.ShowModal of
         mrYes: Beep; //nur zum testen
         mrNo: close;

       end;
aber macht keinen Beep wenn ich auf Ja drück :gruebel:

ManuMF 6. Jan 2006 23:21

Re: Eigenen Dialog aufrufen
 
Bei BitButtons muss man das Close weglassen. Könnte da auch der Fall sein.

Gruß,
ManuMF

bundy 6. Jan 2006 23:23

Re: Eigenen Dialog aufrufen
 
Ich verwende Button von Developer Express cxButton

Aber ich test mal ohne Close..... uno Momento

SirThornberry 6. Jan 2006 23:24

Re: Eigenen Dialog aufrufen
 
vielleicht ist das Beep in deinem Windows einfach abgeschaltet. Übrigens - alles was hinter
"ModalResult := irgenwas"
kommt wird nicht mehr ausgeführt da bei dieser Anweisung schon zurück gesprungen wird.

Matze 6. Jan 2006 23:25

Re: Eigenen Dialog aufrufen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi. Das Close ist imho überflüssig.

Also bei mir geht das (siehe Anhang). Dass das so schön geht mit ModalResult, habe ich auch noch nicht gewusst. :)

bundy 6. Jan 2006 23:26

Re: Eigenen Dialog aufrufen
 
:thumb: :thumb: :thumb: :thumb: :thumb: :thumb: :thumb: :thumb: :thumb: :thumb: :thumb: :thumb:
******* FUNKTIONIERT **************

DANKE Leute, echt net von euch :hello: :hello: :hello: :hello: :hello:

bundy 6. Jan 2006 23:27

Re: Eigenen Dialog aufrufen
 
Noch ne kurze Frage.


Das Form schliesst aber warum .

Woher kommt dann eigendich das CLOSE

Matze 6. Jan 2006 23:30

Re: Eigenen Dialog aufrufen
 
Zitat:

Zitat von bundy
Das Form schliesst aber warum .

Ich zitiere einen Satz aus der OH

Zitat:

Zitat von OH
Die Eigenschaft ModalResult einer TButton-Komponente bietet eine einfache Möglichkeit, durch das Anklicken einer Schaltfläche ein modales Formular zu schließen. [...]


SirThornberry 6. Jan 2006 23:31

Re: Eigenen Dialog aufrufen
 
man sollte aufpassen nicht nur "mrYes" und "mrNo" abzufangen sondern wirklich mit Else zu arbeiten. Schließlich kann es auch passieren das jemand das form per "Alt + F4" schließt oder über das X in der Titelleiste und da kommt eben weder "mrYes" noch "mrNo" zurück. (ich glaub es ist mrCancel aber ich würde nicht drauf wetten das es in den nächsten Delphiversionen immer noch mrCancel oder mrClose ist).
Geschlossen wird das Form wegen "ModalResult :="
Da du das Form mit "ShowModal" öffnest signalisierst du damit natürlich auch das du fertig bist.

bundy 6. Jan 2006 23:32

Re: Eigenen Dialog aufrufen
 
OK..... Danke , habt mir echt weitergeholfen :thumb: :thumb: :thumb:

Amateurprofi 6. Jan 2006 23:34

Re: Eigenen Dialog aufrufen
 
Zitat:

Zitat von Matze
Hi. Das Close ist imho überflüssig.

Das "Close" ist nicht nur überflüssig sondern bewirkt, daß als Resultat mrCancel zurückgegeben wird.

fkerber 6. Jan 2006 23:36

Re: Eigenen Dialog aufrufen
 
Hi!

Kehrt er nicht sofort nach setzen des Modalresults zurück, sodass das Close nicht mehr ausgeführt wird?


Ciao Frederic

bundy 6. Jan 2006 23:46

Re: Eigenen Dialog aufrufen
 
Ne das Close macht er trozdem aber der Result ist dann nicht mrYes oder mrNo, das hab ich getestet.

SirThornberry 7. Jan 2006 00:13

Re: Eigenen Dialog aufrufen
 
stimmt, habs auch grad mal debuggt. Wieder was dazu gelernt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 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