powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Модальный позор
124 сообщений из 124, показаны все 5 страниц
Модальный позор
    #40120034
virtual member
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри за тон, но это реально позор.

Еще лет 20 назад, во времена Delphi 5 периодически натыкался на проблему модальных окон в делфовых приложениях. Когда при открытии/закрытии друг из друга нескольких модальных окон, одно из них улетало под неактивное главное окно приложения. Спасало только двойное Alt+TAB.

Думал, что это осталось там, в начале нулевых. И что я увидел в Delphi 11, когда открыл простой файловый диалог из простого модального окна? Почти то же самое. При закрытии файлового диалога фокус уходит на главную форму, а модальная становится не активной. Спасибо, что хотя бы не под главной, как раньше.

Помнится, в те давние времена модальные окна у делфового софта вообще вели себя не так, как у остальных программ. Точно не помню, но то-ли они не мигали заголовком, когда пытаешься фокус отнять, то-ли как-то еще, но точно "нестандартно". Сегодня никакой разницы в поведении уже не видно, но похоже что модальность так и осталась самопальной, ее только немного подровняли.
...
Рейтинг: 0 / 0
Модальный позор
    #40120037
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рыдалъ.
...
Рейтинг: 0 / 0
Модальный позор
    #40120040
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну подумаешь, не смог человек найти новые оверлоады с явным указанием
родительского окна... Это же тяжко, многа букафф читать...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120041
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virtual memberв Delphi 11, когда открыл простой файловый диалог из простого модального окна? При закрытии файлового диалога фокус уходит на главную форму, а модальная становится не активной.

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


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

Насколько я помню, для этого вполне достаточно криво поставить PopupMode.
...
Рейтинг: 0 / 0
Модальный позор
    #40120056
virtual member
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, конечно.

Даже имена форм и модулей не трогал, предельно минималистичный пример. Компилирую в D11, запускаю под Win10.
...
Рейтинг: 0 / 0
Модальный позор
    #40120064
virtual member
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Это же тяжко, многа букафф читать...

Харош фигню пороть с умным видом. В системной либе очевидная неконсистентность, а вы тут в тупом сарказме соревнуетесь.
...
Рейтинг: 0 / 0
Модальный позор
    #40120068
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> Насколько я помню, для этого вполне
softwarer> достаточно криво поставить PopupMode.

Не, я не про PopupPArent/PopupMode, а про сценарий.
Т.е. IIRC кривости были со сменой фокуса и прочими
Alt+Tab-ами, а не просто рядовое "открыл диалоговое
окно из модального". Поэтому и есть подозрение, что
человек лохматит бабушку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120078
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скачал тестовый пример, не смог воспроизвести ошибку. По клику на кнопке на форме1 модально открывается форма2, по клику на кнопке на ней открывается диалог открытия файла, когда он закрывается, неважно, по ОК или Отмена, 2 форма остается наверху, 1-ая, понятно, недоступна. В разных вариациях пробовал, даже открывая или выводя на 1 план другие программы, пока 2-ая форма открыта или файловый диалог из неё открыт. Все нормально работало.
...
Рейтинг: 0 / 0
Модальный позор
    #40120084
Mik86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тоже старый баг с модальностью окон.
...
Рейтинг: 0 / 0
Модальный позор
    #40120085
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virtual member
Харош фигню пороть с умным видом.
Вы даже умный вид сделать не в состоянии. Достаточно было прочитать
Dimitry Sibiryakov
Ну подумаешь, не смог человек найти новые оверлоады с явным указанием родительского окна...
И сделать как рекомендуют
Код: pascal
1.
2.
3.
4.
procedure TForm2.Button1Click(Sender: TObject);
begin
  OpenDialog1.Execute(Handle);
end;

вместо того, чтобы возбуждаться на нежелание утирать сопли, и проблема бы ушла сама собой
...
Рейтинг: 0 / 0
Модальный позор
    #40120086
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
Все нормально работало.
У меня на Rio воспроизвелось
...
Рейтинг: 0 / 0
Модальный позор
    #40120088
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function TCommonDialog.Execute: Boolean;
var
  ParentWnd: HWND;
begin
  if Application.ModalPopupMode <> pmNone then
  begin
    ParentWnd := Application.ActiveFormHandle;
    if ParentWnd = 0 then
      ParentWnd := ApplicationMainHandle;
  end
  else
    ParentWnd := ApplicationMainHandle;
  Result := Execute(ParentWnd);
end;

function ApplicationMainHandle: HWND;
begin
  if Application.MainFormOnTaskBar and (Application.MainForm <> nil) then
    Result := Application.MainFormHandle
  else
    Result := Application.Handle;
end;
...
Рейтинг: 0 / 0
Модальный позор
    #40120089
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сказал что это не столько делфи баг сколько операционной системы, прокладки итп. Особенно часто проявляется на том же Citrix. С таким же успехом наблюдал его у приложений написанных на том же C#. Хотя, возможно я неправ :)
...
Рейтинг: 0 / 0
Модальный позор
    #40120090
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
s62
Все нормально работало.
У меня на Rio воспроизвелось

Посмотри, пожалуйста, значение свойства
Код: pascal
1.
  Application.ModalPopupMode
...
Рейтинг: 0 / 0
Модальный позор
    #40120092
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

ну да, ты уже... :)
...
Рейтинг: 0 / 0
Модальный позор
    #40120095
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Потому что
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function TCommonDialog.Execute: Boolean;
var
  ParentWnd: HWND;
begin
  if Application.ModalPopupMode <> pmNone then
  begin
    ParentWnd := Application.ActiveFormHandle;
    if ParentWnd = 0 then
      ParentWnd := ApplicationMainHandle;
  end
  else
    ParentWnd := ApplicationMainHandle;
  Result := Execute(ParentWnd);
end;

function ApplicationMainHandle: HWND;
begin
  if Application.MainFormOnTaskBar and (Application.MainForm <> nil) then
    Result := Application.MainFormHandle
  else
    Result := Application.Handle;
end;


...и в конструкторе TApplication
Код: pascal
1.
  FModalPopupMode := pmNone;
...
Рейтинг: 0 / 0
Модальный позор
    #40120096
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Посмотри, пожалуйста, значение свойства
Код: pascal
1.
  Application.ModalPopupMode

По дефолту там pmNone и никто его не меняет.
...
Рейтинг: 0 / 0
Модальный позор
    #40120097
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoЯ бы сказал что это не столько делфи баг сколько операционной системы, прокладки
итп.

Конкретно это - баг VCL, причём архитектурный. Они с самого начала (первой
версии) начали делать визуальную часть немного криво. Потом подпёрли костылями.
Потом ещё. И ещё. В результате вот такие топики.

PS: А C# тупо VCL скопировала вместо со всеми багами.
...
Рейтинг: 0 / 0
Модальный позор
    #40120099
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Потом подпёрли костылями. Потом ещё. И ещё. В результате вот такие топики.

Здесь главная кривизна в том, что они "для совместимости" оставили по дефолту pmNone (если мне память не изменяет).
...
Рейтинг: 0 / 0
Модальный позор
    #40120102
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,

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

Скорее всего - излишняя осторожность. Что-нибудь типа "люди уже написали у себя workaround-ы для наших багов, и если мы вдруг изменим, у них перестанет работать".
...
Рейтинг: 0 / 0
Модальный позор
    #40120108
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Скорее всего - излишняя осторожность. Что-нибудь типа "люди уже написали у себя workaround-ы для наших багов, и если мы вдруг изменим, у них перестанет работать".
Я до сих пор у себя выгребаю починку их бага с implements интерфейсов. Так что это их не останавливает
...
Рейтинг: 0 / 0
Модальный позор
    #40120111
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой именно баг ?
Как именно выгребаешь ?
...
Рейтинг: 0 / 0
Модальный позор
    #40120113
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
softwarer
Скорее всего - излишняя осторожность. Что-нибудь типа "люди уже написали у себя workaround-ы для наших багов, и если мы вдруг изменим, у них перестанет работать".
Я до сих пор у себя выгребаю починку их бага с implements интерфейсов. Так что это их не останавливает

К счастью, иногда не останавливает. Но реже, чем стоило бы.
...
Рейтинг: 0 / 0
Модальный позор
    #40120122
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Какой именно баг ?
17877582
Dmitry Arefiev
Как именно выгребаешь ?
При переводе очередного проекта на новые версии все ломается, а потом я вспоминаю об исправленном баге
...
Рейтинг: 0 / 0
Модальный позор
    #40120126
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
При переводе очередного проекта на новые версии все ломается, а потом я вспоминаю об исправленном баге

