AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Wie ShowModal Form aus dem HauptForm schließen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie ShowModal Form aus dem HauptForm schließen?

Ein Thema von AlexII · begonnen am 22. Mai 2015 · letzter Beitrag vom 22. Mai 2015
Antwort Antwort
Seite 4 von 4   « Erste     234   
Popov
(Gast)

n/a Beiträge
 
#31

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 21:16
@AlexII

Was du da machst ist vermutlich "falsch" (in Anführungszeichen). Das ShowModal Fenster hat eigentlich einen Sinn. So wie es aussieht nutzt du es aber für die Sperrung eines Fensters. Das kann man aber auch anders lösen.

Hier mal etwas aus meinem alten Beispiele-Ordner.


Form1:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ModalResult: ShortInt;
begin
  ModalResult := ModalForm.ShowModal;

  case ModalResult of
    mrOk : ShowMessage('Das Modalfenster hat mrOk als Ergebnis.');
    mrCancel : ShowMessage('Das Modalfenster hat mrCancel als Ergebnis.');
    mrAbort : ShowMessage('Das Modalfenster hat mrAbort als Ergebnis.');
    mrRetry : ShowMessage('Das Modalfenster hat mrRetry als Ergebnis.');
    mrIgnore : ShowMessage('Das Modalfenster hat mrIgnore als Ergebnis.');
    mrYes : ShowMessage('Das Modalfenster hat mrYes als Ergebnis.');
    mrNo : ShowMessage('Das Modalfenster hat mrYes als Ergebnis.');
    mrAll : ShowMessage('Das Modalfenster hat mrAll als Ergebnis.');
    mrNoToAll : ShowMessage('Das Modalfenster hat mrNoToAll als Ergebnis.');
    mrYesToAll : ShowMessage('Das Modalfenster hat mrYesToAll als Ergebnis.');
  else
    {mrNone} ShowMessage('Das Modalfenster hat mrNone als Ergebnis.');
  end;
end;
Form2
Delphi-Quellcode:
procedure TModalForm.Button1Click(Sender: TObject);
begin
  //ohne Close passiert nichts
end;

procedure TModalForm.Button2Click(Sender: TObject);
begin
  Close; //mit Close wird das Fenster geschlossen. ModalResult = mrCancel
  //Close setzt das Fenster von sich aus automatisch auf mrCancel
end;

procedure TModalForm.Button3Click(Sender: TObject);
begin
  ModalResult := mrOk;
  //Close; //Close ist nicht nötig. ModalResult = mrOk
end;

procedure TModalForm.Button4Click(Sender: TObject);
begin
  ModalResult := mrCancel;
  //Close; //Close ist nicht nötig. ModalResult = mrCancel
end;

procedure TModalForm.Button5Click(Sender: TObject);
begin
  ModalResult := mrNone; //Bringt nichts. mrNone bewirkt kein Schleißen
  Close; //Close ist nötig. ModalResult = mrCancel
end;

procedure TModalForm.Button6Click(Sender: TObject);
begin
  ModalResult := mrYes;
  //Close; //Close ist nicht nötig. ModalResult = mrYes
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#32

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 21:23
Zitat:
Aber wie kann ein ShowModal diesen Fehler verursachen?
Könnte daran liegen das Die HauptForm mehr oder weniger das Parent bzw. "GW_OWNER" der Modalen Form ist.
Wenn du also versuchst aus der HauptForm das modale Fenster zu schließen zerschießt du quasi das Parent Fenster (Hauptform) selbst.

Zumindest kenne ich das aus VB Zeiten nicht anders.
Code:
Form2.Show vbModal, Me
Ist eine der gründe warum die Eingabe in der Hauptform durch das modale Fenster gesperrt wird.

gruss

Geändert von EWeiss (22. Mai 2015 um 21:34 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#33

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 21:25
Übrigens, wie jede Komponente hat TForm auch die Eigenschaft Enabled. Das kann man auf False setzten, dann reagiert das Fenster aber gar nicht mehr. Eine bessere Möglich wäre aber einfach auf das Formular ein TPanel zu setzten und das False zu stellen. Die Komponenten legst du auf das Panel. Ist Panel nicht Enabled, reagiert keine Komponente drauf.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#34

AW: Wie ShowModal Form aus dem HauptForm schließen?

  Alt 22. Mai 2015, 21:26
Was ist der Unterschied zwischen Frame und nem Form, das nicht modal aufgerufen wird?
Ein Frame kannst du nur auf einem Form anzeigen. Du erstellst ein Frame (Neu -> Frame), machst dein Zeugs drauf (Buttons. Labels etc.) und nimmst die Unit des Frames in die Uses-Klauses deiner Mainform auf. In selbiger erstellst du eine Variable vom Typ des Frames und erzeugst eine Instanz des Frames (Create), wenn du ihn benötigst oder auch gleich beim Programmstart. Im ersten Fall zerstörst du den Frame, wenn du ihn nicht mehr benötigst (Free), im zweiten Fall in OnDestroy deines Hauptfensters. Aber bevor ich das lang und breit erkläre, ist das schneller programmiert.

Übrigens, wie jede Komponente hat TForm auch die Eigenschaft Enabled. Das kann man auf False setzten, dann reagiert das Fenster aber gar nicht mehr. Eine bessere Möglich wäre aber einfach auf das Formular ein TPanel zu setzten und das False zu stellen. Die Komponenten legst du auf das Panel. Ist Panel nicht Enabled, reagiert keine Komponente drauf.
Das ist natürlich die allereinfachste Idee und hat somit alle Aussichten zum Favoriten.
Um die Menüs, falls vorhanden, muß er sich dann extra kümmern. Wenn er keine ActionList hat, beschränkt sich das darauf, die Hauptmenü-Einträge zu disablen.
Angehängte Dateien
Dateityp: zip ModalTest.zip (1,55 MB, 4x aufgerufen)

Geändert von Perlsau (22. Mai 2015 um 21:32 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 13:16 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