Как сгенерировать событие?
Модератор: Модераторы
Чето я переоценил с уничтожением себя из обработчика. тут тупо неумение писать формы создаваемые динамически
>>Была же в сообщении ссылка на яндексдиск с примером https://yadi.sk/d/O0ht_yGZ3PjHyj
замени form2.Hide на просто Hide;
>>Была же в сообщении ссылка на яндексдиск с примером https://yadi.sk/d/O0ht_yGZ3PjHyj
замени form2.Hide на просто Hide;
zub писал(а):Чето я переоценил с уничтожением себя из обработчика. тут тупо неумение писать формы создаваемые динамически
>>Была же в сообщении ссылка на яндексдиск с примером https://yadi.sk/d/O0ht_yGZ3PjHyj
замени form2.Hide на просто Hide;
А я и не скрывал, что со знанием ассемблера у меня не очень. Откуда тогда секретным знаниям "как не вылететь из стека не сделав ничего плохого" взяться в полном объёме:))))
С такой заменой шила на мыло программа не ломается. Но!
Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
begin
if FF_2=1 then F_2.free;
FF_2:=0;
end; этот код всё равно должен быть на родительской форме и чтобы его вручную не жать, всё равно нужен параллельный системному обработчик событий. А если он будет, то и дочернюю форму можно из главной убирать - на одну строчку кода в нём больше, только и всего.
В принципе, обработчик удаляющий формы и чистящий память можно в большинстве случаев ставить в
Код: Выделить всё
procedure TForm1.FormActivate(Sender: TObject);
begin
end; Сквозняк Спуститесь с высших материй на землю грешную. Ну не создано у вас то к чему вы обращаетесь (в исходниках). Что должно закрыться (скрыться) если его нет?
Т.е.:
п.с.
песец: 4-я страница детских проблем.
Т.е.:
почему так? решайте сами, но: F_2: TForm2 относительно равно Form2
п.с.
песец: 4-я страница детских проблем.
pupsik писал(а):Сквозняк Спуститесь с высших материй на землю грешную. Ну не создано у вас то к чему вы обращаетесь (в исходниках). Что должно закрыться (скрыться) если его нет?
Смысл этой философии тяжёл и неоднозначен есть.
п.с.
песец: 4-я страница детских проблем.
Какое освещение программирования на паскале в литературе, примерах и вики, такие и проблемы.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Сквозняк писал(а):Какое освещение программирования на паскале в литературе, примерах и вики, такие и проблемы.
Речь о том, что form2 не равно F_2. поэтому у тебя и глюки возникают. Ты пытаешься завершить не созданную форму.
Сквозняк писал(а):Какое освещение программирования на паскале в литературе, примерах и вики, такие и проблемы.
Лично я, как полный нуб, разобрался быстро. В том же С я до сих пор не могу разобраться(((
А твой пример я не запускал. У меня просто архив открывается с ошибками.
Сквозняк писал(а):Mikhail писал(а):Совсем даже наоборот, Exit, break, continue имеют фиксированную точку выхода
Не видимую для программиста.
Блин!
Читайте доки, там всё подробно описано или Вам программирование противопоказано.
-
LearnMagic
- новенький
- Сообщения: 66
- Зарегистрирован: 10.11.2016 22:13:38
Сквозняк, чем не устраивает showmodal? Вместо ввода дополнительной глобальной переменной для проверки можно воспользоваться функцией Assigned
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
LearnMagic писал(а):чем не устраивает showmodal?
А в нем все глюки вылечили?
-
LearnMagic
- новенький
- Сообщения: 66
- Зарегистрирован: 10.11.2016 22:13:38
Лекс Айрин писал(а):А в нем все глюки вылечили?
Какие именно? Возможно мне повезло, но никаких глюков не наблюдал
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
LearnMagic, были у людей ситуации, когда при закрытии (или открытии, уже не помню) окна фокус уходил к неконтролируемому окну.
Впрочем, не всегда эти модальные окна и удобны. я лично кроме диалоговых окон не вижу особых причин так делать. Во всех остальных случаях проще перед закрытием приподнять нужное окно.
Впрочем, не всегда эти модальные окна и удобны. я лично кроме диалоговых окон не вижу особых причин так делать. Во всех остальных случаях проще перед закрытием приподнять нужное окно.
-
LearnMagic
- новенький
- Сообщения: 66
- Зарегистрирован: 10.11.2016 22:13:38
Лекс Айрин писал(а):Впрочем, не всегда эти модальные окна и удобны
Дело вкуса и области разрабатываемой программы.
Уход фокуса наблюдал из-за глюков диспетчера окон в ОС (примеры приводить не буду
LearnMagic писал(а):Сквозняк, чем не устраивает showmodal?
Универсальный способ создания окон освоил в первую очередь, как самый нужный, ну а после - зачем ещё что-то
Вместо ввода дополнительной глобальной переменной для проверки можно воспользоваться функцией Assigned
Одной переменной? По нормальному их нужно две. Вторая обнуляется при событии "создание формы", больше нигде в дополнительной форме не изменяется, и нужна для того, чтобы не обработать окно лишний раз. Закрывать окно можно кликом по крестику на рамке, а значит в обработчике события "он клосе" нужно поместить аналогичный закрыватель что и в обработчике события клика по кнопке "выход". А это значит, что при клике на "выход", закрыватель сработает 2 раза и начнётся лотерея: успеет обработчик закрывателей выполнить операцию 2 раза или нет. С Assigned ещё нужно разбираться, что там да как - в лазарусе не оттуда вызовешь функцию и привет - жалуйтесь ассемблеру, а с переменными, взял и написал. Если понадобится асинхронность для чего-то более сложного, тогда будет повод обратиться к данной функции.
-
LearnMagic
- новенький
- Сообщения: 66
- Зарегистрирован: 10.11.2016 22:13:38
Сквозняк писал(а): нужна для того, чтобы не обработать окно лишний раз
Не совсем понятно, что имеется в виду.
Как писали выше, в обработчике onClose формы 2 написать CloseAction := caHide; - при закрытии форма будет оставаться в памяти. Причём этот обработчик будет вызван при любом закрытии формы: хоть крестик в углу окна, хоть через Close в коде программы.
При компиляции Assigned генерируется не вызов функции, а заменяется на несколько команд. В любом языке программирования, если вызываешь функцию не там или не с теми параметрами - ничего хорошего не жди.
ShowModal деактивирует то окно, из под которого был вызов, и следующая команда не будет выполнена до закрытия модального окна.
Последний раз редактировалось LearnMagic 17.11.2017 17:50:16, всего редактировалось 1 раз.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
LearnMagic, не знаю как в других осях, а в винде можно воспользоваться и трюком с привязкой окна к окну (Form2.Parent:=Form1). Это мало чем, с практической точки зрения, отличается от модальности, только еще и можно работать в окне-родителе.
А вот уход фокуса это серьезно. Особенно, если человек работает в полу-автоматическом режиме. И тут уже неважно что и как гадит. Модальность хороша когда дальнейшая работа, без закрытия текущего окна, не имеет смысла. Чаще всего это не так.
А вот уход фокуса это серьезно. Особенно, если человек работает в полу-автоматическом режиме. И тут уже неважно что и как гадит. Модальность хороша когда дальнейшая работа, без закрытия текущего окна, не имеет смысла. Чаще всего это не так.
-
LearnMagic
- новенький
- Сообщения: 66
- Зарегистрирован: 10.11.2016 22:13:38
Лекс Айрин писал(а):Модальность хороша когда дальнейшая работа, без закрытия текущего окна, не имеет смысла. Чаще всего это не так.
Всё зависит от контекста задачи. Одному оператору проблематично одновременно вводить несколько документов. Обычно вводится один документ, а потом другой.
