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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2014, 23:19   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Проверка на активность формы возвращает True после сворачивания

Доброго времени суток!
Не могу понять в чём дело. Если форму свернуть с помощью иконки Свернуть в верхнем правом углу формы, то проверка на активность формы возвращает False. Если форму свернуть кликнут по кнопке на панели задач, то проверка на активность возвращает True.
Помогите, пожалуйста разобраться.

Последний раз редактировалось Shouldercannon; 28.12.2014 в 10:48.
Shouldercannon вне форума Ответить с цитированием
Старый 28.12.2014, 00:06   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
то проверка на активность формы
А по английски?
Цитата:
панели задач
Цитата:
CoolTrayIcon Delphi 7
Так панель задач, или трэй? Есть как бы разница, куда тыкаешь мышью. И зачем пихать на форум для такого вопроса компонент?
WinCoder вне форума Ответить с цитированием
Старый 28.12.2014, 02:20   #3
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Если форму свернуть с помощью иконки Свернуть в верхнем правом углу формы, то проверка на активность формы возвращает False. Если форму свернуть кликнут по кнопке на панели задач, то проверка на активность возвращает True.
Помогите, пожалуйста разобраться.
Вы не тот параметр проверяете.
Нужно проверять не Form.Active, а Application.Active.
При сворачивании кликом по иконке на панели задач форма (внутри приложения) остаётся активной, а вот приложение (внутри ОС) - неактивным...
kropotkina-alice вне форума Ответить с цитированием
Старый 28.12.2014, 10:31   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Так панель задач, или трэй? Есть как бы разница, куда тыкаешь мышью.
Панель задачь.
Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Вы не тот параметр проверяете.
Нужно проверять не Form.Active, а Application.Active.
При сворачивании кликом по иконке на панели задач форма (внутри приложения) остаётся активной, а вот приложение (внутри ОС) - неактивным...
Код:
//----------------------------Форма и вкладка активны---------------------------
  if ((Application.Active) and (LUserID.Caption = IntToStr(UserID))) then
  begin
    sndPlaySound('privatemessage.wav', SND_ASYNC);
  end;
//-----------------------Форма активна, вкладка не активна----------------------
  if ((Application.Active) and not (LUserID.Caption = IntToStr(UserID))) then
  begin
    //
  end;
//--------------------------Форма и вкладка не активны--------------------------
  if not ((Application.Active) and (LUserID.Caption = IntToStr(UserID))) then
  begin
    // Звуковое оповещение
    //sndPlaySound('privatemessage.wav', SND_ASYNC);
  end;
Тоже самое.

У каждой формы есть своя кнопка на панели задач благодаря
Код:
procedure TForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
Теперь нет сторонних компонентов.
Что делаем:
1. Запускаем приложение, нажимаем кнопку Test (у нас есть 3 секунды) и сразу же сворачиваем форму на Панель задачь через кнопку Свернуть в верхнем правом углу формы. В данном случае всё нормально и звук не проигрывается.
2. Запускаем приложение, нажимаем кнопку Test (у нас есть 3 секунды) и сразу же сворачиваем форму на Панель задачь через кнопку формы на Панели задач. В данном случае звук проигрывается говоря о том, что форма активна, но она свёрнута и не показывается.
Вложения
Тип файла: zip Test.zip (327.4 Кб, 8 просмотров)

Последний раз редактировалось Shouldercannon; 28.12.2014 в 11:01.
Shouldercannon вне форума Ответить с цитированием
Старый 28.12.2014, 12:40   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Сделайте проверку вот так и получите удовольствие:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Application.Active then
Application.Title:='Active' else
Application.Title:='Not active';
end;
(Смотрите на название на панели задач)
kropotkina-alice вне форума Ответить с цитированием
Старый 28.12.2014, 14:42   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Не прокатит из-за реализации раздельного сворачивания форм. Главную форму вообще не видно
Код:
type
  TFormPreMain = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure MsgHide(var msg: TMessage); message WM_USER + 1;
  public
    { Public declarations }
  end;

var
  FormPreMain: TFormPreMain;

implementation

uses frm_Main;

{$R *.dfm}

procedure TFormPreMain.MsgHide(var msg: TMessage);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  ShowWindow(Self.Handle, SW_HIDE);
end; 

procedure TFormPreMain.FormCreate(Sender: TObject);
begin
  PostMessage(Self.Handle, WM_USER + 1, 0, 0);
end;
Не добраться до главной формы и проверять состояние Application бесполезно.
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После программного сворачивания окно вручную не разворачивается Ship_1 Общие вопросы Delphi 2 20.11.2014 17:08
eof() Возвращает TRUE IRomanKozlov Общие вопросы C/C++ 11 29.07.2013 01:27
Написать условие, которое возвращает значение true harvey Помощь студентам 1 10.10.2012 20:38
Почему _kbhit возвращает TRUE при отсутствии нажатий? Catharsis Общие вопросы C/C++ 3 01.08.2010 17:40
VB код сворачивания формы в трей, или просто свернуть sqvair Помощь студентам 4 04.01.2008 20:21