Anwendung nicht in Taskleiste anzeigen (Laufender Betrieb)



  • Hallo Zusammen.

    PS:-----Suchfunktion benutzt, Link in FAQ = Tod, Korrektur eines anderen Forumeintrags = Tod.------

    Meine Frage ist es, ob es möglich ist. Ein Programm während man damit arbeitet auf der Taskleiste nicht anzeigen zu lassen.
    Wie z.B. eine MessageBox.

    Diese ist ja auch aktiv und wird in der Taskleiste nicht angezeigt.
    Höchstwahrscheinlich greift er quasi auf den Taskeintrag des Hauptprogrammes zu.

    Wielleicht ist es ja auch möglich, das Symbol von der Taskbar neben die Uhr zu versetzen.

    Ist dies alles nur möglich, wenn das Formular selbst auch nicht sichtbar ist.



  • Hallo

    Einen Alternativ-Thread find ich auf die Schnelle auch nicht.

    Wielleicht ist es ja auch möglich, das Symbol von der Taskbar neben die Uhr zu versetzen.

    Das geht mit TTrayIcon

    bis bald
    akari



  • Meine (veraltete)Programmvorlage auf Arbeit verwendet zwar VCL aber nutzt das WINAPI TrayIcon, wenn man daraf klickt werden messages an das Hauptprogramm gesendet aufgefangen und verarbeitet (sowas wie doppelklick zum öffnen oder einfachklick der dann ein popup-box an curosor pos öffnet)

    das hauptformular selber wird glaube ich einfach auf hide gestellt, aber sicher bin ich mir da jetzt nicht und vor Do kann ich auch net nachsehen :p



  • Hallo

    Du hättest auch die letzte Zeile des Codesnippets lesen sollen 😉

    Hinweis: seit der BCB Version 3.0 liefert Borland ebenfalls ein TrayIcon-Beispielprojekt mit. Es befindet sich im Verzeichnis $BCB\Examples\Apps\TrayIcon\.

    Und natürlich arbeitet im Hintergrund immer die WinAPI. Was denn sonst?

    bis bald
    akari



  • Hallo Zusammen.

    Danke für eure schnellen Antworten.
    Das mit dem Trayicon habe ich auch schon gemacht, jedoch wird dährend der Laufzeit, (während dem Arbeiten mit dem Prog) der Taskleisteneintrag immernoch angezeigt. Das heiss ich habe dan ein Symbol neben der Uhr und eines in der taskleiste.



  • Vielleicht hilft dir

    ShowWindow(Application->Handle, SW_HIDE);
    


  • akari schrieb:

    Hallo

    Du hättest auch die letzte Zeile des Codesnippets lesen sollen 😉

    Hinweis: seit der BCB Version 3.0 liefert Borland ebenfalls ein TrayIcon-Beispielprojekt mit. Es befindet sich im Verzeichnis $BCB\Examples\Apps\TrayIcon\.

    Und natürlich arbeitet im Hintergrund immer die WinAPI. Was denn sonst?

    bis bald
    akari

    wie gesagt es ist die alte vorlage, damit hab ich herzlich wenig zu tun ... und mit meinem programm bin ich noch nciht ganz soweit das ichs schon in die traybar verstecken kann

    EDIT: Sry für OT Spam weis nicht was mich geritten hat auf send zu drücken



  • DWORD dwExStyle=GetWindowLong(Application->Handle,GWL_EXSTYLE);
    dwExStyle |= WS_EX_TOOLWINDOW;
    SetWindowLong(Application->Handle,GWL_EXSTYLE,dwExStyle);
    

    Das setzt du in deiner Project.cpp vor dem:

    Application->Run();
    

    Und schon siehst du das Programm nicht mehr in der Taskleiste.



  • @tipgeber

    Ich habe es jetzt mal so hinkopiert, jedoch erscheint die Anwendung immernoch in der Taskleiste

    Application->Initialize();
    		SetApplicationMainFormOnTaskBar(Application, true);
    		Application->CreateForm(__classid(TForm1), &Form1);
    		DWORD dwExStyle=GetWindowLong(Application->Handle,GWL_EXSTYLE); 
    		dwExStyle |= WS_EX_TOOLWINDOW;
    		SetWindowLong(Application->Handle,GWL_EXSTYLE,dwExStyle);
    		Application->Run();
    


  • Entschludigt, das internet hat gelaggt



  • Nimm das Handle von TForm1 !



  • Hallo und danke für eure Hilfen. 👍

    Ich habe es nun endlich mit folgendem Code hingekriegt. 🙂

    SetApplicationMainFormOnTaskBar(Application, false); //<- Eintrag muss auf false sein
    
    ShowWindow(Application->Handle,SW_HIDE);   //<-Diese Zeile hat gefehlt
    
    DWORD dwExStyle=GetWindowLong(Application->Handle,GWL_EXSTYLE);
    dwExStyle |= WS_EX_TOOLWINDOW;
    SetWindowLong(Application->Handle,GWL_EXSTYLE,dwExStyle);
    
    Application->Run();
    

    Das Formular ist nun Sichtbar und der Taskleisteneintrag ist weg. 💡



  • Hallo

    Glückwünsch. Ich habe diesen Thread an den bestehenden FAQ-Eintrag gehängt.

    bis bald
    akari



  • Hallo, ich habe folgenden code

    Application->Initialize();
    		SetApplicationMainFormOnTaskBar(Application, true);
    		Application->Title = "SOB GmbH - Kontakt + Listen Verwaltung";
    		Application->CreateForm(__classid(TFM_DM_Main), &FM_DM_Main);
    		Application->CreateForm(__classid(TFM_Appl_LogIn), &FM_Appl_LogIn);
    		Application->CreateForm(__classid(TFM_Main), &FM_Main);
    		Application->CreateForm(__classid(TFM_Users), &FM_Users);
    		Application->CreateForm(__classid(TFM_Lst_Choose), &FM_Lst_Choose);
    		Application->CreateForm(__classid(TFM_Lst_Verw), &FM_Lst_Verw);
    		Application->CreateForm(__classid(TFM_List_Add), &FM_List_Add);
    		Application->CreateForm(__classid(TFM_List_Del), &FM_List_Del);
    		Application->CreateForm(__classid(TFM_DLG_YesNo), &FM_DLG_YesNo);
    		Application->CreateForm(__classid(TFM_Customer_Add), &FM_Customer_Add);
    		Application->CreateForm(__classid(TFM_Customer_Edit), &FM_Customer_Edit);
    		Application->CreateForm(__classid(TFM_DLG_Customer_Lists), &FM_DLG_Customer_Lists);
    		Application->Run();
    

    Es wird das LogIn Fenster geöffnet und nach erfolgreichem LogIn geschlossen und das Main-Formular angezeigt. Nun wird die Anwendung in der Taskleiste während das LogIn Formular angezeigt wird auch angezeigt. Nachdem Das LogIn Fenster jeoch geschlossen ist, ist auch die Anwendung von der Taskleiste verschwunden. Ich hätte diese aber auch gerne angezeigt, wenn das Main Fensteraktiv ist.



  • Hallo Zusammen

    @christian_gnoth
    Eine Kurze Frage?

    Wie wechselt du zwischen den Fenstern, oder wie blendest du das Loginfenster auf?

    Ich denke, das könnte noch hilfreich sein 😕



  • Die Fenster werden in der oben angegebenen Reihenolge erstellt und dann das erste Fenster angezeigt von der Anwendungssteuerung.

    Ich habe alle Fenter-Formulare default mäßig VISIBLE=false eingestellt, sonst würden sie mir alle angezeigt.

    So wird nur das erste Fenster als hauptformular angezeigt.

    Der User bekommt dann also nur das Login Fenster angezeigt und muss sich einloggen. In Abhängigkeit ob der LogIn erfolgreich war, wird dann das nächste Fenster geöffnet, oder wenn nicht dann die Anwendung beendet.

    Da die Anwendungssteuerung Application->Run() das anzeigen des ersten Fensters übernimmt, denke ich, das dieses erste Fenster als Hauptformular der Anwendung registirert wird. Wenn ich nach dem LogIn das Fenster wieder verstecke mit
    VISIBLE=false und das nächste Fenster mit VISIBLE=true anzeige, verschwindet auch die Anwendung von der Task-Leiste.



  • ich hab die Lösung gefunden.

    Steht in einem anderen Thread des Forums unter FAQ:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39250-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html

    Ist quasi das gleiche Porblem. Mein LogIn Fenster ist das Hauptformular und das zweite Formular soll nun auch in der Task-Leiste erscheinen.

    Funktioniert auch bestens.


Log in to reply