Форум программистов, компьютерный форум, киберфорум
Delphi: FireMonkey
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
1

OnMessage формы FMX

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

Author24 — интернет-сервис помощи студентам
Добрый день форумчане!

Есть форма.
Есть поток.
Из потока по его завершению оставляю в очереди сообщений
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2017, 16:28
Ответы с готовыми решениями:

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

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

Авторизация в FMX
Здраствуйте. есть хещ на VCL. Если я использую этот хещ на Fmx. то ответ вообще другой. например...

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

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

Прикрепляю исходники
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
13.08.2017, 10:06 4
мда.
специально для вас начал писать блог
https://www.cyberforum.ru/blog... g4873.html
https://www.cyberforum.ru/blog... g4874.html
никаких игр с посылкой сообщений не требуется
у вас в потоке по сути атомарная операция
старт. выполнение одной функции. финиш.
зачем перед финишем пытаться что-то делать, если это можно сделать после без всяких сообщений и прочей фигни
так что вот еще один текст
https://www.cyberforum.ru/blog... g4875.html
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
13.08.2017, 12:11 5
OnTerminate ни разу не аналогичен OnResponse, который ты определил.
А наличие Synchronize делает бессмысленным использование потоков.
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 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
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
13.08.2017, 17:47 7
и главное. судя по uses, delphi свежая, а там есть встроенный THttpClient
и вся возня с indy и SSL dll не нужна
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
13.08.2017, 17:49  [ТС] 8
Цитата Сообщение от krapotkin Посмотреть сообщение
и главное. судя по uses, delphi свежая, а там есть встроенный THttpClient
и вся возня с indy и SSL dll не нужна
Честно говоря даже и не знал, стоит попробовать...
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
15.08.2017, 14:45  [ТС] 9
Цитата Сообщение от krapotkin Посмотреть сообщение
и главное. судя по uses, delphi свежая, а там есть встроенный THttpClient
и вся возня с indy и SSL dll не нужна
Добрый день!
А на что опирается THttpClient ? Наверное есть какие то зависимости? (сторонние)
Допустим в Indy нужен libssl32.dll для работы по https

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

Рассчитываю на непринужденный ответ...
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
15.08.2017, 15:44 10
будет работать
0
15.08.2017, 15:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2017, 15:44
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru