Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-46429
konusov
2002-04-02 23:33
2002.04.15
Как в delphi сделать невидимым приложение на панели задач?


1-46423
Chris
2002-04-02 16:29
2002.04.15
Кто открыл файл?


1-46451
ded_di
2002-04-02 15:08
2002.04.15
richedit


14-46480
VictorT
2002-03-06 13:12
2002.04.15
однопользовательская в многопользовательскую


1-46453
P.
2002-04-03 12:28
2002.04.15
MouseMove





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский