Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> потеря активности, проследить 
V
    Опции темы
Siv
Дата 4.5.2006, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 4.10.2003
Где: zp.ua

Репутация: нет
Всего: нет



Как проследить, когда текущее приложение перестает быть активным? пробовал через Application.active, с применением таймера, но думаю не хорошо в программах использовать постоянно тикающий таймер, отслеживающий каждые пару секунд состояние активности... что думаете? 
PM MAIL WWW ICQ   Вверх
Yanis
Дата 4.5.2006, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Способ из drkb:
Код
type 
   //... 
  private 
    { Private declarations } 
    procedure WMNCACTIVATE(var M: TWMNCACTIVATE); message WM_NCACTIVATE; 
  end; 

implementation 

//... 

procedure TForm1.WMNCACTIVATE(var M: TWMNCACTIVATE); 
begin 
  inherited; 
  if M.Active then 
    caption:='Form active' 
  else caption:='Form not active' ; 
end;


Yanis method smile
Цитата
The WM_ACTIVATE message is sent when a window is being activated or deactivated. This message is sent first to the window procedure of the top-level window being deactivated; it is then sent to the window procedure of the top-level window being activated. 

Соответсвенно, полагаю, что можно так:
Код

{ ... }

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
  private
    { Private declarations }
    procedure CatchActivate(var M: TMessage); message WM_ACTIVATE;
  public
    { Public declarations }
  end;

{ ... }

procedure TForm1.CatchActivate(var M: TMessage);
begin
  Inherited;
  if (M.WParamLo = WA_CLICKACTIVE) or (M.WParamLo = WA_ACTIVE) then
    Caption := 'Actived'
  else
    Caption := 'Non actived';

  M.Result := 0;
end;

{ ... }
  

Это сообщение отредактировал(а) Yanis - 4.5.2006, 01:49


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 4.5.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



А если тебе надо узнать является ли твое приложение (не одна форма) активным, то пробегай циклом по всем формам приложения и смотри, являются ли они ативными
Код

var i:word;
begin
for i:=0 to application.ComponentCount-1
do
if (application.Components[i] is tform) then
if not (application.Components[i] as tform).Active then
showmessage('Приложение не ативно');
end;

Этот код прописываешь в процедуре, которую тебе дал Yanis


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Guedda
Дата 4.5.2006, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Юзай события Form1.OnActivate, и, соответственно, Form1.OnDeactivate; 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
evilbllodydemon
Дата 4.5.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.4.2006
Где: Кисловодск

Репутация: 4
Всего: 4



А Application.OnDeactivate и Application.OnActivate чем не хороши?? 
PM MAIL WWW ICQ   Вверх
Yanis
Дата 4.5.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(evilbllodydemon @  4.5.2006,  09:08 Найти цитируемый пост)
А Application.OnDeactivate и Application.OnActivate чем не хороши?? 

Эти два события меня вполне устраивают, но дело как раз в том, что их два. А при отлове сообщений всего одна. Для меня так удобнее. Хотя для бонального showmessage при активации/деактивации формы можно и 2 процедурами пользоваться. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Akella
Дата 4.5.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



есть ведь компонента ApplicationEvents
а у неё есть и собитие OnIdle, есть также события
OnActivate и OnDeactivate 
PM MAIL   Вверх
Siv
Дата 5.5.2006, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 4.10.2003
Где: zp.ua

Репутация: нет
Всего: нет



ужо внедрил, всем спасибо 
PM MAIL WWW ICQ   Вверх
Yanis
Дата 6.5.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Guedda @  4.5.2006,  07:50 Найти цитируемый пост)
Юзай события Form1.OnActivate, и, соответственно, Form1.OnDeactivate; 

Цитата(evilbllodydemon @  4.5.2006,  09:08 Найти цитируемый пост)
А Application.OnDeactivate и Application.OnActivate чем не хороши??  

Цитата(Akella @  4.5.2006,  10:52 Найти цитируемый пост)
OnActivate и OnDeactivate  

Создайте две формы. Напишите обработчики события активации/деактивации, например такие:
Код

procedure TForm1.FormActivate(Sender: TObject);
// и
// procedure TForm2.FormActivate(Sender: TObject);
begin
  Caption := 'Активна';
end;

procedure TForm1.FormDeactivate(Sender: TObject);
// и
// procedure TForm2.FormDeactivate(Sender: TObject);
begin
  Caption := 'Неактивна';
end;

Запустите программу и покажите вторую форму не модально. Вы заметите, что при потере активности обоих форм событие не отлавливаетсяВ предложеном мной варианте такого "глюка" не наблюдается smile 

Это сообщение отредактировал(а) Yanis - 6.5.2006, 16:55


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.