In Tray starten?



  • WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    	ShowWindow(Application->Handle, SW_HIDE);
    	try
    	{
        	ShowWindow(Application->Handle, SW_HIDE);
    		Application->Initialize();
    		Application->CreateForm(__classid(TForm1), &Form1);
            ShowWindow(Application->Handle, SW_HIDE);
    		Application->Run();
            ShowWindow(Application->Handle, SW_HIDE);
    	}
    	catch (Exception &exception)
    	{
    		Application->ShowException(&exception);
    	}
    	return 0;
    }
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    ShowWindow(Application->Handle, SW_HIDE);
    DWORD dwExStyle=GetWindowLong(Application->Handle,GWL_EXSTYLE);
    dwExStyle |= WS_EX_TOOLWINDOW;
    SetWindowLong(Application->Handle,GWL_EXSTYLE,dwExStyle);
    }
    

    TrayIcon1->Hide = true;
    TrayIcon1->Visible = true;

    🙄



  • In Deinem Code steht nicht

    Application->ShowMainForm = false;
    

    Schau mal nochmal zu den von mir geposteten Code.

    Hier noch ein Link:
    http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc06024.php

    Gruss



  • Oh 😮, sowas auch 🙄 .. tschuldigung 🤡

    Stimmt, scheinbar verliert er nun nicht mehr den Focus beim start. aber wie bekomme ich das Programm wieder aus der Task?

    void __fastcall TForm1::TrayIcon1Click(TObject *Sender)
    {
    Application->ShowMainForm = true;
    }
    

    ..machts leider nicht. Ich kann den Task auch nur noch mit den Taskmanager beenden.



  • Hallo Reiner.

    Du musst ein PopupMenu in die TrayIconkomponente einbinden. Damit kannst Du dann z.B. eine Ereignisbehandlungsroutine für "Beenden" schreiben.



  • Danke. Aber sichtbar bekommt man die Form nicht mehr?



  • Doch schon. Aber dann bekommt die Form den Focus.

    Zum sichtbar machen:

    Application->ShowMainForm = true;
    ShowWindow(Application->Handle, SW_SHOW);
    Application->ProcessMessages();
    


  • TrayIcon1->PopupMenu = PopupMenu1;
    TrayIcon1->PopupMenuOn = imClick;
    TrayIcon1->RestoreOn = imClick
    TrayIcon1->OnClick = RestoreClick;

    // header
    TPopupMenu *PopupMenu1;
    TMenuItem *Restore;
    
    // cpp
    void __fastcall TForm1::RestoreClick(TObject *Sender)
    {
    	Application->ShowMainForm = true;
    	ShowWindow(Application->Handle, SW_SHOW);
    	Application->ProcessMessages();
    }
    

    Aber ich bekomme weder ein Popup noch es wieder gross 😞
    Den Focus darf es nur nicht beim Starten verlieren, wenn ein Benutzer damit arbeiten will ist es ok.



  • Hallo

    Was noch gefehlt hat, war, dass die Form auch noch mit Show() gezeigt werden muss.

    void __fastcall TForm1::Zeigen1Click(TObject *Sender)
    {
         // Form wird wieder hergestellt
         // Item des PopupMenus
         Application->ShowMainForm = true;
         ShowWindow(Application->Handle, SW_SHOW);
         Form1->Show();
         Application->ProcessMessages();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::TrayIcon1Click(TObject *Sender)
    {
         // PopupMenu zeigen
         POINT test;
         GetCursorPos(&test);
         PopupMenu1->Popup(test.x, test.y);
    }
    

    Du kannst auch das OnMouseUp-Ereignis nehmen, um zu prüfen, ob linle oder rechte Maustaste gedrückt wurde.



  • Wahnsinn! Es funktioniert jetzt alles, Fokus bleibt erhalten und man kann damit arbeiten.

    Schade das es nur über diesen albernen Umweg geht.

    Grosses Dankeschön! Und vielen Dank für deine Gedult *verbeug* 👍 👍 👍



  • Gerne wieder...

    MFG


Anmelden zum Antworten