View Poll Results: Wat dacht je hiervan?

Voters
18. You may not vote on this poll
  • Dit is verschrikkelijk handig!

    3 16.67%
  • Dit is handig.

    5 27.78%
  • Dit is vrij normaal.

    6 33.33%
  • What else is new?

    4 22.22%
  • Gewoon niet de moeite waard!

    0 0%
Results 1 to 5 of 5

Thread: TrayIcon met Popupmenu

  1. #1
    Delphi misbruiker
    Join Date
    Dec 2003
    Location
    BleskensCity
    Posts
    670

    Post TrayIcon met Popupmenu

    Hallo,

    Ik heb hier complete code met beschrijving voor het invoegen van een TrayIcon met een popupmenu. Dat is handig, voor bijvoorbeeld C/S of een virusscan of noem maar op. Bij mij werkt het prima tezamen met een registry procedure om het automatisch te laten opstarten. Hier is de code voor de TrayIcon:

    Plaats vooraf ShellAPI in de Uses clause, en de variabele :''TrayIconData: TNotifyIconData' in de private van je Form.
    En plaats de constante 'WM_ICONTRAY = WM_USER + 100;' in de interface van je Form.
    De volgende code komt dan in de OnCreate van je Form.

    Code:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with TrayIconData do
      begin
        cbSize := SizeOf(TrayIconData);
        Wnd := Handle;
        uID := 0;
        uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
        uCallbackMessage := WM_ICONTRAY;
        hIcon := Application.Icon.Handle;
        StrPCopy(szTip, Application.Title);
      end;
      Shell_NotifyIcon(NIM_ADD, @TrayIconData);
    end;
    Volgende code is voor de OnDestroy van je Form:

    Code:
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
    end;
    We hebben nu een TrayIcon die verder niets doet dan alleen maar laten zien dat ie er is, niet handig dus moeten we hem muisklik available maken dat doen we met de volgende code, maar vooraf zet je een popupmenu component op je form.

    Deze procedure in de private van je Form:

    Code:
    procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
    En de volgende in je Implementation:

    Code:
    procedure TForm1.TrayMessage(var Msg: TMessage);
    var
      p: TPoint;
    begin
      case Msg.lParam of
        WM_LBUTTONDBLCLK:
          begin
            WindowState := wsNormal;
            SetForegroundWindow(handle);
            Show;			
          [/COLOR]end;
        WM_RBUTTONDOWN:
          begin
     	  SetForegroundWindow(Handle);
            GetCursorPos(p);
            PopUpMenu1.Popup(p.x, p.y);
            [/COLOR]PostMessage(Handle, WM_NULL, 0, 0);
          end;
      end;
    end;
    Ok hij reageerd op klikken, maar je zal toch even je popupmenu moeten maken met bijv: Show, Hide en Close. Hier komt dan de code in de onclick van deze Items:

    Code:
    procedure TForm1.Show1Click(Sender: TObject);
    begin
      WindowState := wsNormal;
      SetForegroundWindow(handle);
      Show; 
    [/COLOR]end;
    
    procedure TForm1.Hide1Click(Sender: TObject);
    begin
      Hide; 
    [/COLOR]end;
    
    procedure TForm1.Close1Click(Sender: TObject);
    begin
      Close; 
    [/COLOR]end;
    
    procedure TForm1.PopupMenu1Popup(Sender: TObject);
    begin
      Show1.Enabled := not Visible;
      Hide1.Enabled := Visible;
    end;
    Dat laatste is listig, want hier kun je dus niet klikken wanneer je Form Showed op de ShowItem en andersom, dat is mooi. dacht ik zo, en handig voor meerdere doeleinden

    Ok dat was ie dan, veel succes ermee
    Wat was eerder? Een computer of de programmeur?

  2. #2
    Senior Member rckoenes's Avatar
    Join Date
    Aug 2001
    Location
    Amsterdam, NL
    Posts
    281
    Sorry maar NLDelphi heeft zelf een mooi component genaamt NDLTrayIcon.

    Welke ook nog eens opensource is.

  3. #3
    Delphi misbruiker
    Join Date
    Dec 2003
    Location
    BleskensCity
    Posts
    670
    Klopt, ik had deze zelf ook gebruikt, maar stuitte op problemen met hiden en showen, en een popupmenu is razend populair. Wat je nu ziet is dat je zelf alles bij de hand heb, en ook nog eens wat kan leren van de werking, Ik vind een component wel makkelijk, maar het word ons nogal eens te gemakkelijk gemaakt, want een beginner gebruikt componenten maar weet bij *** niet wat ie doet, dan alleen wat ie hoort te doen. Zelf componenten maken is wel het allerbeste om een eigenzinnig programma te maken. De bugs die ik had in NLDTrayIcon waren tosch echt niet zo leuk, wil je ze eruit vissen moet je toch eerst dat component openmaken en modificeren, terwijl als je duidelijke code hebt je gelijk kunt wijzigen. Snap je?
    Wat was eerder? Een computer of de programmeur?

  4. #4
    Senior Member rckoenes's Avatar
    Join Date
    Aug 2001
    Location
    Amsterdam, NL
    Posts
    281
    Mischien kan je die bugs er uit halen en de wijziging door geven aan Stijn.
    Dan kan hij deze weer verwerken in deze of de volgende versie van NLDTrayIcon.

  5. #5
    Delphi misbruiker
    Join Date
    Dec 2003
    Location
    BleskensCity
    Posts
    670
    Heel goed, En daar was ik ook inderdaad mee begonnen, tot ik het idee kreeg dit zelf te gaan doen, maar dan een heel eigen bescheiden versie, met dezelfde functies als nu maar dan in een component gegoten. Ik zal deze ook gerust doorgeven, maar de bugs hoef ik denk ik niet te vermelden, aangezien deze al vemeld zijn bij dit project. De code hierboven kent geen bugs, alleen weet ik niet of deze ook werkt op andere systemen dan W98 en W2000. Nogmaals als ik de code doorgeef van een bepaald project waar dit component in verwerkt is, wie gaat dan nog de complete werking begrijpen? Alleen de goeroe's! Maar nu is het goed te volgen. Als ik een component hiervan maak, zal ik ook ten allen tijde de code niet verborgen houden maar als optie erbij vermelden in de app zelf.
    Wat was eerder? Een computer of de programmeur?

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Optellen met db
    By coja in forum Databases
    Replies: 1
    Last Post: 26-Apr-03, 18:39
  2. problemen met project geopend met GExperts
    By MisterE in forum Algemeen
    Replies: 4
    Last Post: 20-Nov-02, 16:33

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •