AGB  ·  Datenschutz  ·  Impressum  







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

Formular im Hintergrund aufbauen?

Ein Thema von Mattze · begonnen am 25. Feb 2010 · letzter Beitrag vom 28. Feb 2010
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Formular im Hintergrund aufbauen?

  Alt 25. Feb 2010, 15:28
Hallo,

gut, mein Programm braucht "nur" wenige Sekunden, um zu starten. Aber das ist mir immer noch zu lange, um dem ganzen Fensteraufbau zuzuschauen.

Wie kann man das Programm so starten, dass es das Hauptformular mit allen Komponenten usw. fertig im Speicher baut und es erst dann anzeigt.
(Ich habe alles mögliche probiert. Natürlich auch Doublepuffer. Es funktioniert nicht. Ich krieg's einfach nicht raus!)

Gibt's da was? Am liebsten wäre mir ein Codeschnipsel, wie man so was macht!

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Formular im Hintergrund aufbauen?

  Alt 25. Feb 2010, 15:36
Machst Du evtl. umfangreiche Berechnungen oder dergleichen im OnShow?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Formular im Hintergrund aufbauen?

  Alt 25. Feb 2010, 15:36
Such hier mal nach Hier im Forum suchenSplashScreen.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Formular im Hintergrund aufbauen?

  Alt 25. Feb 2010, 15:38
Naja eine Möglichkeit wäre es wenn du einen Ladedialog hättest, der sich erst schließt wenn das Formular halt alles erstellt hat und solange ist das Hauptformular halt unsichtbar.

Edit: Der genannte "Splashscreen"

Dann könntest du noch z.b. dem Fenster einen Initial-Zustand geben, den Cursor zur Sanduhr machen und die Zeichenfunktion des Formulars deaktivieren. Dann alles initialisieren und den Cursor, sowie die Zeichenfunktion wiederherstellen.

Zum Deaktivieren des Zeichenvorgang eines Formulars:

Delphi-Quellcode:

procedure LockWinControl( const oWinControl: TWinControl );
begin
  if Assigned ( oWinControl ) then
  begin
    // Handle erstellen, falls noch nicht vorhanden
    oWinControl.HandleNeeded;
    // Deaktivieren von Repaint
    SendMessage( oWinControl.Handle, WM_SETREDRAW, 0, 0 );
  end;
end;

procedure UnlockWinControl( const oWinControl: TWinControl );
begin
  if Assigned ( coWinControl ) then
  begin
    // Handle erstellen, falls noch nicht vorhanden
    oWinControl.HandleNeeded;
    // Aktivieren von Repaint
    SendMessage( oWinControl.Handle, WM_SETREDRAW, 1, 0 );
    // Repaint ausführen
    RedrawWindow( oWinControl.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN );
  end;
end;
Oder natürlich die eleganteste Lösung wäre wohl Zustandshandling, wobei ich dazu irgendwie grad keinen Link finde...

MfG Alaitoc
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

Re: Formular im Hintergrund aufbauen?

  Alt 28. Feb 2010, 12:16
Hallo,

vielen Dank für den Tipp mit dem Splashscreen. Der macht es zwar leider auch nicht, bindet aber so stark die Aufmerksamkeit, dass der eigentliche Seitenaufbau des Hauptformulars nicht mehr so doll stört.

Das mit dem LockwinControl usw. habe schon mal versucht, hat aber auch nichts gebracht.

Momentan bin ich beim Application.minimize. Wenn ich dann in die Taskleiste clicke und das Programm maximiere, wird es sofort bildschirmfüllend angezeigt. Da wird dann nix mehr aufgebaut.
Wie ich das per Code mache, weiß ich auch. (Brauche ja nur bei Application.restore zu schmulen.)
Wo ich das jedoch per Code (also ohne Click) machen soll, weiß ich absolut nicht.

Hat jemand einen Tipp, wie man ein Ereignis von Application (Evtl. zeitgesteuert) feuern kann, wenn sie minimiert ist? (Ein Ereignis vom Hauptformular scheint dann ja nicht einzutreten, oder?)

Gruß
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Formular im Hintergrund aufbauen?

  Alt 28. Feb 2010, 12:20
Irgendwie verstehe ich noch immer nicht was du eigentlich willst. Dich stört das der Aufbau solange dauert. Und du willst das erstellen deshalb im Hintergrund erledigen. Was du uns allerdings noch nicht gesagt hast (oder ich habe es überlesen): Was soll im Vordergrund in der Zeit passieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#7

Re: Formular im Hintergrund aufbauen?

  Alt 28. Feb 2010, 12:43
Nix!

Kurze Frage, kurze Antwort.

Es soll alles so bleiben, wie es ist. Also Desktop usw.
Wenn der Bildschirmaufbau im Hintergrund fertig ist, dann soll es angezeigt werden. Aber auch erst dann.

Um das noch einmal zu betonen: Es geht hier nicht um Stunden!
Der Bildschirmaufbau geht schon recht schnell, aber eben doch nicht schnell genug, um es zu sehen.
Und das gefällt mir nun mal nicht.

Da es solche "Hintergrundmacher" gibt (DoubleBuffered) und ein Formular diese Eigenschaft auch hat, dachte ich,
man könne das direkt in der Application für den Hintergrundaufbau des Hauptformulares verwenden.
Kann man scheinbar aber doch nicht. Schade!

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Formular im Hintergrund aufbauen?

  Alt 28. Feb 2010, 12:56
Das ist nur sehr schwer realisierbar. Viele Komponenten zeichnen sich erst wenn es auch wirklich notwendig ist, sie also im sichtbaren Bereich liegen. Und den Teil den sie zeichnen, speichern sie sogar noch zwischen um beim wiederholten Zeichnen schneller zu sein.
Und dann kommt noch dazu das Delphi die Fenster erst erzeugt wenn darauf auch gemalt werden soll. Und das ist vermutlich der Grund das bei dir dann alles so nacheinander aufbaut.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#9

Re: Formular im Hintergrund aufbauen?

  Alt 28. Feb 2010, 15:38
Nun ja,

es war eben einen Versuch wert.
Ich habe mir schon so was gedacht, als ich durch den Splashscreen mitbekam, dass er bei
Application.Initialize;
Application.CreateForm(THauptformular, Hauptformular);
gar nicht die Zeit verbraucht und erst danach den Bildschirm wirklich aufbaut.

Das interessante istmomentan, dass er das beim Start mit Application.minimize in der .dpr
in die Taskleiste schreibt und von da beim Click SOFORT alles da ist.
Also nicht, als wenn er die BS-Ausgabe Stück für Stück aufbaut, sondern als wenn er aus einem Puffer alles auf einmal auf den BS holt.

Auf jeden Fall erstmal danke für Eure Tipps!

Gruß
Mattze
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:33 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