25. januar 2001 - 23:58Der er
19 kommentarer og 1 løsning
Godt spørgsmål
Hejsa.
Er der nogen der har et godt forslag til hvordan jeg laver et delphi program, der aktiverer et menupunkt i en popup-menu i et program, som ligger i systemtray\'en? (altså den lige til venstre for uret)
Et godt alternativ? Den skal kunne aktiveres pr. automatik og når det ønskes.
Jeg har tidligere lavet noget lignende der enummerede vinduer, fandt et bestemt et og sendte en return over til een af dens undervinduer. Spørgsmålet er, om de også er vinduer? (programmerne i systrayet).
spectual>> Jep til at du vil kunne fjernstyre et hvilket som helst program?
Det bliver nok ret svært, og i hvert fald ikke noget JEG kan finde ud af.
Men hvis det er et bestemt program, det drejer sig om, så er der andre måder at fjernstyre dem på. Automation er en metode, der gør det muligt for et program som f.eks. Word at lade andre programmer overtage kontrollen. Det kan du også nemt (æh, forholdsvis nemt) indbygge i dine egne Delphi programmer.
Alle de programmer, der ligger i systray er jo enten programmer, der kører som en normal applikation eller som en service under NT/2000+, men jeg ved ikke lige hvordan man får windows til at fortælle hvilke programmer, der ligger i systrayen.
Det bliver svært at finde ud af det lige nu, hvis MSDN stadig er nede.
MSDN er ikke verdens bedste hjælp. Der er masser af eksempler, hvor man f.eks. skal prøve sig frem for at finde ud af, hvilke ting der skal initialiseres og hvad man selv skal nedlægge efter brug. Men der er kilometervis af uundværlig viden om Windows der, så jeg ville absolut ikke undvære det. Jeg har også den lokale udgave fra Visual Studio installeret.
Hvis det er Winroute du skal styre, så ville jeg nok ikke gå gennem systray. Hvis programmet har nogle dll\'er, så er det måske muligt at bruge nogle af de funktioner, de eksporterer.
Det er nu ikke lige noget, jeg har mod på at gå i gang med.
Jo det kan jeg da godt \"pstric\". der findes en type der hedder TNotifyIconData under shellapi. den ser sådan her ud : TNotifyIconData = record cbSize: DWORD; //størrelsen af TNotifyicondata Wnd: HWND; //Det windue der skal modtage WM uID: UINT; //jeg er ikke helt sikker jeg tror det er et unikt id det virker med 1 eller 100 og formentligt også med dem imellem og over uFlags: UINT; //her fortæller du om den skal have en popupbesked eller om den skal retunere WM eller om iconet i det heletaget skal vises. uCallbackMessage: UINT; //Når du modteger en WM skal du vide om den er til dig her skriver du et \"unikt id\" skriv WM_USER+X bare husk x, det kommer sig vist ikke så nøje hIcon: HICON; //iconets handle(alle iconer har et) szTip: array [0..63] of AnsiChar; //er popupbeskeden end;
når du så har defineret TNotifyicondata skal du bruge functionen : Shell_NotifyIcon(dwMessage : Cardinal; LPData : PNotifyIcondataA); dw_Message : kan være NIM_ADD/NIM_DELETE/NIM_MODIFY det siger lidt sig selv. NIM_ADD indsætter et nyt icon i systray, DELETE fjerner det og MODIFY ændre det hvis du har givet NotifyIconData.HIcon et nyt handle; LPData er en skal pege på TNotifyIconData ok, et eks. IconData : TNotifyIconData; Icondata.CBSize := sizeof(IconData); Icondata.Wnd := AllocateHWnd(IconMessage); IconData.Uid := 1; IconData.UFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP; FIconData.uCallbackMessage := WM_USER + 1025; FIconData.hIcon := et icon.Handle; StrPCopy(FIconData.szTip, \'Popup beskeden\');
Shell_NotifyIcon(NIM_ADD, @IconData);
procedure IconMessage(Message : TMessage); begin if Message.Msg = WM_USER + 1025 then case Message.LParam of WM_RBUTTONDOWN : showmessage(\'RB\'); WM_LBUTTONDOWN : showmessage(\'LB\');// Her kan du indsætte popupmenu1.popup eller kalde et event hvis du skriver et komponent. end; end;
Okay det er måske lidt rodet, men jeg har det selv på den måde at jeg vil gerne vide hvad der sker og ikke bare få et component der kan det hele. Det lære man jo ikke noget af. Jeg har skrevet componentet og hvis du vil have det så sig til. Bare lov mig at hvis du får det så kik på koden og se om du kan forstå det. Skriv evt. lidt til eller ret hvis der er fejl.
loke-liscom>> Læs nu lige de øvrige indlæg. En Tray Icon komponent har jo været oppe og vende, og det var ikke det han havde brug for.
Det stykke kode du har skrevet der, det svarer jo ret godt til det andet link i mit svar fra 26/01 2001 00:01:26. Og det kan IKKE bruges til at Winroute.
Du har også flere åbne spørgsmål, hvor der ikke sker mere.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.