Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Formular schliessen im "OnActivate" (https://www.delphipraxis.net/88104-formular-schliessen-im-onactivate.html)

xZise 10. Mär 2007 13:10

Re: Formular schliessen im "OnActivate"
 
Und was soll mir das jetzt sagen?
  • Öffnen des Fensters - NOT_STARTED
  • Activate - STARTED
  • Deaktivted - STARTED
  • Wieder Activated - STARTED
  • Fertig - FINISHED
  • => Close?!

PS: Könnte es an ShowModal liegen?

Nuclear-Ping 10. Mär 2007 15:53

Re: Formular schliessen im "OnActivate"
 
Was ist zu "bequem" daran, eine saubere und wirklich funktionierende Lösung mit einem minimalen Mehraufwand zu schaffen?

Empfehle dir auch, die Form einfach dynamisch zu erzeugen, eine Downloadfunktion aufzurufen und diese nach Abschluss wieder mit Free zu schließen.

Delphi-Quellcode:
with TMyDownloadForm.Create (Self) do
  begin
    {...}
    Show;
    DownloadFile ({...});
    Free;  
  end;
Das kannst du auch in eine Prozedur hauen und dann per Parameter einfach die zu ladende Datei angeben. Damit hast du auch nicht mehr als eine Zeile zum Aufrufen der Funktion.

xZise 10. Mär 2007 17:55

Re: Formular schliessen im "OnActivate"
 
Aber das löst mein Problem nicht!
Weil wie kann ich nach "Showmodal" bei Aufrufer Code ausführen, ohne das ShowModal zu beenden...

PS: Anscheind ist da irgendwo ein bug drinne, weil es eigentlich ja funzt...

Jelly 10. Mär 2007 18:22

Re: Formular schliessen im "OnActivate"
 
Zitat:

Zitat von xZise
Weil wie kann ich nach "Showmodal" bei Aufrufer Code ausführen, ohne das ShowModal zu beenden...

Gar nicht. Und im OO Sinne ist das auch nicht ratsam. Dein 2. Form, das du anzeigst, ist nichts anderes wie eine Klasse, und diese Klasse soll sich um den Download alleine kümmern, und nicht die aufrufende Klasse. Übergib deinem Downloadformular den URL Link im constructor, und definiere eine public property im Downloadform, in der nach Beenden des Downloads der Dateiname oder sonst was drin steht wie z.B. Stream o.ä. Dann noch ein Statuscode, und Du kannst das Downloadformular universell einsetzen, auch in anderen Projekten.

dataspider 10. Mär 2007 18:33

Re: Formular schliessen im "OnActivate"
 
Hi,

wenn es denn unbedingt modal sein muss, dann setze im OnCreatein der Form Application.OnIdle.
In der Methode setzt du erst OnIdle wieder auf nil, dann führst du deinen Download aus und zum Schluss das Close.

Damit startet der Download erst, wenn das Form angezeigt wird etc.

Cu, Frank

[EDIT]
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := ApplicationIdle;
end;

procedure TForm1.ApplicationIdle(Sender: TObject; var Done: Boolean);
begin
  Application.OnIdle := nil;
  // Dowloadroutine
  Application.ProcessMessages;
  Close;
end;
[/EDIT]

xZise 10. Mär 2007 18:57

Re: Formular schliessen im "OnActivate"
 
Zitat:

Zitat von dataspider
wenn es denn unbedingt modal sein muss

Ja muss es :P

Zitat:

Zitat von Jelly
Zitat:

Zitat von xZise
Weil wie kann ich nach "Showmodal" bei Aufrufer Code ausführen, ohne das ShowModal zu beenden...

Gar nicht. Und im OO Sinne ist das auch nicht ratsam.

Und genau deshalb funktioniert das dynamische Erstellen nicht!

Zitat:

Zitat von Jelly
Dein 2. Form, das du anzeigst, ist nichts anderes wie eine Klasse, und diese Klasse soll sich um den Download alleine kümmern, und nicht die aufrufende Klasse. Übergib deinem Downloadformular den URL Link im constructor, und definiere eine public property im Downloadform, in der nach Beenden des Downloads der Dateiname oder sonst was drin steht wie z.B. Stream o.ä. Dann noch ein Statuscode, und Du kannst das Downloadformular universell einsetzen, auch in anderen Projekten.

Und genau das kann mein Formular ;) (Zwar soll es nicht umbedingt universell sein... Aber es ist eine netter Nebeneffekt)

Zu dataspiders lösung: So müsste es gehen...

Jelly 10. Mär 2007 21:19

Re: Formular schliessen im "OnActivate"
 
Zitat:

Zitat von xZise
Und genau deshalb funktioniert das dynamische Erstellen nicht!

Ich muss mich mal grad am Kopf kratzen, denn das muss ich jetzt irgendwie verstehen.

Du kannst doch was dynamisch erstellen, ausführen, und zu deiner Hauptprozedur zurückkehren. Dein Showmodal wartet doch darauf bis das Form geschlossen wird. Oder versteh ich da jetzt alles verkehrt?

Nuclear-Ping 10. Mär 2007 22:42

Re: Formular schliessen im "OnActivate"
 
Wenn es unbedingt Modal sein muss, dann mach die Downloadroutine in einen Thread (Forumssuche nach TThread oder Google) und rufe diese vor ShowModal auf.
Delphi-Quellcode:
with TMyDownloadForm.Create (Self) do
  begin
    {...}
    DownloadFile ({...}); // Startet einen Thread zum DL
    ShowModal;
    Free;  
  end;

xZise 11. Mär 2007 08:22

Re: Formular schliessen im "OnActivate"
 
Zitat:

Zitat von Jelly
Zitat:

Zitat von xZise
Und genau deshalb funktioniert das dynamische Erstellen nicht!

Du kannst doch was dynamisch erstellen, ausführen, und zu deiner Hauptprozedur zurückkehren.

Genau das war der Plan... ABER er macht es nicht! Und da ändert auch kein dynamisches Erstellen...

Hawkeye219 11. Mär 2007 09:02

Re: Formular schliessen im "OnActivate"
 
Hallo Fabian,

schau dir doch einmal diesen Thread an, hoika zeigt dort eine Lösung für dein Problem.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz