Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.03;
Скачать: CL | DM;

Вниз

Минимизация в трей.   Найти похожие ветки 

 
Smithson ©   (2003-01-24 10:29) [0]

Имею некое недопонимание.
При минимизации приложения (Application.OnMinimize) делаю Form1.Hide. По команде из popup menu делаю Application.Restore; Form1.Show. После этого приложение сворачиваться перестает. Что не так?


 
Wowa-K ©   (2003-01-24 10:41) [1]

implementation
uses
ShellAPI;
Const
WM_MYTRAYNOTIFY = WM_USER + 10;
var
NID :TNotifyIconData;
//Contains information that the system needs to process taskbar status area messages.
StartTime : TTime;
// Time
{$R *.dfm}
//Процедура сворачивания приложения в SysTray
procedure TForm1.Button1Click(Sender: TObject);
begin
WITH NID DO
BEGIN
uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
// битовое поле, определяющее какое из следующих
// полей несет действительную информацию.
// Может быть одним из следующих значений: NIF_ICON,
// NIF_MESSAGE, NIF_TIP или их OR-комбинацией.
cbSize := SizeOf(NotifyIconData);
// Size of this structure, in bytes.
// Размер структуры, должен быть sizeof(NOTIFYICONDATA).
uID := 80;
// уникальный идентификатор иконки. Идентификатор
// должен быть уникален в пределах окна - обрабо-
// тчика, передаваемого в hWnd.
Wnd := Handle;
// дескриптор окна, которое будет получать события
// мыши над иконкой.
szTip := "Текст"+#0;
// Текст для ToolTip"а

hIcon := Application.Icon.Handle;
// дескриптор иконки, помещаемой на Tray.
uCallBackMessage := WM_MYTRAYNOTIFY;
// сообщение, передаваемое окну - обработчику при
// событиях мыши. Желательно получать номер
// сообщения вызовом RegisterWindowMessage(),
// но допускаются и значения WM_USER+N, где N > 0.

END;
IF Shell_NotifyIcon(NIM_ADD,@NID) THEN
Form1.Hide;
end;

//Процедура Обработки сообщения мыши
procedure TForm1.WndProc(var M: TMessage);
var
CursorPos : TPoint;
begin
IF M.Msg = WM_USER+10 THEN
CASE M.LParam OF // содержит стандартное событие мыши, такое
// как WM_LBUTTONDBLCLK.
WM_RBUTTONUP : begin
GetCursorPos(CursorPos);
PopupMenu1.Popup(CursorPos.X, CursorPos.Y);
end;

WM_LBUTTONDBLCLK : begin //Двойной клик
Form1.Show; //Показать форму
Shell_NotifyIcon(NIM_DELETE,@NID) //Удалить иконку
end;
END;
INHERITED WndProc(M);

end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := TimeToStr(time - StartTime);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StartTime := Time;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
IF Shell_NotifyIcon(NIM_DELETE,@NID) THEN;
close;
end;

procedure TForm1.N1Click(Sender: TObject);
begin
Form1.Show; //Показать форму
Shell_NotifyIcon(NIM_DELETE,@NID) //Удалить иконку
end;



У меня все работает


 
stone ©   (2003-01-24 10:41) [2]

Может вот так будет сворачиваться правильно
ShowWindow(Form1.Handle, SW_HIDE);


 
Wowa-K ©   (2003-01-24 10:41) [3]

implementation
uses
ShellAPI;
Const
WM_MYTRAYNOTIFY = WM_USER + 10;
var
NID :TNotifyIconData;
//Contains information that the system needs to process taskbar status area messages.
StartTime : TTime;
// Time
{$R *.dfm}
//Процедура сворачивания приложения в SysTray
procedure TForm1.Button1Click(Sender: TObject);
begin
WITH NID DO
BEGIN
uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
// битовое поле, определяющее какое из следующих
// полей несет действительную информацию.
// Может быть одним из следующих значений: NIF_ICON,
// NIF_MESSAGE, NIF_TIP или их OR-комбинацией.
cbSize := SizeOf(NotifyIconData);
// Size of this structure, in bytes.
// Размер структуры, должен быть sizeof(NOTIFYICONDATA).
uID := 80;
// уникальный идентификатор иконки. Идентификатор
// должен быть уникален в пределах окна - обрабо-
// тчика, передаваемого в hWnd.
Wnd := Handle;
// дескриптор окна, которое будет получать события
// мыши над иконкой.
szTip := "Текст"+#0;
// Текст для ToolTip"а

hIcon := Application.Icon.Handle;
// дескриптор иконки, помещаемой на Tray.
uCallBackMessage := WM_MYTRAYNOTIFY;
// сообщение, передаваемое окну - обработчику при
// событиях мыши. Желательно получать номер
// сообщения вызовом RegisterWindowMessage(),
// но допускаются и значения WM_USER+N, где N > 0.

END;
IF Shell_NotifyIcon(NIM_ADD,@NID) THEN
Form1.Hide;
end;

//Процедура Обработки сообщения мыши
procedure TForm1.WndProc(var M: TMessage);
var
CursorPos : TPoint;
begin
IF M.Msg = WM_USER+10 THEN
CASE M.LParam OF // содержит стандартное событие мыши, такое
// как WM_LBUTTONDBLCLK.
WM_RBUTTONUP : begin
GetCursorPos(CursorPos);
PopupMenu1.Popup(CursorPos.X, CursorPos.Y);
end;

WM_LBUTTONDBLCLK : begin //Двойной клик
Form1.Show; //Показать форму
Shell_NotifyIcon(NIM_DELETE,@NID) //Удалить иконку
end;
END;
INHERITED WndProc(M);

end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := TimeToStr(time - StartTime);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StartTime := Time;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
IF Shell_NotifyIcon(NIM_DELETE,@NID) THEN;
close;
end;

procedure TForm1.N1Click(Sender: TObject);
begin
Form1.Show; //Показать форму
Shell_NotifyIcon(NIM_DELETE,@NID) //Удалить иконку
end;



У меня все работает


 
Smithson ©   (2003-01-24 10:45) [4]

Это я понял, спасибо. Вопрос немного в другом. Я пытаюсь сворачивать по команде минимизации - ставлю обработчик Application.OnMinimize. Все сворачивается.
А вот при востановлении, если не делать Application.Restore, то Form1.Show показывает приложение в минимизированном виде, а если делать - то следующая команда на минимизацию не срабатывает (обработчик не вызывается).


 
Smithson ©   (2003-01-24 11:00) [5]

Победил, кстати. Form1.WindowsState := wsNormal;



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

Текущий архив: 2003.02.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-4834
diks
2003-01-24 13:34
2003.02.03
Окно


3-4705
Moe
2003-01-15 11:21
2003.02.03
Помогите подключить Аксессовскую базу


8-5072
Е.М. Саша
2002-10-18 22:50
2003.02.03
Компонент для проигрывания MIDI


4-5339
LongIsland
2002-12-20 17:29
2003.02.03
GetClipboardData(CF_TEXT);


14-5245
Axis_of_Evil
2003-01-16 15:55
2003.02.03
Delphi и сайты