Delphi-PRAXiS
Seite 3 von 5     123 45      

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)

Bummi 10. Mär 2011 16:53

AW: ShowModal mit Programmablauf und selbst schließen?
 
vielleicht auch so, oder so ähnlich
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Form2 := TForm2.Create(nil);
  Form2.Show;
  Application.CreateForm(TForm1, Form1);

  Application.Run;
end.

_______________________________________


procedure TForm1.FormActivate(Sender: TObject);
begin
   EnableWindow(Handle, false);
   Form2.BringtoFront;
   Sleep(5000); // unsere ganze zu tuende Arbeit
   EnableWindow(Handle, true);
   onActivate := nil; // oder das was später hier passieren soll
   Form2.Close;
end;

himitsu 10. Mär 2011 17:12

AW: ShowModal mit Programmablauf und selbst schließen?
 
Kritik ... was ist das?

Mal im Ernst, es ging mir mehr darum daß man keine Globalen nutzen soll, als darum daß keiner auf mich hört. :angle2:

Hier mal ein schönes und aktuelles Beispiel:
http://www.delphipraxis.net/158969-f...-aus-edit.html

Oder wie wäre es damit?
Schreib das mal ins OnCreate der Form oder in ein Button-Klick-Ereignis
Delphi-Quellcode:
if Assigned(Application.OnIdle) then
  ShowMessage('huhu?');
So, wie du siehst, siehst du nichts (falls doch, dann bist du auf's nachfolgende Kleingedruckte gestoßen), aber nun zieh z.B. einmal auf irgendeine Form ein Delphi-Referenz durchsuchenTApplicationEvents drauf
und was ist nun?
Genau, DU würdest bei Nutzung von dieser Komponente behindern, da du etwas überschreibst.
Und um das mal erwähnt zu haben ... diese Komponente wird versteckt in einigen anderen Delphikomponenten auch noch verwendet.


Manchmal geht es eben nicht um "Ehre", welche gekränkt sein könnte, sondern einfach nur um Erfahung.

alfold 10. Mär 2011 17:19

AW: ShowModal mit Programmablauf und selbst schließen?
 
@Bummi
es geht ihm nicht darum das er aus der Form1 die Form2 closen tut.
Form2.Schowmodal soll sich nach abarbeitung aller Aufgaben selbst schliessen!

Gruss alfold

Bummi 10. Mär 2011 17:42

AW: ShowModal mit Programmablauf und selbst schließen?
 
@alfold
ich meine eben dieses Verhalten lässt sich mit o.g. simulieren...Splash wird angezeigt, alles bleibt unbedienbar bis Form1 fertig ist, Splash wird ausgeblendet...

WM_CLOSE 10. Mär 2011 19:37

AW: ShowModal mit Programmablauf und selbst schließen?
 
wie wäre es, das splash mit MSDN-Library durchsuchensetwindowpos "modal" zu machen?
showModal ist schließlich dazu gedacht mit der weiteren Ausführung zu warten, bis das form geschlossen wurde. dann wäre die ausführung des splash wieder asynchron.

HJay 10. Mär 2011 21:13

AW: ShowModal mit Programmablauf und selbst schließen?
 
Sicher, wenn Application.OnIdle auch anderweitig verwendet wird, muss man auf der Hut sein. Die Gefahr besteht derzeit bei mir nicht, glaube ich. Aber dennoch, danke für die Warnung.

Kann mal jemand einen kurzen Code-Vorschlag machen, wie man das statt Application.OnIdle mit einer eindeutigen Message an die eigene Form machen würde? Ich kenne mich mit Messages nicht so aus.

Wir wird die Reihenfolge der Messages sichergestellt, also dass die eigene Message als letztes erhalten wird?

Vielen Dank im voraus!

alfold 10. Mär 2011 21:23

AW: ShowModal mit Programmablauf und selbst schließen?
 
Ich kann immer noch nicht verstehen warum man es manchmal kompliziert macht wenn es auch simple gehen kann!
Ich gehe mal davon aus das DeineProgress Anzeige korrekt funktioniert in bezug Deiner Datenanforderung. So wie Du es oben beschrieben hast.

Leg Dir in Deiner TFormProgress ein timer mit rein, frage dort ab ob Progress.Position = 100 ist , wenn ja then Close. Schon ist Dein ganzes Problem Gelöst!
Diese einfach aber sichere Möglichkeit sollte nichts abwägiges haben.

Gruss alfold

BUG 10. Mär 2011 21:50

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

Zitat von alfold (Beitrag 1087522)
Leg Dir in Deiner TFormProgress ein timer mit rein, frage dort ab ob Progress.Position = 100 ist , wenn ja then Close. Schon ist Dein ganzes Problem Gelöst!

Es gibt keine Delphianwendung in der man nicht noch mindestens einen Timer unterbringen kann :lol:
Er weiß doch selbst, wann die Aufgabe erledigt ist (schließlich muss ja irgendwer Progress.Position setzen), die Frage ist, wann er anfangen kann.

alfold 10. Mär 2011 23:32

AW: ShowModal mit Programmablauf und selbst schließen?
 
War das nicht schon geklärt!? Im OnActivate.
Nun fehlte ihm doch blos, wo er close reinschreiben soll wenn er mit allem fertig ist!
Habs mit einem timer ausprobiert und fertig!

Alles andere sehe ich als overhead an.
Etwa so: Wenn ich fertig bin schick mir ne message das ich mich beenden kann, weil close im onActivate nicht geht!
Und über die anderen Vorschläge wurde ja schon Diskutiert:wink:

PS: Allerdings habe ich schon weiter oben erwähnt, das dies ein typisches Beispiel ist, vermischen von VCL und Daten. Die Daten wird er bestimmt nicht in der TFormProgress benötigen sondern in seiner MainForm.

Gruss alfold

himitsu 11. Mär 2011 02:46

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

Zitat von HJay (Beitrag 1087516)
Die Gefahr besteht derzeit bei mir nicht, glaube ich. Aber dennoch, danke für die Warnung.

Bitte.

Derzeit ... und wenn du daran in 2 Jahren was änderst, dann hast'e dieses hier bestimmt schonwieder vergessen.

PS: Ich würde zwar auch eher zu "einfach" tendieren,
aber das wäre jetzt nicht einfach, sondern billig fehleranfällig.


Delphi-Quellcode:
TForm5 = class(TForm)
  procedure FormShow(Sender: TObject);
  procedure WMMachWas(var Msg: TMessage); message WM_USER+1;
private
  { Private-Deklarationen }
public
  { Public-Deklarationen }
end;

procedure TForm5.FormShow(Sender: TObject);
begin
  ...
  PostMessage(Handle, WM_USER+1, 0, 0);
  ...
end;
PS: So wäre es sogar übersichtlicher, da der Bearbeitungsweg "eindeutig" ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Seite 3 von 5     123 45      

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