Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 задержать событие OnActivate  [new]
Pcrepair
Member

Откуда:
Сообщений: 667
Добрый день. есть событие OnActivate для основной формы
перед OnActivate в OnCreate запускается проверка с временем от 1 до 20 сек

Вопрос: есть ли простой способ задержать OnActivate до получения результатов проверки?
таймер на другой форме не предлагать
11 июл 18, 18:30    [21563739]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3854
Pcrepair,

есть -- не вызывать в своем коде Application.ProcessMessages (которая и начинает обрабатывать дальше события формы).
11 июл 18, 18:35    [21563752]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29238

сакральный вопрос: нахрена?

Posted via ActualForum NNTP Server 1.5

11 июл 18, 18:39    [21563764]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Pcrepair
Member

Откуда:
Сообщений: 667
не вызывать в своем коде Application.ProcessMessages (которая и начинает обрабатывать дальше события формы).


не вызывать? так ничего и не вызываеся, события сами идут друг за дружкой при запуске приложения. вначале криеейт потом шоу потом активейт, все как в букваре
11 июл 18, 20:01    [21563898]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Barlone
Member

Откуда:
Сообщений: 1003
Pcrepair
не вызывать в своем коде Application.ProcessMessages (которая и начинает обрабатывать дальше события формы).


не вызывать? так ничего и не вызываеся, события сами идут друг за дружкой при запуске приложения. вначале криеейт потом шоу потом активейт, все как в букваре
Так если не вызывается, то как оно попадет в OnActivate до возврата из OnCreate?
11 июл 18, 20:05    [21563909]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
defecator
Member

Откуда:
Сообщений: 38843
Мимопроходящий
сакральный вопрос: нахрена?

ТС хочет сплэш замутить
11 июл 18, 20:10    [21563918]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3854
Barlone
Pcrepair
пропущено...


не вызывать? так ничего и не вызываеся, события сами идут друг за дружкой при запуске приложения. вначале криеейт потом шоу потом активейт, все как в букваре
Так если не вызывается, то как оно попадет в OnActivate до возврата из OnCreate?

Попадет, если в OnCreate вызывается ProcessMessages или любой другой асинхронный код, например, используются интернет-компоненты для запроса к сайту на проверку новой версии.
11 июл 18, 20:29    [21563962]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3618
JaDi
интернет-компоненты
Да, они виноваты всегда. И вообще интернет.
11 июл 18, 20:45    [21563990]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Pcrepair
Member

Откуда:
Сообщений: 667
так Я не понял, есть простой способ(встроенный в основную форму) или нет?
11 июл 18, 20:51    [21564005]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
defecator
Member

Откуда:
Сообщений: 38843
Pcrepair
так Я не понял, есть простой способ(встроенный в основную форму) или нет?

архитектурное решение на помойку
11 июл 18, 21:03    [21564025]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3854
Pcrepair
так Я не понял, есть простой способ(встроенный в основную форму) или нет?

На дочерней форме в OnActivate слать свое кастомное сообщение PostMessage на главную форму. На главной же форме это сообщение ловить и реагировать (либо сразу, либо менять флаг, который будет ждать тот же код на OnCreate или где там надо). Вообще, лучше более детально описать задачу, как она сделана сейчас и что не получается.
11 июл 18, 21:18    [21564048]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Pcrepair
Member

Откуда:
Сообщений: 667
Добрый день. есть событие OnActivate для формы при запуске приложения
перед OnActivate, в OnCreate, вызывается функция(асинхронная) проверки чего то с временем от 1 до 20 сек

Вопрос: есть ли простой способ(какие то методы формы) задержать OnActivate до получения результатов проверки?
таймер на другой форме не предлагать
11 июл 18, 21:22    [21564055]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
alekcvp
Member

Откуда:
Сообщений: 1141
Pcrepair,

Application.ShowMainForm := False;

и не показывать её до завершения этого события.
11 июл 18, 21:32    [21564080]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1161
Например вызвать асинхронную функцию синхронно.

