Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 14:46   #1
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию Сворачивание формы при неактивности

Имеется форма, а также компоненты TrayIcon и ApplicationEvents.

С помощью ApplicationEvents я сделал так, чтобы при неактивности формы она скрывалась:

Код:
procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
  Form1.Visible:=False;
end;
А с помощью TrayIcon сделано, чтобы форма скрывалась или появлялась при нажатии на иконку в трее.

Код:
procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
  if Form1.Visible = True then
  begin
    Form1.Visible:=False;
  end
  else
  begin
    Form1.Visible:=True;
    SetForegroundWindow(Form1.Handle);
  end;
end;
Однако при этом получается несуразица: при нажатии на кнопку в трее форма теряет фокус и срабатывает ApplicationEvents1Deactivate, скрывающий форму. После этого уже сработает TrayIcon1Click, но т.к. форма уже скрыта - она вновь появляется.

Даже если изменить событие на TrayIcon1MouseDown, то по-прежнему ничего не изменится (разве что срабатывать будет при нажатии, а не отпускании кнопки мыши).

Как можно решить эту проблему?

Последний раз редактировалось Хамяг; 09.05.2011 в 15:28.
Хамяг вне форума Ответить с цитированием
Старый 09.05.2011, 17:09   #2
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

Всё таки решил задачу, хоть и немного глупо:

Код:
var
  CurCrd: TPoint;

procedure TForm1.TrayIcon1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  CurCrd.X:=X;
  CurCrd.Y:=Y;
end;

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
  if not ((Abs(Mouse.CursorPos.X - CurCrd.X) in [0..16]) and (Abs(Mouse.CursorPos.Y - CurCrd.Y) in [0..16])) then Form1.Visible:=False;
end;
Хамяг вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сворачивание формы приложения Александр Маркелов Помощь студентам 6 22.09.2010 14:06
Сворачивание в трей при закрытии формы xxxsas Общие вопросы C/C++ 0 22.01.2009 08:11
Возможно ли пауза Music XM при сворачивание формы ? Volkogriz Общие вопросы Delphi 3 13.10.2007 15:04
Сворачивание формы. Diogo Общие вопросы Delphi 29 31.08.2007 10:31
Сворачивание формы s-force Общие вопросы Delphi 1 29.08.2007 19:52