AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShowModal mit Programmablauf und selbst schließen?

Ein Thema von HJay · begonnen am 10. Mär 2011 · letzter Beitrag vom 11. Mär 2011
Antwort Antwort
Seite 5 von 5   « Erste     345   
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#41

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 13:13
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?
Ansgar
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#42

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 13:14
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.
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#43

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 13:39
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).
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#44

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 14:31
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

Gruss alfold

Geändert von alfold (11. Mär 2011 um 15:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#45

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 14:37
ich würde mich WM_Close in #42 anschließen und habe immer noch nicht verstanden was bei #21 nicht passen soll...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#46

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 17:10
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.

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
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.

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.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#47

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 17:28
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!

Wo genau ist der Vorteil? Ich finde das Verfahren eher komplizierter. In der aufrufenden Form ist das doch übersichtlich und logisch:
siehe punkt 1

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

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!

... modal heißt warte bis das Formular etwas zurückliefert.
hat es treffend Formuliert.

Gruss alfold

Geändert von alfold (11. Mär 2011 um 17:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#48

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 19:01
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


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 02:45 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