Ты сам пишешь, что понадобился день на исправление. Я думаю, это в высшей степени приемлемая цена за несохранение старых багов в новых версиях.
...
Рейтинг: 0 / 0
Модальный позор
    #40120128
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Dmitry Arefiev
Какой именно баг ?

Есть в трекере Эмбы ? Если только тут, то = нет.
...
Рейтинг: 0 / 0
Модальный позор
    #40120131
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Есть в трекере Эмбы ?
Что должно быть в трекере? "Верните баг!"
...
Рейтинг: 0 / 0
Модальный позор
    #40120132
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Ты сам пишешь, что понадобился день на исправление.
Да. Но после того, как исправление проявилось, и долгого раскуривания "А что же пошло не так"
...
Рейтинг: 0 / 0
Модальный позор
    #40120133
virtual member
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, вы читать умеете? Перечитайте топик и уясните уже, что советов здесь никто не просил. Тем более у личностей, которым клеймо biohazard ставить негде.

А позор из заголовка топика -- это когда использование совершенно штатных методов без малейших признаков шаманства приводит приложение в такое состояние, в котором оно просто не должно быть ни при каких раскладах.
...
Рейтинг: 0 / 0
Модальный позор
    #40120134
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virtual memberиспользование совершенно штатных методов без малейших признаков шаманства

О чём ты говоришь? В Windows НЕТ штатных средств создания модального окна за
исключением диалогового (что не для слабонервных). TForm.ShowModal это
изначально кривоватый костыль, у которого приходится удивляться не глюкам, а
тому, что оно хоть как-то работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120138
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
В Windows НЕТ штатных средств создания модального окна за
исключением диалогового (что не для слабонервных)
Что там "не для слабонервных"?
Почему в VCL было не реализовать модальность через DialogBoxIndirectParam (или как там оно) - тайна. Оконная функция "не такая"? Элементарно обходится, зато глюков нет, включая глюки из-за доп. цикла выкрутки сообщений, при появлении которого (в сторонней dll, например) дельфовые модальные окна вообще закрываться перестают, т.к. "туда не доходит".
Я VCL-окна не использую давно из-за этого (только в одной уже старой программе и для тестов), т.к. для меня это непобедимая проблема - цикл с проверкой на переменную ModalResult, который теряет управление.
...
Рейтинг: 0 / 0
Модальный позор
    #40120148
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Почему в VCL было не реализовать модальность через DialogBoxIndirectParam (или как там оно) - тайна.

Думаю, в этом случае "глюки дельфовой модальности" вспоминались бы с детской нежностью.

YuRock
включая глюки из-за доп. цикла выкрутки сообщений

Первопричиной этих "глюков" я бы назвал существование синхронного ModalResult (то есть желание писать код в стиле if ShowModal = mrOk then). Этот аспект перпендикулярен внутренней реализации ShowModal - хоть так как есть, хоть через DialogBoxIndirectParam, хоть как угодно ещё.

YuRock
при появлении которого (в сторонней dll, например)

И это точно глюк именно Delphi?
...
Рейтинг: 0 / 0
Модальный позор
    #40120213
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
то есть желание писать код в стиле if ShowModal = mrOk then). Этот аспект перпендикулярен внутренней реализации ShowModal
Нормальное желание при показе модальных форм. Совсем не перпендикулярен этот аспект.
softwarer
YuRockпри появлении которого (в сторонней dll, например)

И это точно глюк именно Delphi?Да, точно, модальное окно должно закрываться вне зависимости от того, какой цикл сейчас работает, а в Delphi это не так.
...
Рейтинг: 0 / 0
Модальный позор
    #40120218
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЧто там "не для слабонервных"?
Почему в VCL было не реализовать модальность через DialogBoxIndirectParam (или
как там оно) - тайна.

Масштабы, например. Хотя, если посмотреть на текущее состояние дел, может,
именно это могло быть самым большим плюсом.

Ну и скудный выбор доступных контролов. Попугашистости не хватает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120226
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Ну и скудный выбор доступных контролов.
Это тут не при чём вообще. Все делфовые контролы прекрасно бы лягли на такой диалог.
Тут вопрос скорей возникнет - а как же Synchronize обрабатывать? Это да, беда. Хотя раньше такой беды не было.
...
Рейтинг: 0 / 0
Модальный позор
    #40120228
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockВсе делфовые контролы прекрасно бы лягли на такой диалог.

