Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

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/)
-   -   ShowModal mit Programmablauf und selbst schließen? (https://www.delphipraxis.net/158991-showmodal-mit-programmablauf-und-selbst-schliessen.html)

angos 11. Mär 2011 13:13

AW: ShowModal mit Programmablauf und selbst schließen?
 
Man könnte das ganze doch, wie von alfold vorgeschlagen lösen, und das Problem mit dem Klicken auf der Mainform umgehen, indem man die Mainform Disabled, oder sehe ich das falsch?

WM_CLOSE 11. Mär 2011 13:14

AW: ShowModal mit Programmablauf und selbst schließen?
 
Du brauchst ein Formular, das dein anderes überblendet, und kein modales Fenster!!! Ansonsten müsste dein Splash Formular die Arbeit machen.
Das mit dem Überblenden sollte ohne große Probleme mit TOPMOST möglich sein! modal heißt warte bis das Formular etwas zurückliefert.

Das mit dem OnIdle funktioniert, ob es schön ist ist eine andere Frage.

Frickler 11. Mär 2011 13:39

AW: ShowModal mit Programmablauf und selbst schließen?
 
Ich würde das so machen:

1. In TForm1 eine Variable "FirstActivation" anlegen
2. Im OnCreate() diese auf true setzen
3. Im OnActivate() dann:
Code:
if FirstActivation then begin
  FirstActivation := false;
  (lange dauernde Aktionen mit Fortschrittsbalken);
  PostMessage(Self.Handle, WM_CLOSE, 0, 0);
end
Wenn Dir OnActivate zu "früh" ist, nimm halt OnResize. Ich habe allerdings noch kein Formular gehabt, das im OnActivate noch nicht fertig gezeichnet gewesen wäre (und ich habe hier Forms mit dutzenden von Controls).

alfold 11. Mär 2011 14:31

AW: ShowModal mit Programmablauf und selbst schließen?
 
Ok, sehr simples Beispiel. (nicht getetstet kein Delphi zur Hand)

Delphi-Quellcode:
procedure TForm1.HoleDaten1Click(Sender: TObject);
var
   i: Integer;
begin
   if connect then//DBConnect
   begin
       try
          form2:= TForm2.Create(self);
          form2.show;
          //hole daten
          for i:= 0 to 100 do
          begin
              //ix Daten einlesen oder wie auch immer!
              form2.ProgressBar1.Position:= i;
          end;
       except
           Form2.Close;
           raise//wenn was passiert
       end;
       Form2.Close;
   end
   else
   begin
       //no connect
   end;
end;
Solange er in dieser Schleife(Procedure) ist kann er weder Form2 bewegen noch Main anklicken!

1. Vorteil, Form2 brauch nicht mal zu wissen das es Form1 gibt(uses).
2. Vorteil, Es bleibt alles in Main einschliesslich der gesamten Kontrolle.
3. Vorteil, Die Variablen bleiben Privat müssen nicht Public oder sogar Global gesetzt werden( je nach dem wie ich die units einbinde).
4. Vorteil, Ich habe nicht '2' getrennte Anordnungen um sicher zustellen das alles in der Form2, wenn sie Showmodal ist, auch richtig funktioniert und muss mir keinen Kopf machen die Daten nun noch zur MainForm zu schicken!

Wenn das nicht Save ist?

Was will man mehr :wink:

Gruss alfold

Bummi 11. Mär 2011 14:37

AW: ShowModal mit Programmablauf und selbst schließen?
 
ich würde mich WM_Close in #42 anschließen und habe immer noch nicht verstanden was bei #21 nicht passen soll...

HJay 11. Mär 2011 17:10

AW: ShowModal mit Programmablauf und selbst schließen?
 
Zitat:

Zitat von alfold (Beitrag 1087724)
1. Vorteil, Form2 brauch nicht mal zu wissen das es Form1 gibt(uses).

Das muss die modale Form auch nicht -- jenachdem, welche Daten wie bearbeitet werden. Diese Vorteil ist nicht-existent.

Zitat:

Zitat von alfold (Beitrag 1087724)
2. Vorteil, Es bleibt alles in Main einschliesslich der gesamten Kontrolle.

Wo genau ist der Vorteil? Ich finde das Verfahren eher komplizierter. In der aufrufenden Form ist das doch übersichtlich und logisch:
Code:
// irgendwas davor
 if FormGetData.ShowModal = mrOK then ... else ...
// danach sicher sein, dass alles fertig und weiter geht's
Zitat:

Zitat von alfold (Beitrag 1087724)
3. Vorteil, Die Variablen bleiben Privat müssen nicht Public oder sogar Global gesetzt werden( je nach dem wie ich die units einbinde).

Na ja, die Daten müssen ja sowieso verwendet werden -- wo auch immer. Dieser Vorteil wäre höchstens für ganz kleine Programme gegeben, die nur aus FormMain und FormProgress bestünden.

Zitat:

Zitat von alfold (Beitrag 1087724)
4. Vorteil, Ich habe nicht '2' getrennte Anordnungen um sicher zustellen das alles in der Form2, wenn sie Showmodal ist, auch richtig funktioniert und muss mir keinen Kopf machen die Daten nun noch zur MainForm zu schicken!

He?! WENN es funktioniert (oder wenn es eine gute Lösung gäbe), dann müsste man sich auch keinen Kopf machen.

@Angos: Dein Vorschlag mit Form.Diabled ist richtig und wäre das mindeste, was man machen müsste. Eine modale Form löst genau das einfach so.

alfold 11. Mär 2011 17:28

AW: ShowModal mit Programmablauf und selbst schließen?
 
Zitat:

Zitat von HJay (Beitrag 1087787)
Das muss die modale Form auch nicht -- jenachdem, welche Daten wie bearbeitet werden. Diese Vorteil ist nicht-existent.

Doch, muss sie, wenn sie Daten aus der DB holt und an Main übergeben muss denn dort werden sie bearbeitet!

Zitat:

Zitat von HJay (Beitrag 1087787)
Wo genau ist der Vorteil? Ich finde das Verfahren eher komplizierter. In der aufrufenden Form ist das doch übersichtlich und logisch:

siehe punkt 1

Zitat:

Zitat von HJay (Beitrag 1087787)
Na ja, die Daten müssen ja sowieso verwendet werden -- wo auch immer. Dieser Vorteil wäre höchstens für ganz kleine Programme gegeben, die nur aus FormMain und FormProgress bestünden.

Ist ist es aber nicht! sieh Punkt 1

Zitat:

Zitat von HJay (Beitrag 1087787)
He?! WENN es funktioniert (oder wenn es eine gute Lösung gäbe), dann müsste man sich auch keinen Kopf machen.

Muss man auch nicht,
wenn man sich das simple Beispiel anschaut und versteht!
Dann brauch man auch kein Showmodal!

Zitat:

Zitat von WM_CLOSE (Beitrag 1087694)
... modal heißt warte bis das Formular etwas zurückliefert.

hat es treffend Formuliert.

Gruss alfold

Chemiker 11. Mär 2011 19:01

AW: ShowModal mit Programmablauf und selbst schließen?
 
Hallo HJay,
Zitat:

Das ist nicht wirklich richtig. Die Form-Refreshs dauern zusammen nur einige Millisekunden, während mein Datenzugriff Dutzende Sekunden dauern kann. Der Mehrwert des Nutzers ist also sehr hoch, der Zeitverlust kaum messbar. Ich persönlich finde es immer toll, wenn man abschätzen kann, wielange es noch dauern wird und nicht nur eine stupide Box kommt, dass der Rechner angeblich was tut.
der Punkt ist doch nicht die Anzeige des Fortschritts, sondern wie kommst Du an die Werte um den Fortschritt Anzuzeigen? Probelauf, Schätzen? Und was ist von einem solchen Fortschrittsbalken zu halten?
http://www.delphipraxis.net/157268-w...ps-stirbt.html
Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Seite 5 von 5   « Erste     345   

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