WinXP und Win7 Grafikkbug wegen C++-Programm



  • Hallo zusammen!

    Bin heute mal wegen was komplett anderem hier: Ich habe mein in Turbo C++ geschriebenes Programm im Autostart (und ein Kumpel von mir auch), welches ein TrayIcon mit PopUp-Menu benutzt.
    Seit dem kommt es vor, dass auch andere PopUp-Menus unter Windows (egal ob XP oder 7) verbuggen; beim Anklicken dieser kommt es manchmal vor, dass sie dann einfach stehen bleiben und nur durch ein Neustarten des Rechners wieder verschwinden. Hier ein Screenshot: http://img193.imageshack.us/img193/6227/unbenannt1fz.jpg

    Ich hab natürlich erstmal nach dem Problem gegoogelt, aber da war die Ursache immer eine andere und was soll ich anderen Leuten erzählen, dass mein selbstgeschriebenens Programm der Auslöser ist!?

    Ich hab echt keine Ahnung, was der Auslöser dafür sein könnte; vielleicht habt ihr einen Tipp 😉



  • Hallo,

    Turbo C++ werden nicht viele auf dem PC haben; bei mir ist ne Studio 2006er Version drauf.
    Ein von dir geschildertes Verhalten des PopupMenu konnte ich nicht nachvollziehen.
    Allerdings reichen deine Infos nicht aus, um eine Erklärung für dein Problem zu finden.

    Solange dein PopupMenu aus der Komponenten-Palette kommt und dein Programm sicher beendet und
    der Speicher aufgeräumt wurde, dürfte das eigentlich nicht passieren...



  • Hallo,

    ja, ich habe das PopupMenu aus der Palette und verwalte alle Speicher richtig. Das Programm ist aber oft auch so sehr träge. Wenn ich das TrayIcon z.B. rechtsklicke dauert es oft etwas, bis das PopupMenu auftaucht und dann dauert es auch noch etwas, bis die Form geöffnet wird, die ich über einen PopupMenu-Eintrag öffnen lasse. Habe keine Ahnung woran das alles liegen könnte..
    Eine Alternative zum TrayIcon + PopupMenu hab ich für mein Programm grad auch nicht parat, da das die beste Lösung für mich wäre..

    //Edit: Hm, könnte das daran liegen, dass ich das hier verwende?

    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    	ShowWindow(Application->Handle, SW_HIDE); //
    	try
    	{
            ShowWindow(Application->Handle, SW_HIDE); //
    		Application->Initialize();
    		Application->ShowMainForm = false; //
    		Application->Title = "MountManager";
    		Application->CreateForm(__classid(TForm1), &Form1);
    		ShowWindow(Application->Handle, SW_HIDE); //
    		Application->Run();
    		ShowWindow(Application->Handle, SW_HIDE); //
    	}
    

    Das steht in der cpp des Projekts. Das hatte jemand hier im c-plusplus-Forum mal gepostet (find den Beitrag grad nicht mehr). Damit sollte erreicht werden, dass das Programm versteckt gestartet wird, weils ja erstmal nur im Tray sichtbar sein soll. Ich dachte jetzt daran, weil das doch ziemlich viele "ShowWindow(Application->Handle, SW_HIDE);" sind.



  • halloei schrieb:

    Das steht in der cpp des Projekts. Das hatte jemand hier im c-plusplus-Form mal gepostet (find den Beitrag grad nicht mehr). Damit sollte erreicht werden, dass das Programm versteckt gestartet wird, weils ja erstmal nur im Tray sichtbar sein soll. Ich dachte jetzt daran, weil das doch ziemlich viele "ShowWindow(Application->Handle, SW_HIDE);" sind.

    Probier's doch einfach aus.

    (Der richtige Weg, um das Formular beim Programmstart unsichtbar zu behalten, ist übrigens hier beschrieben.)

    Du könntest auch stattdessen mal eine andere Tray-Icon-Komponente ausprobieren, etwa CoolTrayIcon.



  • audacia schrieb:

    (Der richtige Weg, um das Formular beim Programmstart unsichtbar zu behalten, ist übrigens hier beschrieben.)

    Ja, den Beitrag hatte ich damals auch gefunden. Habs damals so probiert und .. naja, jetzt klappts!
    Leider kann ich bei meiner Turbo C++ Explorer-Version keine Komponenten installieren; da muss ich wohl wieder meinen 5er Builder auspacken..

    Es scheint aber schon besser zu sein, will aber vorher noch ein wenig testen, bevor ich mich zu früh freue 😉

    Schönen Abend



  • halloei schrieb:

    Leider kann ich bei meiner Turbo C++ Explorer-Version keine Komponenten installieren

    Du kannst sie aber einfach im Code instantiieren.



  • audacia schrieb:

    Du kannst sie aber einfach im Code instantiieren.

    Puh, wie genau geht das?
    Ich habe über "New VCL Component..." aus der .pas-Datei eine cpp und eine header-Datei erstellt, diese in meinen include-Ordner gepackt und dann versucht im Projekt mit #include einzubinden; das gab aber nur Unresolved externals, als ich dann versuchte, ein TCoolTrayIcon dynamisch zu erstellen. Hab das noch nie gemacht 😕



  • Hallo

    Vermutlich must du die cpp und h-Datei noch zu deinem Projekt hinzufügen (BCB5 : Menü Projekt/Dem Projekt hinzufügen...)

    bis bald
    akari



  • Wow, da war meine geratene Methode ja garnicht falsch. Jetzt klappts, danke für eure Hilfe!
    Bis bald

    //Edit: Hm, das Thema hier das einzige über TCoolTrayIcon hier im VCL-Forum!?
    Denn ich versuche grad die vielen neuen Funktionen, die die Komponente mit sich bringt, ebenfalls zu nutzen (vor allen Dingen "StartHidden").

    In dem Ordner "demos", der in der .zip-Datei mit drin ist, sind diese einzelnen Funktionen, die unter anderem jeweils eine .pas-Datei haben. Aber ich hab nun keinen Schimmer, wie ich diese mit dem Projekt so verknüpfe, dass sie mir dort zur Verfügung stehen. Bitte nochmals um einen kleinen Denkanstoß!


Anmelden zum Antworten