![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свернуть приложение [D6, D7, WinXP]
Юрик © (2004-12-04 10:36:00)Здарова, народ!!
Вопрос, при запуске приложения нужно чтоб оно сварачивалось в трей, и чтоб форма не появлялась кратковременно на экране, далаю так
Form1.Left:=ScreenWight
не срабатывает в winXP, подскажите как сдалать?
Иксик2 (2004-12-04 11:45:00) [1]Мда, раньше на вопросы про иконку в трее по другому реагировали...
grigory (2004-12-04 11:19:00) [2]Пожалуйста ..обращайся!:)
Юрик (2004-12-04 11:10:00) [3]grigory
Спасибо, друг :)
grigory (2004-12-04 11:05:00) [4]тебе скинуть куда или выложить прям здесь?
Ну вот..
unit shellUnit;
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;
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;
end.
program shellProject;
uses
Forms, Windows,
shellUnit in 'shellUnit.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
Application.Title := 'This is TrayIcon Example';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Юрик (2004-12-04 11:02:00) [5]grigory
Буду весьма благодарен, если дашь
begin...end (2004-12-04 10:42:00) [6]> Юрик (04.12.04 10:36)
Application.ShowMainForm := False (в файле проекта)?
Sun bittern (2004-12-04 10:40:00) [7]>> Вопрос, при запуске приложения нужно чтоб оно сварачивалось в трей,
Поискать сторонние компонеты, если сам написать не можешь. Таких компонент в инете целая горка.
>> чтоб форма не появлялась кратковременно на экране, далаю так
Что, так ужасно ее появление? :)
grigory (2004-12-04 10:39:00) [8]у меня есть готовый пример, если хошь, дам..