Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 задержать событие 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]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
под ван
Guest
AX-Class
под ван,

Не хочу.
Что тут показывать? Код зависит о флага. Флаг меняется асинхронно. А ТС какие-то ивенты мучил, пока не дошло.

Ладно не заводись, не умеешь так не умеешь - я тоже не умею, поэтому и спросил.
12 июл 18, 08:38    [21564767]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10598
Pcrepair
- oncreate : вызов потока в котором асинхронный процесс, запуск таймера который ждет ДА из процесса
- таймер : когда ДА -> запуск процедуры(бывшего onactivate, хотя... можно присвоить не formactivate а что то ненужное а в таймере написать tmain.formactivate(self); и вызвать но это немного криво)
Если нужно ждать завершения потока, то зачем здесь поток? Если ждать не нужно, а нужно получить уведомление о завершении потока, то зачем здесь таймер?
12 июл 18, 11:00    [21565246]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3618
_Vasilisk_
Pcrepair
- oncreate : вызов потока в котором асинхронный процесс, запуск таймера который ждет ДА из процесса
- таймер : когда ДА -> запуск процедуры(бывшего onactivate, хотя... можно присвоить не formactivate а что то ненужное а в таймере написать tmain.formactivate(self); и вызвать но это немного криво)
Если нужно ждать завершения потока, то зачем здесь поток? Если ждать не нужно, а нужно получить уведомление о завершении потока, то зачем здесь таймер?
Уже спрашивали, ответа не было.
И уже советовали просто выполнить этот "процесс" перед созданием формы (или в OnCreate) без бессмысленных потоков и таймеров.
Но так не интересно.
12 июл 18, 11:49    [21565551]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Pcrepair
Member

Откуда:
Сообщений: 667
YuRock
_Vasilisk_
пропущено...
Если нужно ждать завершения потока, то зачем здесь поток? Если ждать не нужно, а нужно получить уведомление о завершении потока, то зачем здесь таймер?
Уже спрашивали, ответа не было.
И уже советовали просто выполнить этот "процесс" перед созданием формы (или в OnCreate) без бессмысленных потоков и таймеров.
Но так не интересно.


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

а ответа так и нет
12 июл 18, 16:27    [21566503]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Dimitry Sibiryakov
Member

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

Pcrepair
а ответа так и нет

Это потому что, что на дебильные вопросы на публичном форуме лучше не отвечать:
гуглопрограммисты растащат ответ по своим говноподелиям, а потом престиж профессии падает
и Греф борется. А так способ, конечно, есть, но ни один вменяемый человек его применять не
будет.

Posted via ActualForum NNTP Server 1.5

12 июл 18, 16:32    [21566534]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24489
Pcrepair
а ответа так и нет

Потому что это не описание задачи, а описание (не исключено, что кривого) решения и попытка его обрести.

Зачем?
12 июл 18, 16:37    [21566560]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
под ван
Guest
Dimitry Sibiryakov
Pcrepair
а ответа так и нет

Это потому что, что на дебильные вопросы на публичном форуме лучше не отвечать:
гуглопрограммисты растащат ответ по своим говноподелиям, а потом престиж профессии падает
и Греф борется. А так способ, конечно, есть, но ни один вменяемый человек его применять не
будет.

Димон, ну будь проще, и на эти вещи посмотри тоже проще. Тем более исходники самой среды последних версий уже все видели - сам же знаешь, хуже всё равно уже некуда, так что к чему эта ложная скромность и такой демонстративный отказ от костылей? :)

Delphi мёртв - весь мир об этом знает, поэтому самое время изгаляться в конструировании всяких извращений. Причём чем изощрённее - тем круче. Чтобы все видели, что этот труп ещё ого-го! Не время скромничать.
12 июл 18, 16:48    [21566597]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
b0rk
Member

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

Вопрос: есть ли простой способ задержать OnActivate до получения результатов проверки?
таймер на другой форме не предлагать

вызывать проверку из OnActivate вместо OnCreate - такой вариант устроит?
12 июл 18, 16:54    [21566626]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10598
Pcrepair
есть ли простой способ задержать OnActivate до получения результатов проверки?
Я вам открою секрет - все задерживается само
procedure Check;
begin
  Sleep(30000);
  ShowMessage('Проверка завершена. Результат положительный');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('Ахтунг!. Сейчас будет проверка!!!');
  Check;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  ShowMessage('Activate!!!!');
