Форум: "WinAPI";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизХочу прогамму в Tray положить Найти похожие ветки
← →
Eraser (2002-02-07 08:57) [0]Люди добрые не откажите в помощи. Есть код:
const
WM_NOTIFYTRAYICON = WM_USER + 1;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure WMTRAYICONNOTIFY(var Msg: TMessage);
message WM_NOTIFYTRAYICON;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses ShellAPI;
procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage);
var
s: String;
begin
case Msg.LParam of
WM_MOUSEMOVE: s := "Мышь сдвинута";
WM_LBUTTONDOWN: s := "Левая кнопка нажата";
WM_LBUTTONUP: s := "Левая кнопка отпущена";
WM_LBUTTONDBLCLK: s := "Два раза нажата левая кнопка";
WM_RBUTTONDOWN: s := "Правая кнопка нажата";
WM_RBUTTONUP: s := "Правая кнопка отпущена";
WM_RBUTTONDBLCLK: s := "Два раза нажата правая кнопка";
else s := IntToStr(Msg.LParam);
end;
ListBox1.Items.Add(s);
ListBox1.ItemIndex := ListBox1.Items.Count - 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
tray: TNotifyIconData;
Ic: TIcon;
begin
Ic := TIcon.Create;
Ic.LoadFromFile("factory.ico");
with tray do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := Ic.Handle;
szTip := ("Это другая иконка");
end;
Shell_NotifyIcon(NIM_MODIFY, Addr(tray));
Ic.Destroy;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
tray: TNotifyIconData;
Ic: TIcon;
begin
Ic := TIcon.Create;
Ic.LoadFromFile("chip.ico");
with tray do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := Ic.Handle;
szTip := ("Это наша иконка");
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));
Ic.Destroy;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
tray: TNotifyIconData;
begin
with tray do begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, Addr(tray));
end;
хороший код, не спорю. Вопрос в следующем как мне поступить чтобы упрать форму с панели задач при сворачивании , чтобы она была только в tray"е?? И могу ли к иконке приделать что то типа PopupMenu??
И вообще в C++Builder есть компонет TTrayIcon который это все делает может и у Delphi что-то типа такого есть?
Если неохота отвечать то хотя бы дайте ссылку где про это можно почитать!!!
← →
Григорий Ситнин (2002-02-07 09:07) [1]Да на этом же сайте в закромах и посмотри =)
← →
Relict (2002-02-07 10:47) [2]найболее простой способ
установить rxlib версии 2.75
там есть такой компонент
саму rxlib можно взять в инете, изумительно ищется по поиску...
читай readme там процес установки описан полностью
← →
IronHawk (2002-02-07 10:55) [3]RxTrayIcon - только глючит иногда !
← →
handra (2002-02-11 12:41) [4]для основной формы помогало всегда:
Hide;
SetWindowLong(Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
← →
Igor_thief (2002-02-11 16:31) [5]Я игрался с этим вопросиком и вот что у меня получилось:
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellApi, Menus;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Show1: TMenuItem;
Exit1: TMenuItem;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Show1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
public
procedure OnMinimizeEvt(Sender:TObject);
procedure OnMess(var Msg:TMessage);message wm_app+1;
end;
var
Form1: TForm1;
Tray:TNotifyIconData;
implementation
{$R *.dfm}
procedure TForm1.OnMinimizeEvt(Sender:TObject);
begin
{Скрываем показание кеопки с таскбара}
ShowWindow(Application.Handle,SW_HIDE);
{Забрасываем приложение в трей}
with Tray do
begin
cbSize:=sizeof(Tray);
Wnd:=Handle;
uID:=0;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon:=Application.Icon.Handle;
uCallbackMessage:=WM_APP+1;
szTip:="Masterpiece";
end;
Shell_NotifyIcon(NIM_ADD,@Tray);
end;
procedure TForm1.OnMess(var Msg:TMessage);
begin
if Msg.lParam=WM_RBUTTONUP then
PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.y);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
{Уничтожаем иконку из трея}
with Tray do
begin
cbSize:=sizeof(Tray);
Wnd:=Handle;
uID:=0;
uFlags:=0;
hIcon:=0;
uCallbackMessage:=WM_APP+1;
end;
Shell_NotifyIcon(NIM_DELETE,@Tray);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize:=OnMinimizeEvt;
end;
procedure TForm1.Show1Click(Sender: TObject);
begin
{Вывод главной формы}
ShowWindow(Application.Handle,SW_SHOWNOACTIVATE);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
Form1.Release;
end;
end.
-------------------------
Это пример как сворачивать окно при нажатии кнопки минимизации и есть работа с popupmenu. Ghb минимизации форма находится только в трее. Если нужен архив с исходником, то свисни. Чтобы написать этот исходник, мне пришлось разобрать кучу подобных, разобраться в них и создать свойю Лично мне мой исходник очень нравится. Я вот хочу есщё компонент создать, который будет кидать прогу в трей.
← →
Юрий Зотов (2002-02-11 17:12) [6]> Лично мне мой исходник очень нравится.
А еще лучше он станет, если:
- инициализировать Tray один раз, а не при каждом сворачивании;
- после PopupMenu1.Popup послать своему же окну WM_NULL;
- убрать строку Form1.Release, как лишнюю.
← →
Igor_thief (2002-02-14 09:08) [7]2 Юрий Зотов
Я учту Ваши советы. Спасибо!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c