Form kommt erst nach dem ausführen von code zum vorschein
-
grüsse euch
habe das problem das sich die form erst zeigt sobald der code-teil ausgeführt wurde. ich nutze TIdPOP3. Nach programmstart wird die connection etc. ausgeführt. mein problem ist jetzt, das die form erst dannach sichtbar wird. egal ob ich es in OnCreate, OnActive oder OnShow habe.
eine möglichkeit der lösung wäre eine while -schleife denke ich mal. so in der art: "Application ist noch nicht sichtbar, bedingung == true". "Application ist sichtbar, bedingung == false, somit beende die schleife".
oder wie kann ichs machen?
-
-
hammaaa schrieb:
OnCreate, OnActive oder OnShow
Hast du's mal im Konstruktor versucht? Ein Timer wäre zwar auch möglich, erscheint mir jedoch als relativ unelegant.
-
wie im Konstruktor?
-
TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
da drin
-
Was wie Konstruktor? Du benutzt doch eine Form und willst beim Starten(=beim Erstellen dieser Form)was machen, oder?
BCB sollte eigentlich eine Zeile wie__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
ausgespuckt haben. Dort hau den Code mal rein, aber ich kann für nix garrantieren. Für "beim Straten der Anwendung" sollte man jedoch den Konstrukor Sachen wie OnShow immer vorziehen.
-
das klappt aber nicht. die form ist trotzdem nicht vorher sichtbar
-
Tja wie gesagt... du könntest auch einfach einen Timer einmal ticken lasssen(1 sek, kein Ahnung - musst du etwas probieren), aber das ist wie gesagt nicht sehr hübsch!
-
ja da hast du schon recht, es ist nicht hünsch
zudem wird die application auf jedem rechner eine andere initialisierungszeit haben. gibts da keine feine lösung? es muss doch irgendwie möglich sein, code erst nachdem die form sichtbar ist, auszuführen.
-
Du könntest im OnActivate eine selbstdefinierte Windows-Message verschicken und deinen Code im dafür geschriebenen Messagehandler ausführen.
// in .h #define APPINIT (WM_USER + 100) private: // User declarations ... void __fastcall WMInit(TMessage&); public: // User declarations ... BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(APPINIT, TMessage, WMInit) END_MESSAGE_MAP(TForm) // in .cpp //--------------------------------------------------------------------------- void __fastcall TForm1::WMInit(TMessage&) { ShowMessage("mein Code hier"); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormActivate(TObject *Sender) { PostMessage(Handle, APPINIT, 0, 0); } //---------------------------------------------------------------------------
Quelle: Borland Newsgroups
-
Schreib als 1.Zeile im FormActivate ein Application->ProcessMessages();. Dadurch wird die Form sofort gezeichnet. Dahinter kannst Du dann Deine Anmeldung durchführen.
-
Hey, warum einfach, wenn's auch umständlich geht?
ProcessMessages ist natürlich viel besser, weil portabel (Kylix).
-
endlich, es klappt!