end;
12 июл 18, 17:10    [21566695]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Мимопроходящий
Member

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

12.07.2018 17:10, _Vasilisk_ пишет:
> Я вам открою секрет

ты сломал стройную картину мирозданья

Posted via ActualForum NNTP Server 1.5

12 июл 18, 17:40    [21566814]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
зонд
Guest
_Vasilisk_
все задерживается само
Не, он же ясно написал - его "Check" асинхронный (какая-нибудь чужая/библиотечная функция).

Pcrepair
а ответа так и нет
Как нет? Два раза вам уже повторили:
X-Cite
вызвать асинхронную функцию синхронно
SoulStream
надо делать из асинхронной синхронную
Что там за функция у вас и как именно становится понятно что она завершилась?
13 июл 18, 00:09    [21567519]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
зонд
Guest
Pcrepair
перед OnActivate в OnCreate запускается проверка с временем от 1 до 20 сек
Не "перед OnActivate", а просто "в OnCreate". Ещё не факт что после OnCreate вообще будет хоть один OnActivate.
Так же как не факт что OnActivate будет сразу после OnCreate - может и через час, и через сутки. А ещё вы в курсе что OnActivate может вызываться два раза, десять раз, тыщу раз?

И вообще - а нафига вам вообще проверки в OnCreate? Что за проверка-то?
Ну вот внутри OnCreate проверка вышла отрицательная - и чего теперь? Делайте проверку вообще до OnCreate.
13 июл 18, 00:21    [21567538]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
чччД__
Guest
Ути-пути.
13 июл 18, 00:23    [21567543]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
b0rk
Member

Откуда: Харьков
Сообщений: 569
зонд
А ещё вы в курсе что OnActivate может вызываться два раза, десять раз, тыщу раз?

если вы не можете сделать так, чтобы проверка вызывалась только при первом вызове OnActivate, то может не стоит заниматься программированием?
13 июл 18, 09:29    [21567875]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Мимопроходящий
Member

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

а исчо, OnActivate может вызываться у формы которая ещё даже НЕ ОТРИСОВАЛАСЬ...

Posted via ActualForum NNTP Server 1.5

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

Откуда: Украина, Харьков
Сообщений: 10598
зонд
Не, он же ясно написал - его "Check" асинхронный (какая-нибудь чужая/библиотечная функция).
Он ясно написал
Pcrepair
сделал так :
- oncreate : вызов потока в котором асинхронный процесс,
Т.е. поток стартует он сам. Вот все и интересуются - нафига? ТС молчит
13 июл 18, 12:46    [21568518]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Dimitry Sibiryakov
Member

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

b0rk
если вы не можете сделать так, чтобы проверка вызывалась только при первом вызове
OnActivate, то может не стоит заниматься программированием?

Программированием точно не стоит заниматься человеку, не умеющему выбрать правильную точку
для действия и пихающему код куда попало, включая OnActivate. Даже если он успешно борется
с разложенными собой же граблями.

Posted via ActualForum NNTP Server 1.5

13 июл 18, 12:57    [21568572]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
зонд
Guest
b0rk
если вы не можете сделать так, чтобы проверка вызывалась только при первом
Не очень ясно, это вы ТС или мне?
Вариант "как сделать" банален и его уже даже показывали, только это совсем костыль. Может одноразовую проверку вообще в OnMouseMove запихнём, а потом будем героически решать проблему "чтоб делалось только при первом"?
Для вызова одноразовой проверки надо использовать адекватное событие. Есть сильное подозрение что ТС делает проверку не в том месте где ей место.

_Vasilisk_
Он ясно написал
А вот я не увидел намёка на какой-либо именно "свой поток". Мне кажется он просто так в терминах путается.
Вангую что у него вызов чужого кода. Что-то типа PostMessage() или PlaySound(SND_ASYNC), и он просто без понятия как оно внутри устроено.
13 июл 18, 13:31    [21568788]     Ответить | Цитировать Сообщить модератору
 Re: задержать событие OnActivate  [new]
Pcrepair
Member

Откуда:
Сообщений: 667
да все уже давно сделано и работает как предназначено. вопрос чиста тиоритцский. может все в форме уже предусмотрено а Я просто не знаю. такое довольно часто бывает.
13 июл 18, 22:33    [21570045]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить