Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: FireMonkey
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
popryduhin
19 / 18 / 5
Регистрация: 17.09.2015
Сообщений: 445
Записей в блоге: 6
1

OnMessage формы FMX

12.08.2017, 16:28. Просмотров 538. Ответов 9
Метки нет (Все метки)

Добрый день форумчане!

Есть форма.
Есть поток.
Из потока по его завершению оставляю в очереди сообщений
PostMessage(Cardinal(Handle), ON_RESPONSE_COMPLETE, 0,0);

В vcl есть обработчик OnMessagee в котором можно было обрабатывать сообщения из потоков

В FMX OnMessagee не описан.
Как принять сообщения из потока в FMX?

Добавлено через 11 минут
В потоке реализовал обработчик
procedure OnResponse(Sender: TObject; AResponse : string);

И в главной форме к нему цепляюсь, но по завершению потока и его дальнейшее уничтожение влечет уничтожение все что обрабатываю в этом обработчике

Вот видео
Тыц

Процедура ShowAlert(Post); создает эти алерты динамически,
Если вызвать эту процедуру в обработчике который я описал в своем потоке то как из видео видно что по завершению они уничтожаются.

Поэтому принято решение в обработчике выполнить метод PostMessage(Cardinal(Handle), ON_RESPONSE_COMPLETE, 0,0);
что бы дать сигнал для показа алертов.

Добавлено через 14 минут
Если это как то упростит задачу то мне всего лишь нужно послать сообщение из потока в главную форму, у меня 2 способа для VCL есть, но они не работают в FMX.

Как это сделать?

Добавлено через 1 час 11 минут
В общем, пока отказался от реализации с PostMessage

Delphi
1
2
3
4
5
6
7
8
9
    try
      Response :=  idHttp.Get(request);
     Synchronize(
     procedure
     begin
       GenerateOnResponse(Response);
     end);
    except
    end;
Добавил в потоке в генератор события Synchronize

И алерты не дохнут после загрузки данных... )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2017, 16:28
Ответы с готовыми решениями:

Глюк Формы FMX в среде Delphi 10.1 Berlin Starter Upgrade
Не сворачивается форма при клике по иконке в панели задач. На данный момент...

Ресурсы в FMX
Как можно задать Timag-у картинку из ресурсов.

FMX приложение на XP
Доброго времени суток! После одного из обновлений приложения, мне пользователи...

Try icon FMX
Добрый день! На просторах интернета нашел само-писанный компонент "nTrayIcon"...

DBGrid в FMX
Очень мало инфы про ДБ гриды, как в TGrid или StringGrid изменить шрифт и...

9
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
12.08.2017, 20:43 2
Лучше бы код выложил чем непонятное видео.
Что мешает разобрать результаты работа потока в обработчике OnTerminate?
0
popryduhin
19 / 18 / 5
Регистрация: 17.09.2015
Сообщений: 445
Записей в блоге: 6
13.08.2017, 01:41  [ТС] 3
Цитата Сообщение от FIL Посмотреть сообщение
Лучше бы код выложил чем непонятное видео.
Что мешает разобрать результаты работа потока в обработчике OnTerminate?
Все разрешилось строчками
Delphi
1
2
3
4
Synchronize(
     procedure
     begin
     end);
Дело в том что
OnTerminate
аналогично OnResponse который я определил, вот только если без Synchronize формы уничтожались

Прикрепляю исходники
0
krapotkin
3443 / 3046 / 1051
Регистрация: 14.04.2014
Сообщений: 14,765
Записей в блоге: 15
13.08.2017, 10:06 4
мда.
специально для вас начал писать блог
http://www.cyberforum.ru/blogs/469693/blog4873.html
http://www.cyberforum.ru/blogs/469693/blog4874.html
никаких игр с посылкой сообщений не требуется
у вас в потоке по сути атомарная операция
старт. выполнение одной функции. финиш.
зачем перед финишем пытаться что-то делать, если это можно сделать после без всяких сообщений и прочей фигни
так что вот еще один текст
http://www.cyberforum.ru/blogs/469693/blog4875.html
0
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
13.08.2017, 12:11 5
OnTerminate ни разу не аналогичен OnResponse, который ты определил.
А наличие Synchronize делает бессмысленным использование потоков.
0
popryduhin
19 / 18 / 5
Регистрация: 17.09.2015
Сообщений: 445
Записей в блоге: 6
13.08.2017, 15:34  [ТС] 6
Цитата Сообщение от FIL Посмотреть сообщение
OnTerminate ни разу не аналогичен OnResponse, который ты определил.
А наличие Synchronize делает бессмысленным использование потоков.
Если вы заметили в каком месте я выполняю синхронизацию?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TThreadHttpGet.MethodGet(req: string);
var
 idhttp    : TidHttp;
 ssl       : TIdSSLIOHandlerSocketOpenSSL;
 cm        : TIdCookieManager;
 Response  : string;
begin
  try
    idhttp := TidHttp.Create(nil);
    ssl    := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    cm     := TIdCookieManager.Create(nil);
    idhttp.IOHandler := ssl;
    idhttp.CookieManager := cm;
    idhttp.HandleRedirects := true;
    idhttp.AllowCookies := true;
    idhttp.HTTPOptions := [hoForceEncodeParams];
 
    if fileExists(cookieFileName) then
      IdCookieManagerLoadFile(cm, Request, cookieFileName);
    try
      Response :=  idHttp.Get(request);
     Synchronize(
     procedure
     begin
       GenerateOnResponse(Response);
     end);
    except
    end;
  finally
    idhttp.Free;
    ssl.Free;
    cm.Free;
  end;
end;
О чем это говорит?

Delphi
1
2
3
4
5
6
7
8
9
    try
      Response :=  idHttp.Get(request);
     Synchronize(
     procedure
     begin
       GenerateOnResponse(Response);
     end);
    except
    end;
А о том что GET выполнится без синхронизации, а только GenerateOnResponse(Response).

Но вопрос уже решен. В том виде в каком есть, в FMX нет антифриза.
Пробовал делать GET и при этом начал таскать форму за шапку, форма не зависала.
Но легкое подвесание происходило в момент всплывания алертов.

Планируется что главная форма MainForm будет как окно параметров и оно в основном будет скрыта от глаз.
ну это уже другая история...
0
krapotkin
3443 / 3046 / 1051
Регистрация: 14.04.2014
Сообщений: 14,765
Записей в блоге: 15
13.08.2017, 17:47 7
и главное. судя по uses, delphi свежая, а там есть встроенный THttpClient
и вся возня с indy и SSL dll не нужна
0
popryduhin
19 / 18 / 5
Регистрация: 17.09.2015
Сообщений: 445
Записей в блоге: 6
13.08.2017, 17:49  [ТС] 8
Цитата Сообщение от krapotkin Посмотреть сообщение
и главное. судя по uses, delphi свежая, а там есть встроенный THttpClient
и вся возня с indy и SSL dll не нужна
Честно говоря даже и не знал, стоит попробовать...
0
popryduhin
19 / 18 / 5
Регистрация: 17.09.2015
Сообщений: 445
Записей в блоге: 6
15.08.2017, 14:45  [ТС] 9
Цитата Сообщение от krapotkin Посмотреть сообщение
и главное. судя по uses, delphi свежая, а там есть встроенный THttpClient
и вся возня с indy и SSL dll не нужна
Добрый день!
А на что опирается THttpClient ? Наверное есть какие то зависимости? (сторонние)
Допустим в Indy нужен libssl32.dll для работы по https

На чистой ОС работать будет?

Рассчитываю на непринужденный ответ...
0
krapotkin
3443 / 3046 / 1051
Регистрация: 14.04.2014
Сообщений: 14,765
Записей в блоге: 15
15.08.2017, 15:44 10
будет работать
0
15.08.2017, 15:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2017, 15:44

Обновить форму FMX
Как можно обновить форму ? В потоке выполняется функция. при начале я...

Delphi FMx OneClick
Народ что с изменилось с вызовом процедуры в Delphi FMX В Delphi 7 Было...

Не корректная работа FMX
Решил вынести в отдельную тему.. дело в том что сама форма фмх жутко лагает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru