Problem mit OnCreate und Form1->Visible = false



  • Das hab ich schon probiert funzt aber nicht.



  • Mach das doch mal in WinMain !!!



  • Also ich hab es mit den Konstruktor und mit der WinMain probiert funzt aber immer noch nicht oder bin ich zu blöd dazu?



  • Und hast Du auch mal das Überschreiben von Loaded() ausprobiert?
    Zumindest der Konstruktor wird wohl vor Loaded aufgerufen und Loaded wird erst aufgerufen,
    wenn alle Eigenschaften aus der .dfm-Datei geladen sind.

    Beispiel für Loaded:

    // Header
    virtual void __fastcall Loaded(void);
    
    // Implementierung
    void __fastcall TForm1::Loaded(void)
    {
       TComponent::Loaded();
    
       if(ParamCount()==1 && ParamStr(1)== "-a"){    
        Visible = false;
      }
    }
    

    Gruß,

    Alexander



  • Danke für die Hilfe hab auch dies ausprobiert es funktioniert einfach nicht. Wenn ich das in OnShow schreibe kommt eine Fehlermedlung. Ich bin irgendwie mit meinem Latein am Ende.



  • In OnShow sollte ds nun wirklich nicht!!!

    :: In dem Moment, wo die Form angezeigt wird, willst Du unsichtbar machen - das kanner nich.

    Aber in WinMain muss das gehen. Nach CreateForm.

    Visible der Form sollte auch auf false stehen - Im Objectinspector!



  • DerAltenburger schrieb:

    Aber in WinMain muss das gehen. Nach CreateForm.

    Visible der Form sollte auch auf false stehen - Im Objectinspector!

    Ich habe genau das eben auch mal ausprobiert und es geht wirklich nicht.
    Irgendwo im Application->Run() wird wohl ein MainForm->Show() oder etwas in der Art aufgerufen.

    Gruß,

    Alexander



  • Ich habe gerade noch mal in der BCB-Hilfe nachgeschaut.
    Unter TApplication::ShowMainForm steht:

    BCB-Hilfe schrieb:

    Um das Hauptformular beim Start der Anwendung auszublenden, setzen Sie ShowMainForm vor dem Aufruf von Application->Run in der Haupt-Projektdatei auf false und stellen sicher, daß die Eigenschaft Visible des Formulars auf false steht.

    Gruß,

    Alexander



  • Bei mir geht das so:

    Form1->Visible im OI auf True !!!
    In Form1 ist ein Timer 2sec

    /*Project1.cpp
      Anfang*/
    #include "unit1.h"
    USERES("Project1.res");
    USEFORM("Unit1.cpp", Form1);
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    { try
      {  Application->Initialize();
         Application->CreateForm(__classid(TForm1), &Form1);
    
         //Form ausblenden!!!
         ShowWindow(Form1->Handle,SW_HIDE);
         //Programm aus Taskleiste!!!
         ShowWindow(Application->Handle,SW_HIDE);
         //Programm starten
         Application->Run();
      }
      catch (Exception &exception)
      { Application->ShowException(&exception);
      }
      return 0;
    }
    //---------------------------------------------------------------------------
    /*Project1.cpp
      Ende*/
    
    *****************************************************************************
    *****************************************************************************
    
    /*Unit1.h
      Anfang*/
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
      TTimer *Timer1;
      void __fastcall Timer1Timer(TObject *Sender);
    private:	// Anwenderdeklarationen
    public:		// Anwenderdeklarationen
      __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    /*Unit1.h
      Ende*/
    
    *****************************************************************************
    *****************************************************************************
    
    /*Unit1.cpp
      Anfang*/
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    { ShowWindow(Form1->Handle,SW_SHOW);
    }
    //---------------------------------------------------------------------------
    /*Unit1.cpp
      Ende*/
    


  • Bei mir geht das so:

    Form1->Visible im OI auf false !!
    In Form1 ist kein Timer 2sec

    /*Project1.cpp
      Anfang*/
    #include "unit1.h"
    USERES("Project1.res");
    USEFORM("Unit1.cpp", Form1);
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    { try
      {  Application->Initialize();
         Application->CreateForm(__classid(TForm1), &Form1);
    
         // Wie in BCB-Hilfe beschrieben...
         Application->ShowMainForm = false;
         Application->Run();
      }
      catch (Exception &exception)
      { Application->ShowException(&exception);
      }
      return 0;
    }
    

    Aber man kann natürlich auch einen Timer verwenden - oder besser gleich zwei (einen zur Sicherheit) 😉
    anstatt einfach die eine Zeile hinzuzufügen.

    Gruß,

    Alexander



  • Danke Danke Danke es funktioniert.


Anmelden zum Antworten