Что надо запихать в шаблон для TDBGrid, например?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120229
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Да, точно, модальное окно должно закрываться вне зависимости от того, какой цикл сейчас работает, а в Delphi это не так.

Я не понимаю, как ты это себе технически представляешь.

Допустим, речь идёт об одном потоке. В нём есть модальное окно. Это означает, что есть цикл обработки сообщений, в нём обрабатывалось какое-то сообщение, и эта обработка вызвала модальное окно. Сейчас она ждёт возврата из ShowModal, чтобы продолжиться.

Теперь откуда-то есть ещё один цикл. Он "сейчас работает" и сообщение в нём должно закрыть модальное окно. "Сейчас работает" означает, что он по стеку вызовов ниже ShowModal, а "должен закрыть" - то, что должен произойти возврат из ShowModal в код выше по стеку.

По-моему, такое возможно только если по этому сообщению первым делом закроется сам "ещё один цикл" вместе с кодом, в котором он работает.

Я бы сказал - кривизна в самой идее наличия в одном потоке нескольких циклов обработки сообщений. Даже в том варианте, в котором она в дельфе. И уж тем более - когда появляется ещё какой-то, несогласованный с ними отдельный цикл. Глюки... неудивительны, говоря деликатно.
...
Рейтинг: 0 / 0
Модальный позор
    #40120233
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
YuRockВсе делфовые контролы прекрасно бы лягли на такой диалог.

Что надо запихать в шаблон для TDBGrid, например?Ничего. Создать окно грида динамически с парентом-хендлом диалога.
...
Рейтинг: 0 / 0
Модальный позор
    #40120236
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
По-моему, такое возможно только если по этому сообщению первым делом закроется сам "ещё один цикл" вместе с кодом, в котором он работает.
Нет, конечно, не только. Другой цикл прекрасно может обработать сообщение нажатия кнопки, по которому произойдет закрытие и убиение с экрана и памяти модального окна.
softwarer
Я бы сказал - кривизна в самой идее наличия в одном потоке нескольких циклов обработки сообщений.
Это не кривизна, а просто сложность при работе через рекурсию.
softwarer
Даже в том варианте, в котором она в дельфе
В таком - она просто невозможна.
softwarer
И уж тем более - когда появляется ещё какой-то, несогласованный с ними отдельный цикл. Глюки...
Никаких глюков, всё работает предсказуемо и в соответствии с документацией. Окна закрываются - это немаловажно.
...
Рейтинг: 0 / 0
Модальный позор
    #40120239
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Другой цикл прекрасно может обработать сообщение нажатия кнопки, по которому произойдет закрытие и убиение с экрана и памяти модального окна.

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

А как он отработает возврат из ShowModal и продолжение той обработки, которая должна быть после ShowModal?
Никак, конечно. Выполнение кода вернется туда после того, как закончится доп. цикл. Но, главное, что окно с экрана уберется.
...
Рейтинг: 0 / 0
Модальный позор
    #40120243
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockНо, главное, что окно с экрана уберется.

Программист, написавший в своём коде Form2.ShowModal, вряд ли будет ожидать
такой подставы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120247
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
YuRockНо, главное, что окно с экрана уберется.

Программист, написавший в своём коде Form2.ShowModal, вряд ли будет ожидать
такой подставы.Еще худшая подстава - когда пользователь ткнул "О программе" какое-нибудь или еще что, любой диалог, и потом закрыть его не может, убрать с экрана и вернуться к управлению основным окном.
...
Рейтинг: 0 / 0
Модальный позор
    #40120249
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Никак, конечно. Выполнение кода вернется туда после того, как закончится доп. цикл. Но, главное, что окно с экрана уберется.

Я не могу придумать, что в таком подходе хорошего. Один сплошной глюкогенератор.

Давай представим себе простое приложение: из главного окна А открывается модальное Б. В модальном Б заполняется поле ввода, когда Б закрывается - введённый текст попадает в caption главного окна.

Чего ожидает пользователь? Он ввёл текст, нажал ОК, окно Б закрылось, текст отобразился в окне А, окно А доступно для дальнейших действий.

Что пользователь получает на самом деле? Он ввёл текст, нажал ОК, окно Б закрылось, текст в окне А не отобразился, окно А не доступно для дальнейших действий. Зато ещё неизвестно сколько работает некий "доп. цикл" и если повезёт, из него когда-нибудь удастся выйти.
...
Рейтинг: 0 / 0
Модальный позор
    #40120250
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, это-то решается простым убиением бага в коде, который мешает всему
вышеназванному...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120257
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Что пользователь получает на самом деле? Он ввёл текст, нажал ОК, окно Б закрылось, текст в окне А не отобразился, окно А не доступно для дальнейших действий. Зато ещё неизвестно сколько работает некий "доп. цикл" и если повезёт, из него когда-нибудь удастся выйти.
Всё не так.
1. Текст в окне А отобразится, если сменить текст по событию по нажатии кнопки модального окна, а не после ShowModal.
2. Окно A как раз становится доступным.
3. И не важно, сколько еще будет работать доп. цикл.
...
Рейтинг: 0 / 0
Модальный позор
    #40120262
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockТекст в окне А отобразится, если сменить текст по событию по нажатии кнопки
модального окна

Это плохой дизайн. Нарушает инкапсуляцию. Окно не должно ничего знать о том
откуда и для чего его вызывают.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40120289
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Всё не так.



YuRock
1. Текст в окне А отобразится, если сменить текст по событию по нажатии кнопки модального окна, а не после ShowModal.

То есть ты практически отказываешься от того, что чуть раньше назвал нормальным - желания писать if ShowModal then {что-нибудь}. Теперь это "что-нибудь" нужно писать в нажатии кнопки.

Давай теперь предположим, что окно Б - это стандартная функция InputQuery. Как ты предлагаешь обработчику её кнопки узнавать, чей текст менять?

YuRock
2. Окно A как раз становится доступным.

Ну разве что если это тоже делать в обработчике кнопки.

YuRock
3. И не важно, сколько еще будет работать доп. цикл.

А главное - зачем и нахрена он вообще нужен. Ради кривой фигни ты так постепенно всё приложение перекособочишь.
...
Рейтинг: 0 / 0
Модальный позор
    #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
Модальный позор
    #40121714
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11перед формой висит невидимый диалог типа MessageDlg или ShowMessage и все, затык...

"Пони бегает по кругу и в уме круги считает."

Ещё один не смог найти оверлоад с явным указанием родительского окна...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40121734
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто Application.MessageBox() или другое окно вызывается далеко и глубоко в недрах программы, а не из текущего окна и там нет никаких дискрипторов "родительского окна".
И Application.MessageBox() я нигде напрямую не вызываю почти никогда.
...
Рейтинг: 0 / 0
Модальный позор
    #40121747
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11и там нет никаких дискрипторов "родительского окна".

Значит его надо туда передать. Или таки перестать удивляться почему Z-order не
такой как Вы себе выдумали. Накрайняк - использовать MB_TASKMODAL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40121750
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
X11и там нет никаких дискрипторов "родительского окна".

Значит его надо туда передать. Или таки перестать удивляться почему Z-order не
такой как Вы себе выдумали. Накрайняк - использовать MB_TASKMODAL.MB_TASKMODAL задизаблит все окошки текущего потока.
Хотя, наверное именно это автору и нужно...
...
Рейтинг: 0 / 0
Модальный позор
    #40121755
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, указывать в messagebox-е хандл родительского окна - это действительно позорище.
...
Рейтинг: 0 / 0
Модальный позор
    #40121757
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Ну, указывать в messagebox-е хандл родительского окна - это действительно позорище.
для API это нормально.
...
Рейтинг: 0 / 0
Модальный позор
    #40121758
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передавать функции нужный для её работы объект в качестве параметра - нормально
для программирования в целом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40121762
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Я давным-давно делаю вместо ShowMessage() что-то такое:

Код: pascal
1.
2.
Result:=MessageBox(WindowHandle,PChar(Msg),PChar(sQuest),
                    mb_YesNo+mb_IconQuestion+mb_SystemModal)=idYES;



куда отдаю Handle вызывающего окна. В принципе описанная ситуация возможна при каскаде ShowMessage() (ну и других диалогов конечно), но такое "Подтвердите, что вы подтвердили...." - это уже говорит о некоторой кривизне.
...
Рейтинг: 0 / 0
Модальный позор
    #40121764
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Application.MainForm.Handle, Application.ActiveForm.Handle - доступны из любого места. В наименовании свойств могу ошибаться - давно не заглядывал в дебри, сделав свои обертки.
...
Рейтинг: 0 / 0
Модальный позор
    #40121768
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
Application.MainForm.Handle, Application.ActiveForm.Handle - доступны из любого места. В наименовании свойств могу ошибаться - давно не заглядывал в дебри, сделав свои обертки.

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

В вариантах с явной передачей хандла есть смысл разве что тогда, когда приложение по каким-то причинам создаёт winapi-шное окно, которое и является текущим. Хотя и в этом случае GetActiveWindow, вообще говоря, никто не отменял.
...
Рейтинг: 0 / 0
Модальный позор
    #40121805
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Плагины, Саш, плагины :(
...
Рейтинг: 0 / 0
Модальный позор
    #40121818
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Позорище - требовать от вызывающего передать параметром то, до чего функция без проблем может добраться самостоятельно.
Есть 3 независимых окна.
С 1-го окна вызывается MessageBox, модальный по отношению только к первому окну.
Со 2-го окна вызывается MessageBox, модальный по отношению только ко 2-у окну.
А с 3-го (или еще из недр каких-то) вызывается MessageBox, модальный по отношению ко всем окнам потока.
И что, не нужы параметры в этой функции? Ну чушь же безапелляционная.
...
Рейтинг: 0 / 0
Модальный позор
    #40121841
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
Плагины, Саш, плагины :(

https://vse-shutochki.ru/anekdot/34290

YuRock
С 1-го окна вызывается MessageBox, модальный по отношению только к первому окну.
Со 2-го окна вызывается MessageBox, модальный по отношению только ко 2-у окну.
А с 3-го (или еще из недр каких-то) вызывается MessageBox, модальный по отношению ко всем окнам потока.

И нафига это мозготяпство? Только для того, чтобы тявкнуть? Вот попробуй объяснить русским языком: для чего пользователю иметь на экране два незакрытых messagebox-а и работать при этом в третьем окне.
...
Рейтинг: 0 / 0
Модальный позор
    #40121843
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
С 1-го окна вызывается MessageBox, модальный по отношению только к первому окну.
Со 2-го окна вызывается MessageBox, модальный по отношению только ко 2-у окну.
А с 3-го (или еще из недр каких-то) вызывается MessageBox, модальный по отношению ко всем окнам потока.

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

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

Итого, на вопрос ты ответить не смог, то есть такая хрень ни за чем не нужна. ЧТД.
Тебе объяснить не смогу, да.
...
Рейтинг: 0 / 0
Модальный позор
    #40121857
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
softwarer
пропущено...

Итого, на вопрос ты ответить не смог, то есть такая хрень ни за чем не нужна. ЧТД.
Тебе объяснить не смогу, да.

https://ru.citaty.net/tsitaty/614610-albert-einshtein-esli-vy-chto-to-ne-mozhete-obiasnit-6-letnemu-rebion/
...
Рейтинг: 0 / 0
Модальный позор
    #40121866
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Я бы почитал объяснение теории относительности для шестилетнего ребёнка...
...
Рейтинг: 0 / 0
Модальный позор
    #40121871
Квази
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
softwarer,

Я бы почитал объяснение теории относительности для шестилетнего ребёнка...


- г-н Эйнштейн, а Вы можете популярно объяснить суть теории относительности?
- например длительность минуты зависит от того, с какой стороны двери туалета вы находитесь
...
Рейтинг: 0 / 0
Модальный позор
    #40121873
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Я бы почитал объяснение теории относительности для шестилетнего ребёнка...

Мне хватило бы вспомнить, как я начинал читать научную фантастику. При приближении к скорости света масса нарастает, время замедляется итп. Я, честно говоря, не могу вспомнить, когда и как мне это объяснили - память перескакивает на то, как при чтении "Заповедника гоблинов" я зацепился за "Леонид и воины", и мама рассказывала мне про Фермопилы. Не вижу особых проблем.
...
Рейтинг: 0 / 0
Модальный позор
    #40122006
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читать всё было влом....
А никто не вспомнил, кто Parent у окна проблемного?
...
Рейтинг: 0 / 0
Модальный позор
    #40122012
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer

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

Это следствие из неё. Ну т.е. как на вопрос "что такое лампочка" сказать "вот когда мы щёлкаем выключателем - в комнате становится светло". Тоже, конечно, объяснение, но не то чтобы про лампочку.
...
Рейтинг: 0 / 0
Модальный позор
    #40122016
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
softwarer

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

Это следствие из неё. Ну т.е. как на вопрос "что такое лампочка" сказать "вот когда мы щёлкаем выключателем - в комнате становится светло". Тоже, конечно, объяснение, но не то чтобы про лампочку.

Внутри болида, в котором ты "приближаешься" - не так.
Ты превысил скорость света. Ну, просто время у тебя теперь медленнее.


...кстати, пока на микроуровне, но уже реально придумали "варп"
...
Рейтинг: 0 / 0
Модальный позор
    #40122017
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Тоже, конечно, объяснение, но не то чтобы про лампочку.

Шестилетнему ребёнку надо объяснять не так, как студенту физфака. Ему надо проиллюстрировать суть на доступном ему уровне; приведённый Вами вариант, конечно, далёк от идеала, но в целом находится на верном пути.

Если чуть пофилософствовать - Эйнштейн справедливо отметил, что именно эту способность многие взрослые теряют. Они так закапываются в детали, что перестают видеть суть. У Фейнмана на эту тему тоже можно прочитать кое-что интересное, достаточно сделать поиск по слову "лекала".

А на практике - я однажды ответил восьмилетней дочке на вопрос, зачем по ночам езжу к любовнице. Думаю, это было немного сложнее, чем с теорией относительности :)
...
Рейтинг: 0 / 0
Модальный позор
    #40122018
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно в 100 раз превысить скорость света...
Просто это значит, что тебе кажется, что ты газуешь год, а у остальных прошло 101.
...
Рейтинг: 0 / 0
Модальный позор
    #40122020
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
alekcvp
Тоже, конечно, объяснение, но не то чтобы про лампочку.

Шестилетнему ребёнку надо объяснять не так, как студенту физфака. Ему надо проиллюстрировать суть на доступном ему уровне; приведённый Вами вариант, конечно, далёк от идеала, но в целом находится на верном пути.

Если чуть пофилософствовать - Эйнштейн справедливо отметил, что именно эту способность многие взрослые теряют. Они так закапываются в детали, что перестают видеть суть. У Фейнмана на эту тему тоже можно прочитать кое-что интересное, достаточно сделать поиск по слову "лекала".

А на практике - я однажды ответил восьмилетней дочке на вопрос, зачем по ночам езжу к любовнице. Думаю, это было немного сложнее, чем с теорией относительности :)

Ответить, зачем к любовнице, вместо изобретания двигателя сверхсветового?
Сам понял?
Не только у человека инстинкт размножения помножен на удовольствие...
Иначе - было бы проблематичнее размножаться.

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

Я давным-давно делаю вместо ShowMessage() что-то такое:

Код: pascal
1.
2.
Result:=MessageBox(WindowHandle,PChar(Msg),PChar(sQuest),
                    mb_YesNo+mb_IconQuestion+mb_SystemModal)=idYES;




куда отдаю Handle вызывающего окна. В принципе описанная ситуация возможна при каскаде ShowMessage() (ну и других диалогов конечно), но такое "Подтвердите, что вы подтвердили...." - это уже говорит о некоторой кривизне.



https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Forms.TApplication.MessageBox

function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;

У тебя какой-то другой MessageBox, нестандартный


тут тоже нет параметра для ввода Application.ActiveFormHandle
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
...
Рейтинг: 0 / 0
Модальный позор
    #40122105
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а что это за новые параметры в ShowMessage, описания которых нет в справке?
https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Dialogs.ShowMessage

procedure ShowMessage(const Msg: string; TaskDlgFlags: TTaskDialogFlags );

здесь тоже этот параметр есть, но описания нет
https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Dialogs.MessageDlgPos
...
Рейтинг: 0 / 0
Модальный позор
    #40122108
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Модальный позор
    #40122109
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
TTaskDialogFlags

type TTaskDialogFlags = set of TTaskDialogFlag;
https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Dialogs.TTaskDialogFlag
...
Рейтинг: 0 / 0
Модальный позор
    #40122148
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот интересно, сам столкнулся с подобной ситуацией в Линуксе на Лазарусе (на винде и макоси все нормально). Пришлось перед вызовом модальной формы впендюрить
Код: pascal
1.
2.
3.
{$IFDEF LINUX}
FormStyle:= fsStayOnTop;
{$ENDIF}


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

...
Рейтинг: 0 / 0
Модальный позор
    #40122166
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, Док, ты не ровняй LCL и VCL.
но Линухе концепция окон совсем не как на Вин.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40122172
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийно Линухе концепция окон совсем не как на Вин.