А вообще эту проверку надо делать до вызова конструктора формы и результат уже передать туда.
11 июл 18, 21:34    [21564084]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3854
Pcrepair,

это НЕ таймер...

1. На форме делается флаг IsFormCreated...
2. На OnCreate он выставляется в False, запускается долгая асинхронная операция, после которой флаг выставляется в True;
3. На OnActivate ставится код с бесконечным циклом while true, который ожидает готовность формы по флагу (см выше), а если не готова, то небольшой sleep и вызов Application.ProcessMessages;

Всё.
11 июл 18, 21:39    [21564091]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46121

Pcrepair
есть событие OnActivate для формы при запуске приложения

Запомните, дети: никогда, ни при каких условиях не используйте OnActivate для разовых
действий.

Posted via ActualForum NNTP Server 1.5

11 июл 18, 22:03    [21564129]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
DimaBr
Member

Откуда:
Сообщений: 10748
То же самое с таймером
1. В OnActivate запускается таймер
2. В OnTimer останавливается, проверяется некий флаг готовности
3а. Если ещё флаг не готов - таймер запускается снова
3б. Если флаг готов, таймер не запускается, а выполняются действия дальше
11 июл 18, 22:17    [21564162]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
SoulStream
Guest
Dimitry Sibiryakov
Запомните, дети: никогда, ни при каких условиях не используйте OnActivate для разовых действий.

Совершенно согласен, но...
Мне показалось что здесь не этот случай. Разовое действие у него как раз в OnCreate, он просто хочет синхронную проверку, а доступна только асинхронная.
Вам надо делать из асинхронной синхронную. Всё иное - костыли от лукавого.
11 июл 18, 22:27    [21564189]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10598
Dimitry Sibiryakov
Запомните, дети: никогда, ни при каких условиях не используйте OnActivate для разовых действий.
procedure TForm1.FormActivate(Sender: TObject);
begin
  TForm(Sender).OnActivate := nil;
end;
11 июл 18, 22:49    [21564255]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
SoulStream
Guest
Да, это вполне сработает. Но выглядит как костыль. С:
11 июл 18, 23:04    [21564304]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
AX-Class
Member

Откуда:
Сообщений: 127
Pcrepair,
А что надо сделать на языке юзера?
Приложение стартует. Главную форму нельзя показывать до проверки? Или надо показать неактивной? А мышкой активировать можно во время проверки?
11 июл 18, 23:16    [21564337]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Pcrepair
Member

Откуда:
Сообщений: 667
AX-Class
Pcrepair,
А что надо сделать на языке юзера?
Приложение стартует. Главную форму нельзя показывать до проверки? Или надо показать неактивной? А мышкой активировать можно во время проверки?


можно, все можно и мышку и форму

сделал так :
- oncreate : вызов потока в котором асинхронный процесс, запуск таймера который ждет ДА из процесса
- таймер : когда ДА -> запуск процедуры(бывшего onactivate, хотя... можно присвоить не formactivate а что то ненужное а в таймере написать tmain.formactivate(self); и вызвать но это немного криво)

все работает.
11 июл 18, 23:43    [21564442]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
AX-Class
Member

Откуда:
Сообщений: 127
Pcrepair,

Вы откроете для себя большие возможности, если будете программировать не заполнением ивентов компонентов, а функциями.
12 июл 18, 00:24    [21564556]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
под ван
Guest
AX-Class
Pcrepair,

Вы откроете для себя большие возможности, если будете программировать не заполнением ивентов компонентов, а функциями.

Будь так добр - покажи на данном конкретном примере, что значит "программировать не заполнением ивентов компонентов, а функциями", а то даже я не понял, о чём ты.
12 июл 18, 05:06    [21564654]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
AX-Class
Member

Откуда:
Сообщений: 127
под ван,

Не хочу.
Что тут показывать? Код зависит о флага. Флаг меняется асинхронно. А ТС какие-то ивенты мучил, пока не дошло.
12 июл 18, 06:10    [21564675]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить