| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Ikoni tarjottimellegebbiz 01.08.01 10:26 Lisää ohjelman ikonin windowsin alapalkkiin kellonviereen jota klikkaamalla oikealla napilla tulee popupmenu ja poistaa ohjelman tehtäväpalkilta.
unit MainFrm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, Menus; const WM_TRAYICON = WM_USER+1; type TMainForm = class(TForm) TrayMenu: TPopupMenu; miClose: TMenuItem; procedure FormPaint(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure miCloseClick(Sender: TObject); private Starting: Boolean; NIData: TNotifyIconData; public procedure IconCallBackMessage(var Msg: TMessage); message WM_TRAYICON; end; var MainForm: TMainForm; implementation {$R *.DFM} procedure TMainForm.FormPaint(Sender: TObject); begin if Starting then begin Starting:=False; ShowWindow(Application.Handle, SW_HIDE); end; end; procedure TMainForm.FormCreate(Sender: TObject); begin Starting:=True; with NIData do begin cbSize:=sizeof(NIData); Wnd:=Self.handle; uID:=1; uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE; hIcon:=Application.Icon.Handle; szTip:='Ohjelman nimi'; uCallBackMessage:=WM_TRAYICON; end; Shell_NotifyIcon(NIM_ADD,@NIData); end; procedure TMainForm.IconCallBackMessage(var Msg: TMessage); var MousePos: Tpoint; begin case Msg.lParam of WM_LBUTTONDOWN: SetForegroundWindow(Application.Handle); WM_RBUTTONDOWN: begin GetCursorPos(MousePos); SetForegroundWindow(Application.Handle); Application.ProcessMessages; TrayMenu.Popup(MousePos.X,MousePos.Y); end; end; end; procedure TMainForm.FormDestroy(Sender: TObject); begin Shell_NotifyIcon(NIM_DELETE,@NIData); end; procedure TMainForm.miCloseClick(Sender: TObject); begin Close; end; end. raimo 10:36 9.10.02 Sempä verran tuohon, että jotta ikoni katoaisi varmasti, Shell_NotifyIcon(NIM_DELETE,@NIData); pitää olla Formin OnDestroy -käsittelijässä, eikä suinkaan OnClose. raimo 12:17 9.10.02 Ja lisäämpä vieläkin :) Vaihtuva "hinttitippi" Tray-ikoniin kun lisäämmä case Msg.lParam of perään: WM_MOUSEMOVE: begin StrPLCopy(NIData.szTip, PChar(TimeToStr(Time)), SizeOf(NIData.szTip)); Shell_NotifyIcon(NIM_MODIFY,@NIData); end; Tuossa ikoniin ilmestyy kellonaika. Ajastimella saa jopa käymään sen kellon... gebbiz 20:33 14.10.02 jepjep. OnDestroyiin tosiaan ilman muuta. Ton NotifyIconDatankin vois varmaan sijoittaa vaikka formiin eikä globaaliks (elegantimpaa?). Tuo OnPaintin käyttö tuossa tuntuu myös aika hölmöltä, mutta ei se tunnu muuten piiloutuvan tehtäväpalkilta. empty 18:50 3.12.02 Joo, hyvä ja muuten vois muokata koodinpätkän niin että se näyttää ballon-hinttippi ikkunan (XP, ME) raimo 18:20 25.1.03 Ai niin, tämäkin on kiva :) Jos haluaa että ohjelma käynnistyy suoraan Taskbaariin, ts ohjelma ei vilahdakkaan näytössä vaan menee kuvakkeeksi suoraan, niin: ProjectSourceen (View - Project source) Application.ShowMainForm:= False; Laita tuo rivi Application.Initialize; rivin jälkeen. |
![]() Haku
|