Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.011 c
3-4790
MsGuns
2003-01-16 19:01
2003.02.03
UPDATE INTO TABLE VALUES.. Добавить более одной строки


3-4713
ledzzz
2003-01-17 17:53
2003.02.03
штрихкод


8-5071
hedgehoge
2002-10-19 10:25
2003.02.03
ListVeiw - задний фон


14-5242
Igit
2003-01-14 21:13
2003.02.03
Номенклатура вирусов


3-4753
b_baranov
2003-01-16 01:34
2003.02.03
трудности в написании SQL запроса





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