Avatar billede spectual Nybegynder
25. januar 2001 - 23:58 Der 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.
Avatar billede spectual Nybegynder
25. januar 2001 - 23:58 #1
(popup-menuen er den menu, som fremkommer ved højreklik på programmets ikon)
Avatar billede pstric Nybegynder
26. januar 2001 - 00:01 #2
Avatar billede pstric Nybegynder
26. januar 2001 - 00:02 #3
Eller mener du et af de programmer, du i forvejen har liggende i systray?
Avatar billede spectual Nybegynder
26. januar 2001 - 00:10 #4
Jep :-)
Avatar billede loke-liscom Nybegynder
26. januar 2001 - 00:11 #5
Han mener nok et konponent du kan sætte ind i dit program. Hvis du har mod på selv at skrive et, så vil jeg gerne hjælpe dig.
Avatar billede spectual Nybegynder
26. januar 2001 - 00:17 #6
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).
Avatar billede pstric Nybegynder
26. januar 2001 - 00:17 #7
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.
Avatar billede spectual Nybegynder
26. januar 2001 - 00:18 #8
Kan du forklare i hovedtræk hvordan det gøres, loke-liscom?
Avatar billede spectual Nybegynder
26. januar 2001 - 00:20 #9
pstric>> Ehh... via. DDE eller hvad? Jeg tror ikke Winroute accepterer DDE klienter (eller rettere at Winroute er en DDE server).
Avatar billede spectual Nybegynder
26. januar 2001 - 00:21 #10
Jeg skal ikke fjernstyre et hvilket som helst program - det er ét program der skal styres (og som sagt, det er winroute).
Avatar billede pstric Nybegynder
26. januar 2001 - 00:21 #11
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.
Avatar billede spectual Nybegynder
26. januar 2001 - 00:23 #12
hmmm... tja... Jeg ville ikke kunne finde selv om MSDN var oppe. Deres side er totalt uoverskuelig/(til tider) ubrugelig.
Avatar billede pstric Nybegynder
26. januar 2001 - 00:28 #13
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.
Avatar billede pstric Nybegynder
26. januar 2001 - 00:36 #14
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.
Avatar billede spectual Nybegynder
26. januar 2001 - 00:43 #15
næh ... ikke hvad jeg sådan lige kan se
Avatar billede loke-liscom Nybegynder
26. januar 2001 - 13:22 #16
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.

Hilsen Klaus Mark
Avatar billede pstric Nybegynder
26. januar 2001 - 13:34 #17
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.
Avatar billede pstric Nybegynder
26. januar 2001 - 13:34 #18
...at styre Winroute
Avatar billede pstric Nybegynder
26. januar 2001 - 13:52 #19
spectual>> Sker der noget med http://www.eksperten.dk/spm/40549 ? Ellers så luk spørgsmålet.
Avatar billede pstric Nybegynder
26. januar 2001 - 13:54 #20
Du har også flere åbne spørgsmål, hvor der ikke sker mere.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester