Form kommt erst nach dem ausführen von code zum vorschein



  • 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! 🙂 👍 🕶


Anmelden zum Antworten