![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Минимизация в трей.
Smithson © (2003-01-24 10:29:00)Имею некое недопонимание.
При минимизации приложения (Application.OnMinimize) делаю Form1.Hide. По команде из popup menu делаю Application.Restore; Form1.Show. После этого приложение сворачиваться перестает. Что не так?
Smithson (2003-01-24 11:00:00) [1]Победил, кстати.
Form1.WindowsState := wsNormal;
Smithson (2003-01-24 10:45:00) [2]Это я понял, спасибо. Вопрос немного в другом. Я пытаюсь сворачивать по команде минимизации - ставлю обработчик Application.OnMinimize. Все сворачивается.
А вот при востановлении, если не делать Application.Restore, то Form1.Show показывает приложение в минимизированном виде, а если делать - то следующая команда на минимизацию не срабатывает (обработчик не вызывается).
Wowa-K (2003-01-24 10:41:00) [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;
У меня все работает
stone (2003-01-24 10:41:00) [4]Может вот так будет сворачиваться правильно
ShowWindow(Form1.Handle, SW_HIDE);
Wowa-K (2003-01-24 10:41:00) [5]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;
У меня все работает