In Tray starten?



  • Sorry, bei mir sind alle Effekte an. Egal, ob Einblend- oder Rolleffekt. Der Explorer verliert den Focus nicht. Und ja, bin noch unter 60 Jahre alt, meine Augen sind voll ok.

    Ich glaube eher, der Fehler liegt bei Deinem Prog. Poste am besten mal etwas Quellcode.



  • Noch ein Nachtrag.

    Bei der Anwendung, die ShellExecute aufruft müssen auch die passenden Parameter mitgegeben werden. Also nicht SW_ShowNormal o.ä. sondern SW_Hide.

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp



  • 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