Форум: "Основная";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
ВнизМинимизация в трей. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c