Per Parameter die Exe-Datei anweisen, dass das Fenster nicht geöffnet werden soll?
-
normalerweise müsstest Du da mit try/catch arbeiten. Das ganze erscheint mir aber trotzdem ziemlich gefrickelt.
//Edit
habe nochmal geschaut. Mit Application->ShowMainForm kannst Du festlegen, ob die MainForm zum Start angezeigt wird.
-
Das ist auch gefrickelt. Ist schließlich auch meine erste C++ Anwendung. Aber darum geht es nicht.
Ich habe jetzt einen Try-Catch-Block drum herum geschrieben. Die Fehlermeldung wird trotzdem angezeigt. Allerdings habe ich auch einen Try-Catch-Block in der WinMain, bei dem ich fast der Meinung bin, dass der Fehler erst in der WinMain abgefangen wird, und dann erst im OnFormCreate.
Wie die Exception-Geschichte in C++ funktioniert habe ich mir bisher noch nicht angeschaut. Allerdings sollte der Abfang doch genau so funktionieren wie in C# oder Java. Oder irre ich mich da?
-
Ja, funktioniert genau wie in Java.
Im Builder werden aber immer alle Fehlermeldungen angezeigt. Die musst das Programm manuell z.B. aus dem Explorer heraus starten, um zu sehen, ob es funktioniert.
-
Die Anwendung wird aus der Konsole heraus gestartet, damit ich den Parameter anhängen kann. Trotzdem kommt die Fehlermeldung.
-
Ins blaue hinein raten bringt nichts. Poste am besten mal ein wenig Quellcode.
-
Die WinMain hat folgendes:
try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->ShowMainForm = false; Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0;und der Event OnFormCreate hat
if(ParamStr(1) == "-nowindow") { try { ShowMessage(AnsiString(ParamStr(1))); PCWatchVorbereiten(); delete(this); } catch(EAccessViolation &e) { // nichts tun } } else { this->Show(); }
-
so habe das Ganze mal bei mir ein wenig geändert und compiliert:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); ShowWindow(Application->Handle, SW_HIDE); } catch (Exception &exception) { Application->ShowException(&exception); } ...und
void __fastcall TForm1::FormCreate(TObject *Sender) { if(ParamStr(1) == "test") { try { ShowMessage(AnsiString(ParamStr(1))); //DoSomething() Application->Terminate(); } catch(...) { } } else Form1->Visible = true; }Funktioniert fehlerfrei und die Hauptform wird nicht angezeigt.
-
Entschuldige, dass ich erst so spät antworte.
Ich habe Deine Version übernommen und es funktioniert auch.
Allerdings flackert die Anwendung kurz auf und wird erst dann beendet.
Woran kann das liegen?
-
So jetzt flackert nichts mehr auf. Optional kannst Du auch Top und Left der Form auf -5000 setzen
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { ShowWindow(Application->Handle, SW_HIDE); Application->Initialize(); Application->ShowMainForm = false; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); ShowWindow(Application->Handle, SW_HIDE); } ...
-
Dank Dir für die Hilfe.
-
Gerne wieder.
-
Also, ich weiß nicht, was ihr da macht. Bei mir geht folgendes ohne Probleme:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { if( ParamStr(1) != "-nowindow" ) { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } } catch (Exception &exception) { Application->ShowException(&exception); } return 0; }