Migająca ikona w trayu
Britney Spears
Witam!
Kiedyś potrzebowałem ikonki w trayu, która będzie migać, zatrzyma się, wznowi miganie, utworzy się na pasku lub zniknie z niego. No więc przedstawiam tu bardzo prostą metodę na te wszystkie opcje. Jest to banalna rzecz, ale bardzo przydatna:)
Potrzebne nam będą:
- 5 Buttonów
- 1 PopupMenu
- 1 Timer
Button1 - dodaje ikonkę do traya
Button2 - usuwa ikonkę z traya
Button3 - zamyka program
Button4 - przerywa miganie ikonki
Button5 - wznawia miganie ikonki
Timer1 - kod do migania ikonką (Interval:=500;)
PopupMenu - opcja z wyjściem z programu
Oto cały kod
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, shellapi, ExtCtrls;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Wyjd1: TMenuItem;
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Button4: TButton;
Button5: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Wyjd1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
procedure WndProc(var Msg : TMessage); override;
public
IconNotifyData : TNotifyIconData;
end;
var
Form1: TForm1;
migacz:integer; //zmienna migania ikonki
implementation
{$R *.dfm}
//Kliknij dwukrotnie na Button1
procedure TForm1.Button1Click(Sender: TObject);
begin
// Teraz wypełniamy rekord IconNotifyData tak aby przyjmował
// komunikaty wysyłane do aplikacji i pokazywał "dymki" podpowiedzi.
with IconNotifyData do begin
hIcon:=Application.Icon.Handle;
uCallbackMessage:=WM_USER+1;
cbSize:=SizeOf(IconNotifyData);
Wnd:=Handle;
uID:=100;
uFlags:=NIF_MESSAGE+NIF_ICON+NIF_TIP;
end;
// Kopiujemy tytuł aplikacji jako "dymek"
StrPCopy(IconNotifyData.szTip, Application.Title);
// Dodajemy ikonę do traya
Shell_NotifyIcon(NIM_ADD,@IconNotifyData);
end;
procedure TForm1.WndProc(var Msg : TMessage);
var
p : TPoint;
begin
if (Msg.Msg=WM_USER+1)and(Msg.lParam=WM_RBUTTONDOWN) then
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x, p.y);
end;
if (Msg.Msg=WM_USER+1)and(Msg.lParam=WM_LBUTTONDOWN) then
begin
form1.show;
showwindow(handle,sw_normal);
end;
inherited;
end;
//Kliknij dwukrotnie na PopupMenu, potem w Caption wpisz
//Wyjdź i wklej ten kod
procedure TForm1.Wyjd1Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @IconNotifyData);
Application.ProcessMessages;
Application.Terminate;
end;
//Kliknij dwukrotnie Button2 i wklej ten kod
procedure TForm1.Button2Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @IconNotifyData);//kasuje ikonkę z traya
end;
//Kliknij dwukrotnie Button3 i wklej ten kod
procedure TForm1.Button3Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @IconNotifyData);
Application.ProcessMessages;
Application.Terminate;
end;
//Kliknij dwukrotnie Timer1 i wklej ten kod
procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(migacz);
if migacz>1 then migacz:=0;
if migacz=0 then button1.Click;
if migacz=1 then button2.Click;
//procedurka od migania ikonką
end;
//Kliknij dwukrotnie na Button4 i wklej to
procedure TForm1.Button4Click(Sender: TObject);
begin
timer1.Enabled:=false;//przerywa miganie
button1.Click;
end;
//Kliknij dwukrotnie na Button5 i wklej to
procedure TForm1.Button5Click(Sender: TObject);
begin
timer1.Enabled:=true; //wznawia miganie
end;
end.
Skompiluj to teraz i sprawdź jak to działa.
Myślę, że z kodem nie będzie kłopotów i z jego zrozumieniem. Przykład bardzo prosty jak wykonać miganie ikonki. Załączam jeszcze źródło jakby ktoś sobie nie poradził.
Pozdrawiam :)
O LOL, to ja pisałem? :D Masakra jaki polew mam teraz z tego hehe. :) Wygląda to naprawdę komicznie na dziś dzień. :)
UNFA@wp.pl:
http://www.unfa.prv.pl - mówisz??
Coś długo się wczytuje...
Szczególnie menu...
Więc wszedłem na index2.html...
Dużo programów nawaliłeś... ...ale to ma być klasa A
Notatnik? Płonięcie?
Może być 4/5 a Art. 3,5/5
czy to aby nie gotowiec??
z tym miganiem to w windowsie XP trochę bałaganu robi
YEAH!!!!!!!!!
Tego zawsze potzebowałem!!
<a href="http://www.unfa.prv.pl">Zapraszam na moją stronkę</a>
a ja nie wiem po co się tak bawić :/
ściągasz CHpack .. tam masz tray icon co to i siędodaje i możesz ustawić czy ma się program pokazać po kliknięciu czy po DlbClick .. miganie to też ma, ustawić można enabled'a i popupa dodać .. ale pewnie mi powiecie że leń jestem :)
muahahaha :D pozdro!
no przenieś to wreszcie do gotowców albo do faq! i popraw błędy (NIM_MODIFY + uwagi Adamo)! bo usuniemy!
tak w ogóle to precz z tym do faq.
Można to też na bulinku zrobić ale można i też w taki niekonwencjonalny, jaki pokazałem :P Może to będzie łatwiesze do zrozumienia dla początkujących :)
Drajwer ja wiem co to jest boolean koleś :]
nie wiem jak to ma wyglądać, ba nawet nie cyztałem przeleciałem wzrokiem tylko, ale żeby migotało można ustawić parametr w TTray.animate na true;
if migacz=0 then button1.Click;
if migacz=1 then button2.Click;
albo...
TButton(FindComponent('Button'+inttostr(migacz+1))).Click; :P
koles wiesz co to sa booleany? :P
To chyba powinno się znaleźć w Gotowcach
no fakt.. to miganie jest wrecz zabawne :D
ja bym jednak zrobił podmianę ikonki, bo dodawanie i usuwanie dziwnie wygląda :)
a nie lepiej, migacz jako boolean i dać tak: