powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Модальный позор
25 сообщений из 124, страница 3 из 5
Модальный позор
    #40120300
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
YuRockТекст в окне А отобразится, если сменить текст по событию по нажатии кнопки
модального окна

Это плохой дизайн. Нарушает инкапсуляцию. Окно не должно ничего знать о том
откуда и для чего его вызывают.Зато можно сделать хоть как-то.
...
Рейтинг: 0 / 0
Модальный позор
    #40120303
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
То есть ты практически отказываешься от того, что чуть раньше назвал нормальным - желания писать if ShowModal then {что-нибудь}. Теперь это "что-нибудь" нужно писать в нажатии кнопки.
Не придумывай за меня.
Я не отказываюсь. Одно дело - сделать что-то после ShowModal (не факт, что пользователь вообще должен это что-то видеть), а другое дело - изменить интерфейс одномоментно.
softwarer
Давай теперь предположим, что окно Б - это стандартная функция InputQuery.
Не хочу даже предполагать. Она работает через дельфевый ShowModal, а потому - вообще не работает для меня.
softwarer
YuRock2. Окно A как раз становится доступным.

Ну разве что если это тоже делать в обработчике кнопки.Естественно, окно убивается именно в обработчике кнопки. И главное окно просто становится доступным. Само. Сразу.
softwarer
YuRock3. И не важно, сколько еще будет работать доп. цикл.

А главное - зачем и нахрена он вообще нужен.Это совсем из другой оперы вопрос. Например, ожидать событие из другого потока с выкруткой сообщений.

softwarer
Ради кривой фигни ты так постепенно всё приложение перекособочишь.
Если у тебя в голове не укладывается, что цикл обработки сообщений - это только цикл обработки сообщений, и на него не должно быть навешено прочих костылей типа CheckSynchronize и проверок на ModalResult, и потому не важно, какой из циклов работает в данный момент - то задумайся, где кривизна архитектуры, и вообще в программе, или в чьей-то голове.
...
Рейтинг: 0 / 0
Модальный позор
    #40120363
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Зато можно сделать хоть как-то.

Нафиг такие костыли.

Не нравятся модальные формы - сделай свои, под себя.

Пока же предложения из разряда: "из огня да в полымя".
...
Рейтинг: 0 / 0
Модальный позор
    #40120367
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Не нравятся модальные формы - сделай свои, под себя.
Я так и сделал. Чтобы не использовать костыли.
...
Рейтинг: 0 / 0
Модальный позор
    #40120371
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Ну и хорошо. Зачем только предлагаешь сменить одни костыли на другие?

Если у тебя есть полноценный "фикс" - выкладывай, а смена шила на мыла - контрпродуктивна.
...
Рейтинг: 0 / 0
Модальный позор
    #40120374
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Ну и хорошо. Зачем только предлагаешь сменить одни костыли на другие?
Я не предлагаю сменить одни костыли на другие. Я считаю, что хорошо, если можно использовать костыль там, где стандартными средствами даже через костыль ничего нельзя сделать. Потому, что изначально на костылях.
Изначальный костыль - это запускать доп. цикл обработки сообщений, чтобы крутить проверку
Код: pascal
1.
2.
3.
4.
5.
repeat
  Application.HandleMessage;
  if Application.FTerminate then ModalResult := mrCancel else
    if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;


rgreat
Если у тебя есть полноценный "фикс" - выкладывай, а смена шила на мыла - контрпродуктивна.
Мой фикс - это неиспользование вот этого всего, а использование DialogBoxIndirectParam+EndDialog.
...
Рейтинг: 0 / 0
Модальный позор
    #40120381
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Изначальный костыль - это запускать доп. цикл обработки сообщений, чтобы крутить проверку
Код: pascal
1.
2.
3.
4.
5.
repeat
  Application.HandleMessage;
  if Application.FTerminate then ModalResult := mrCancel else
    if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;


Такой костыль необходим только если вы чрезмерно усложнили приложение.
Так что: либо у вас ModalResult работает как задумано, либо у вас приложение со сложным конвеером(ами) сообщений, благодаря чему вы вынуждены городить костыли как выше или не пользоваться ShowModal вообще.

YuRock
Мой фикс - это неиспользование вот этого всего, а использование DialogBoxIndirectParam+EndDialog.
Имеете полное право. Только это не удобно.
...
Рейтинг: 0 / 0
Модальный позор
    #40120383
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Если у тебя в голове не укладывается

Знаешь, когда у человека в распоряжении остаются лишь такие аргументы - это лучше всего показывает степень его правоты.
...
Рейтинг: 0 / 0
Модальный позор
    #40120386
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Изначальный костыль - это запускать доп. цикл обработки сообщений, чтобы крутить проверку

Именно. Мало того, твои претензии вызваны желанием запускать точно такой же костыль. Хотя и там, и там стоило бы сделать хорошо.
...
Рейтинг: 0 / 0
Модальный позор
    #40120394
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
YuRock
Изначальный костыль - это запускать доп. цикл обработки сообщений, чтобы крутить проверку
Код: pascal
1.
2.
3.
4.
5.
repeat
  Application.HandleMessage;
  if Application.FTerminate then ModalResult := mrCancel else
    if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;




Такой костыль необходим только если вы чрезмерно усложнили приложение.

Такой костыль находится у тебя внутри функции TCustomForm.ShowModal
...
Рейтинг: 0 / 0
Модальный позор
    #40120395
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
Изначальный костыль - это запускать доп. цикл обработки сообщений, чтобы крутить проверку

Именно. Мало того, твои претензии вызваны желанием запускать точно такой же костыль.
Именно, что я убрал у себя этот костыль.
...
Рейтинг: 0 / 0
Модальный позор
    #40121189
Dmvrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот еще с модальными окнами веселуха.
Если запустить прогу на терминальном сервере и свернуть модальное окно (вызов его из основной формы был сделан), то с вероятностью 50х50 оно пропадает (Alt+Tab иногда помогает, если терминал на полный экран) и в левом нижнем углу его не видно для обратного разворачивания.
...
Рейтинг: 0 / 0
Модальный позор
    #40121204
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmvrt,

Для модальных окон необходимо отключать кнопку "свернуть", тогда этой проблемы не будет.
...
Рейтинг: 0 / 0
Модальный позор
    #40121220
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmvrtА вот еще с модальными окнами веселуха.

Почему "ещё"? Это та же самая "веселуха", которая перетирается начиная с первого
поста этого топика.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40121559
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С тех пор, как я начал втыкать Application.ProcessMessages непосредственно перед ShowModal, проблема ушла окончательно. Delphi XE юзаю с 2011 года.
...
Рейтинг: 0 / 0
Модальный позор
    #40121562
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov
С тех пор, как я начал втыкать Application.ProcessMessages непосредственно перед ShowModal

Скорее всего, сейчас Вы услышите о том, что Application.ProcessMessages - это очень плохо.
...
Рейтинг: 0 / 0
Модальный позор
    #40121570
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Ну, поначалу тоже так казалось, но не нашел причин не вызывать его непосредственно перед ShowModal.
...
Рейтинг: 0 / 0
Модальный позор
    #40121571
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov
Ну, поначалу тоже так казалось, но не нашел причин не вызывать его непосредственно перед ShowModal.

Ну, чисто теоретически моменты есть. Например, если перед этим ShowModal делается что-то тяжёлое, пользователь может успеть кликнуть по другой кнопке, и в результате та "нажмётся". Кроме того, многие странные люди любят реализовывать ту или иной функциональность, посылая сообщения, и от неожиданного ProcessMessages она начинает ломаться.
...
Рейтинг: 0 / 0
Модальный позор
    #40121579
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> Ну, чисто теоретически моменты есть.

Я бы скорее указал на то, что конкретно момент
с потерей (невозвратом) фокуса ProcessMessages
перед ShowModal никак помочь не может...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40121588
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Я бы скорее указал на то, что конкретно момент с потерей (невозвратом) фокуса ProcessMessages перед ShowModal никак помочь не может...

Не знаю. Темна вода во облацех (ц) Я вот не возьмусь утверждать, что в любой ситуации, где без него окно теряется, оно и с ним потеряется.
...
Рейтинг: 0 / 0
Модальный позор
    #40121594
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

Я бы скорее указал на то, что конкретно момент
с потерей (невозвратом) фокуса ProcessMessages
перед ShowModal никак помочь не может...

Может, и не может, но помогает. Жалобы прекратились, уж с год, наверное, как прикрутил, и нет больше жалоб. Рассуждать, как это происходит, не буду, но есть подозрение, что операторы пережимают кнопку, вызывающую процедуру, вызывающую ShowModal.
...
Рейтинг: 0 / 0
Модальный позор
    #40121596
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov> есть подозрение, что операторы пережимают кнопку,
V.Borzov> вызывающую процедуру, вызывающую ShowModal.

А, для такого конкретного сценария, может и поможет
(если кнопка не предусматривает повторные нажатия, конечно).

От других сабжевых ситуаций - типа потери/возврата фокуса
приложением - ProcessMessages спасать не должен (по идее).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40121674
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
virtual memberв Delphi 11, когда открыл простой файловый диалог из простого модального окна? При закрытии файлового диалога фокус уходит на главную форму, а модальная становится не активной.


Есть воспроизводимый пример?

проблему подтверждаю, правда не в Александрии, а в более ранних, но современных версиях дельфи.

Пришлось делать костыль в программе, чтобы ВСЕ окна имели свой собственную отдельную кнопку на панели задач Винды, чтобы в случае такой "блокировки" пользователь хотя бы так мог переключиться на модальное "скрытое" окно.
...
Рейтинг: 0 / 0
Модальный позор
    #40121676
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
проблему подтверждаю, правда не в Александрии, а в более ранних, но современных версиях дельфи.

Пришлось делать костыль в программе, чтобы ВСЕ окна имели свой собственную отдельную кнопку на панели задач Винды, чтобы в случае такой "блокировки" пользователь хотя бы так мог переключиться на модальное "скрытое" окно.
Веселые костыли.

А чего бы просто фокус форме после закрытия диалога не вернуть, а?
...
Рейтинг: 0 / 0
Модальный позор
    #40121708
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
до диалога не добраться просто так, чтобы его закрыть...

т.е. пользователь жмет Alt+Tab и переходит к форме добавления объявления, например, но... перед формой висит невидимый диалог типа MessageDlg или ShowMessage и все, затык... на форме ничего нельзя нажать, даже закрыть ее нельзя. А вот если перейти на форму с помощью кнопки на панели задач, то тогда форма появляется и перед ней висит тот самый диалог ShowMessage.

Пример. Пользователь жмякает "Сохранить объявление", а ему программа выдает какой-нибудь вопрос, пользователь переходит к другой программе (на знаю каким способом), например, чторбы что-то уточнить-проверить, возвращается к моей программе с пом. Alt+Tab и оппппа... форма добавления некликабельна.

Проявляется не всегда, кстати. Я закономерность не смог выяснить, а когда добавил костыли, то уже и не стал выяснять.
...
Рейтинг: 0 / 0
25 сообщений из 124, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Модальный позор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]