Отсутствие системной библиотеки виджетов в Х-сервере, конечно, та ещё проблема,
но в остальной части концепции я лично особой разницы не вижу. Что там
концептуально другое?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40122173
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

знаю, там вызывающее окно, хоть формально и не имеет фокус, но доступно для захвата мышью. Но в моем случае, оно еще и лежит поверх модального :(
...
Рейтинг: 0 / 0
Модальный позор
    #40122835
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox

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

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

и как его использовать?
Так же, как его использует "стандартная" функция https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Forms.TApplication.MessageBox
, которую ты приводил, внутри себя.
Только без этого всего. А просто передавать туда хэндл окна, которого нужно.
...
Рейтинг: 0 / 0
Модальный позор
    #40123233
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще есть хорошая функция MessageBoxTimeoutA

Код: pascal
1.
function MessageBoxTimeOut(hWnd: HWND; lpText: PChar; lpCaption: PChar; uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): integer; stdcall; external user32 name 'MessageBoxTimeoutA';


Позволяет показывать сообщения на протяжении определенного времени
...
Рейтинг: 0 / 0
Модальный позор
    #40123279
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений
Позволяет показывать сообщения на протяжении определенного времени

Какой в ней смысл в рамках рассматриваемой темы?
...
Рейтинг: 0 / 0
Модальный позор
    #40123328
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.12.2021 23:00, Шавлюк Евгений пишет:
> А еще есть хорошая функция MessageBoxTimeoutA

оно всё ещё не документировано (хоть и расписано на всех углах).
да, оно работает ещё со времён WinXP, но M$ за каким-то хреном её "прячет" в карман.
(как и многое другое)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Модальный позор
    #40123335
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
26.12.2021 23:00, Шавлюк Евгений пишет:
> А еще есть хорошая функция MessageBoxTimeoutA

оно всё ещё не документировано (хоть и расписано на всех углах).
да, оно работает ещё со времён WinXP, но M$ за каким-то хреном её "прячет" в карман.
(как и многое другое)

Блин.
А я отдельное приложение малюсенькое использую. В командной строке передаю ему три параметра: заголовок, сообщение, время(сек). Диалог отображается в течении указанного времени, и, если юзер на нажал кнопку - плавно "тает".
Удобно, когда программа должна закрыться, напоследок что-то показав, не блокируясь при этом модальным окошком.
...
Рейтинг: 0 / 0
Модальный позор
    #40123341
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
А я отдельное приложение малюсенькое использую.
я пользую виндовый MessageBox в отдельном потоке.
...
Рейтинг: 0 / 0
Модальный позор
    #40123343
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извращенцы...
...
Рейтинг: 0 / 0
Модальный позор
    #40123344
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat,

они самые.
...
Рейтинг: 0 / 0
Модальный позор
    #40123461
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда, в целях отладки, нужно выкинуть MessageBox из сервиса. Использую такую функцию
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure Msg(const AMsg: string);
const
  CTitle = 'Debug Info';
var
  LSession: Cardinal;
  LRet: Cardinal;
begin
  LSession := GetActiveSession;
  if LSession = WTS_INVALID_SESSION then
    LSession := WTS_CURRENT_SESSION;
  Win32Check(WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, LSession,
    CTitle, Length(CTitle) * SizeOf(Char),
    PChar(AMsg), Length(AMsg) * SizeOf(Char), MB_OK, 0, LRet, True)
  );
end;

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


но в uses нужно подключать какое-то другой модуль вместо Vcl.Forms.TApplication?
...
Рейтинг: 0 / 0
Модальный позор
    #40123591
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
YuRock
Так же, как его использует "стандартная" функция


но в uses нужно подключать какое-то другой модуль вместо Vcl.Forms.TApplication?

X11, посмотрите реализацию Application.MessageBox. (Ctrl + Click) То место, где try ... finally.
...
Рейтинг: 0 / 0
Модальный позор
    #40123602
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
YuRock
Так же, как его использует "стандартная" функция


но в uses нужно подключать какое-то другой модуль вместо Vcl.Forms.TApplication?
Если б Вы зашли по ссылке, которую сами и привели (справка по функции TApplication.MessageBox), то увидели бы, что там написано
MessageBox is an encapsulation of the Windows API MessageBox function

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


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