Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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 Юрий Зотов
Я учту Ваши советы. Спасибо!




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.049 c
3-46265           XanderMan             2002-03-25 21:35  2002.04.15  
Извлечение дня, месяца и года из поля типа Date в InterBase


1-46418           Nestor                2002-04-02 18:04  2002.04.15  
InstallShield


14-46486          lel                   2002-03-06 10:51  2002.04.15  
RSDN magazine продается на Кузнецком мосту 8))


6-46472           Shadowww              2002-01-31 11:10  2002.04.15  
Маска подсети


3-46278           andr                  2002-03-26 11:59  2002.04.15  
Проблемы с ApplyUpdates.