Главная страница
    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.47 MB
Время: 0.009 c
1-4968
Mihey
2003-01-27 00:48
2003.02.03
Совместимость версий и чтение из файла.


4-5347
KPV-10k
2002-12-16 21:06
2003.02.03
Скрыть АПИ ф-ции используемые прогой от внешнего просмотра...


4-5327
a-leksey
2002-12-18 14:36
2003.02.03
Запаковать 3х байтный цвет в 2х. (24милиона ц. в 16милн.)


1-4984
AlexG
2003-01-23 14:23
2003.02.03
Массив в Ресурс


1-4866
Dor
2003-01-24 19:24
2003.02.03
Panel1.caption := сколько времени я нахожусь в инете???





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