MainForm mit ShowModal() anzeigen statt automatisch erzeugen zu lassen



  • Hallo zusammen,

    ich habe in meiner Anwendung die Erstellung des Hauptformulars von der automatischen Erstellung auf manuell umgestellt, sodass die WinMain Funktion jetzt so aussieht:

    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR CmdLine , int)
    {
       Application->Initialize();
       SetApplicationMainFormOnTaskBar(Application, true);
    
       Form2 = new TForm2( Application );
       Form2->ShowModal();
    
       return 0;
    }
    

    Funktioniert auch soweit, kann keinen Unterschied zum normalen Funktionsrumpf mit Application->CreateForm() und Application->Run() feststellen.
    Kann ich das so stehenlassen oder handele ich mir damit seltsame Nebeneffekte ein, die ich bisher nicht bemerkt habe?



  • DocShoe schrieb:

    ich habe in meiner Anwendung die Erstellung des Hauptformulars von der automatischen Erstellung auf manuell umgestellt, sodass die WinMain Funktion jetzt so aussieht:

    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR CmdLine , int)
    {
       Application->Initialize();
       SetApplicationMainFormOnTaskBar(Application, true);
    

    Warum nicht einfach Application->MainFormOnTaskBar = true; ? Oder benutzt du C++Builder 2007?

    DocShoe schrieb:

    Funktioniert auch soweit, kann keinen Unterschied zum normalen Funktionsrumpf mit Application->CreateForm() und Application->Run() feststellen.

    Unterschiede und mögliche Inkompatibilitäten kannst du hier nachlesen.

    DocShoe schrieb:

    Kann ich das so stehenlassen oder handele ich mir damit seltsame Nebeneffekte ein, die ich bisher nicht bemerkt habe?

    Früher verwendete die VCL in TApplication ein Platzhalter-Fenster, das für das Verteilen der Nachrichten zuständig war. Diese Aufgabe übernimmt mit MainFormOnTaskBar = true; das Hauptformular. Nebeneffekte sind unter anderem, daß unter Windows Vista oder 7 nun nicht das Platzhalterfenster, sondern das Hauptformular in der Taskbar-Preview und in Flip 3D erscheint, wenn du Aero Glass aktiviert hast.



  • Danke für die Infos, audacia, ich habe selbst auch noch einige Nebeneffekte festgestellt. Application->MainForm wird z.B. nicht initialisiert, und bleibt für die ganze Programmlaufzeit 0, da das Attribut schreibgeschützt ist.

    Das ist insofern ärgerlich, weil das Formular sofort angezeigt wird, was bei einem Programmaufruf aus der Kommandozeile nicht unbedingt wünschenswert ist.
    Ich suche also nach einer Möglichkeit, das Hauptformular zu erzeugen und das Application Objekt korrekt zu initialisieren, ohne jedoch das Hauptformular sofort sichtbar zu schalten.

    Kennt da jemand einen Kniff, wie man das hin bekommt?

    Edit:
    Ja, ich benutze CG2007



  • Kann schon sein, daß das geht - das müßte ich ausprobieren -, aber warum willst du das Hauptformular erstellen, wenn es nicht angezeigt werden soll?


Anmelden zum Antworten