Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Вниз

Спрятать прогу в Tray   Найти похожие ветки 

 
vv   (2003-05-16 14:05) [0]

Народ, подскажите пожалуйста как спрятать прогу в tray. Не очень хочется из-за такой мелочи устанавливать целый компонент.
Заранее Благодарю!


 
VMcL   (2003-05-16 14:20) [1]

Shell_NotifyIcon


 
Skier   (2003-05-16 14:21) [2]


> Не очень хочется из-за такой мелочи устанавливать целый
> компонент.

Ну... тогда Shell_NotifyIcon.
Хотя я думаю что ты половину компонента всё равно перепишешь,
чтобы всё пристоино работало.



 
Song   (2003-05-16 14:51) [3]

http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=delphi;action=display;num=1037272197


 
nevalex   (2003-05-16 18:05) [4]

Вот держи небольшой исходник:

unit shellUni;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus;
const
WM_MYICONNOTIFY = WM_USER + 123;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
RestoreItem: TMenuItem;
N1: TMenuItem;
FileExitItem1: TMenuItem;
HideItem: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure RestoreItemClick(Sender: TObject);
procedure HideItemClick(Sender: TObject);
procedure FileExitItem1Click(Sender: TObject);
private
{ Private declarations }
ShownOnce: Boolean;
public
{ Public declarations }
procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
procedure WMSYSCOMMAND(var msg: TMessage);message WM_SYSCOMMAND;
procedure RestoreMainForm;
procedure HideMainForm;
procedure CreateTrayIcon(n:Integer);
procedure DeleteTrayIcon(n:Integer);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses ComObj, activex, ShellApi, shlobj, registry;
procedure TForm1.WMICON(var msg: TMessage);
var P : TPoint;
begin
case msg.LParam of
WM_LBUTTONDOWN:
begin
GetCursorPos(p);
SetForegroundWindow(Application.MainForm.Handle);
PopupMenu1.Popup(P.X, P.Y);
end;
WM_LBUTTONDBLCLK : RestoreItemClick(Self);
end;
end;
procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
inherited;
if (Msg.wParam=SC_MINIMIZE) then HideItemClick(Self);
end;
procedure TForm1.HideMainForm;
begin
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;
procedure TForm1.RestoreMainForm;
var i,j : Integer;
begin
Application.ShowMainForm := True;
ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
if not ShownOnce then
begin
for I := 0 to Application.MainForm.ComponentCount -1 do
if Application.MainForm.Components[I] is TWinControl then
with Application.MainForm.Components[I] as TWinControl do
if Visible then
begin
ShowWindow(Handle, SW_SHOWDEFAULT);
for J := 0 to ComponentCount -1 do
if Components[J] is TWinControl then
ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
end;
ShownOnce := True;
end;
end.
end;

procedure TForm1.CreateTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYICONNOTIFY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip,Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
end;

procedure TForm1.DeleteTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ShownOnce:= False;
CreateTrayIcon(1);
HideItem.Enabled := False;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteTrayIcon(1);
end;

procedure TForm1.RestoreItemClick(Sender: TObject);
begin
RestoreMainForm;
DeleteTrayIcon(1);
RestoreItem.Enabled := False;
HideItem.Enabled := True;
end;

procedure TForm1.HideItemClick(Sender: TObject);
begin
HideMainForm;
CreateTrayIcon(1);
HideItem.Enabled := False;
RestoreItem.Enabled := True;
end;

procedure TForm1.FileExitItem1Click(Sender: TObject);
begin
Close;
end;


Легче использовать команент...:]


 
vv   (2003-05-19 09:40) [5]

Спасибо!


 
AbrosimovA   (2003-05-23 13:54) [6]

Если у Nevalex немного кода, то у меня совсем мизер.

type
TMainForm = class(TForm)
procedure OnMinimize(Sender : TObject);
procedure FormCreate(Sender: TObject);


private
{ Private declarations }
TrayIcon : TNotifyIconData;
procedure NotifyIcon(var Msg : TMessage);message WM_USER + 100;

//Процедура, выполняемая при минимизации приложения
procedure TMainForm.OnMinimize(Sender : TObject);
begin
Shell_NotifyIcon(NIM_ADD,@TrayIcon);//Добавляет иконку в трей
ShowWindow(Application.Handle,SW_HIDE);//Скрывает форму
программы
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.OnMinimize := OnMinimize;//Событие при минимизации
приложения
with TrayIcon do begin
cbSize := SizeOf(TrayIcon);
Wnd := MainForm.Handle;
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_USER + 100;
hIcon := Application.Icon.Handle;
szTip := "Моя программа";
end;
end;

procedure TMainForm.NotifyIcon(var Msg : TMessage);
var P: TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK : //По двойному нажатию левой клавиши мыши
на иконке
begin
//Действия,выполняемые при двойном нажатии на иконке в трее
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
Shell_NotifyIcon(NIM_DELETE,@TrayIcon);//Удаление иконки из
трея
MainForm.Show;//Отобразить программу
end;
WM_RBUTTONDOWN : //По нажатию правой клавиши мыши на иконке
begin
SetForegroundWindow(Handle);//На передний план
GetCursorPos(P);//Определение позиции курсора мыши
PopupMenu1.Popup(P.X, P.Y);//Вывод на экран Popup-меню
PostMessage(Handle,WM_NULL,0,0);
end;
end;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
14-13395
Dmitriy O.
2003-05-16 09:35
2003.06.05
Организация хранения кода


3-13042
Devourer
2003-05-16 15:40
2003.06.05
LocalShare


1-13323
qwerty2
2003-05-25 13:02
2003.06.05
Массив из TStrings


14-13448
Zergling
2003-05-20 06:09
2003.06.05
MSDN


1-13242
Marina_S
2003-05-21 11:54
2003.06.05
Почему не работает присвоение TLabel.Caption?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский