Problem mit OnCreate und Form1->Visible = false
-
Ich möchte mein Programm wenn es mit bestimmten Parametern gestartet wird nicht sichtbar machen. Es soll dann über ein TryIcon wieder sichtbar gemacht werden können.
void __fastcall TForm1::FormCreate(TObject *Sender) { if(ParamCount()==1 && ParamStr(1)== "-a"){ Form1->Visible = false; } }Wieso funzt das denn nicht? Wenn ich dies über einen Button mache kann ich das Fenster ausblenden.
-
Das ist wahrscheinlich einfach die falsche Stelle für das, was Du machen willst.
Lies Dir mal den Artikel zu OnCreate im C++ Builder durch.Vielleicht kannst Du das Problem ja auch anders lösen. Ein Überschreiben von Loaded() könnte Dir
eventuell weiterhelfen.Gruß,
Alexander
-
void __fastcall TForm1::FormCreate(TObject *Sender) { if(ParamCount()==1 && ParamStr(1)== "-a"){ Form1->Hide(); } }probiers mal so
-
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.