Отображение статуса и ProcessMessage

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Отображение статуса и ProcessMessage

Сообщение zub » 26.09.2018 07:19:21

>>DevExpress любит баловатся фоновыми задачами, AlphaControls так рисует копки, в том числе и progresbar.
да че там, давай вместо begin\end будем юзать beginThread\endThread

>>главного майнлупа не хватает
не матерись, нельзя на этом форуме.

>>я в свое время ушел от блокировки окон.
>>...
>>Если будет много окон, то обмен данными между ними - уже перерастает в межпроцессорное сообщение.
Вот она вся суть "умного" фанатика.
Ушел за попкорном. пеши есчо
>>Поэтому стал работать с PageControl.
И так быстро слился(( фу
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Отображение статуса и ProcessMessage

Сообщение wadman » 26.09.2018 09:38:09

olegy123 писал(а):посмотрите исходники таймера, там сидит TThread.

Это где такое? В windows используется встроенный в ОС механизм через SetTimer.
Alex2013 писал(а):То что делается с помощью явных потоков часто просто РУЧНОЕ УПРАВЛЕНИЕ тем, что ОС (и отчасти внутренний "движок" LCL) стараются делать автоматически.

Вам нужно поучиться программировать под мобильные платформы, где уже много лет в гайдлайнах рекомендуют (а кое-где насильно закрывают приложение на уровне ОС, которое нарушает рекомендации) выделять все длительные операции в отдельные потоки, чтобы интерфейс не морозился.
Тут же советчики и вовсе настаивают, что это правильное решение, а ТС вообще хочет заблокировать все окна, вместо внятного окошка, которое сообщает о деятельности приложения и не позволяет работать с документом, который обрабатывается.

Если уж совсем хочется без блокировок (приложения или модальным окном), то стоит позаботиться о пуле с блокировками, к которому окна обращаются, чтобы узнать о статусе документа.
Поток начал работать с документом, сообщил об этом. Поток закончил работать, убрал из пула запись о блокировке, броадкастом оповестил все окна.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: Отображение статуса и ProcessMessage

Сообщение tria » 26.09.2018 11:49:12

zub писал(а):>>Каким образом предлагаете блокировать интерфейс (произвольное кол-во окон)?
Гуй ведь у вас на экшенах? если нет - переделать
Менюшки, тулбары, кнопки - штатными средствами экшенов. их можно разрешать-запрещать по ситуации в колбеке. Что там еще - смотреть по ситуации


Такая переделка - это месяца на 3 работы с непредсказуемым результатом :).
Да и не поможет - есть еще и другие события - закрытие окна, реакции на клавиатуру/мышь. На мой взгляд - решение только для простого приложения.

Добавлено спустя 2 минуты 55 секунд:
Код: Выделить всё
if Screen.FormCount >0 then for I:=0 to Screen.FormCount-1 do
if Screen.Forms[i]<> Self then Screen.Forms[i].Close;


Отдельное спасибо. В разы меньше гемора, чем рекурсивно перебирать компоненты главного и т.д. окон.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Отображение статуса и ProcessMessage

Сообщение zub » 26.09.2018 11:57:47

Результат предсказуем = нормальный гуй. Клавиатура и мышь штатно вписывается в экшены. Вы преукрашиваете ситуацию
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Отображение статуса и ProcessMessage

Сообщение tria » 26.09.2018 12:01:00

zub писал(а):Результат предсказуем = нормальный гуй. Клавиатура и мышь штатно вписывается в экшены. Вы преукрашиваете ситуацию

Есть компоненты, в которые заложена штатная реакция на клавиатуру. И вы предлагаете все это перехватывать экшинами?
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Отображение статуса и ProcessMessage унитаз или унитаз

Сообщение zub » 26.09.2018 12:09:19

Я имел ввиду хоткеи экшенов. Компоненты надо смотреть конкретно в каждом случае.
Тут у вас выбор - стандартный лцл механизм или костылики
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Отображение статуса и ProcessMessage

Сообщение olegy123 » 26.09.2018 13:43:52

wadman писал(а):Это где такое? В windows используется встроенный в ОС механизм через SetTimer.
не путайте, ваш виндовский SetTimer должен еще засинхронизироватся с главным потоком.

tria писал(а):Отдельное спасибо. В разы меньше гемора, чем рекурсивно перебирать компоненты главного и т.д. окон.
Спасибо Microsoftу за наше счастливое детство..
Сейчас смотрю на подделку таких же спецов, которые накатывали приложение с модальными окошками с заботливо указанием пользователям "подождите, ресурс занят, если ждете долго то позвоните в ИТ отдел", так вот под Wine оно ведет себя по разному не всегда модальное окно модальное.

Добавлено спустя 4 минуты 54 секунды:
tria писал(а):Есть компоненты, в которые заложена штатная реакция на клавиатуру. И вы предлагаете все это перехватывать экшинами?
в системе винды вся работа строится на сообщениях в оконо. Можно перехватывать команды нажатия клавиш и в зависимости от состояния либо их дальше спускать на контролы либо обрабатывать самостоятельно, а контолом нулы давать.

Добавлено спустя 20 минут 30 секунд:
zub писал(а):>>Поэтому стал работать с PageControl.
И так быстро слился(( фу
вся логика строится на Tframe и размещении их на PageControl. PageControl не простой а с кнопочками с иконками, даже есть PopupMenu. Сам рисовал канву. :P
Все Tframe имеют базовый класс Tframe_table и Tframe_form.
В итоге чтобы подключить номенклатуру - мне нужно указать какую таблицу нужно загрузить. Все все остальное делается предками. 1Ска.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Отображение статуса и ProcessMessage

Сообщение wadman » 26.09.2018 14:44:23

olegy123 писал(а):аш виндовский SetTimer должен еще засинхронизироватся с главным потоком.

Что тут можно спутать? Приходит сообщение WM_TIMER дополнительному невидимому окну.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: Отображение статуса и ProcessMessage

Сообщение zub » 26.09.2018 18:19:24

>>Сам рисовал канву.
Надеюсь в отдельном потоке))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Отображение статуса и ProcessMessage

Сообщение olegy123 » 27.09.2018 12:50:15

Да, приходилось даже не TThread а более низкоуровневый BeginThread баловаться. Но больше всего с БД, данные грузились в фоне.
Когда форму открываешь, не ждешь когда все загрузятся данные, сразу начинаешь работать. Данные подгружаются по мере закачки. Как в футуристических фильмах.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013, Yandex [Bot] и гости: 35

Рейтинг@Mail.ru