Как сгенерировать событие?

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

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

Re: Как сгенерировать событие?

Сообщение zub » 15.11.2017 08:33:36

Твой Application.QueueAsyncCall расслабиться, если заняться его тестированием и встройкой в приложение, точно не даст. Та дочерняя форма не просто выключается из кучи мест, но и память отжирает при старте, а значит её почистить надо снаружи 1 раз а не 2, а также шлёт сообщения родительской форме. На всё это потребуется куча обработчиков, которые ещё надо синхронизировать, а будильник-дурильник справляется со всем один, только в его обработчик надо вписать

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

Добавлено спустя 4 минуты 59 секунд:
>>не вызывает ощущения надёжности и комфорта
ага, заато гото сразу выдает то что авттор сего тванения - куку))

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

Re: Как сгенерировать событие?

Сообщение Лекс Айрин » 15.11.2017 09:16:38

Сквозняк писал(а):Затем что break не вызывает ощущения надёжности и комфорта, каждый раз когда его в своём коде видишь, подсознательно мучительно пересчитываешь, куда оно выплюнет выполнение программы. А goto красиво и изящно посылает хоть за три экрана на цифру, которую с процедурой не спутаешь, а этих вложенных блоков begin end на этих трёх экранах тоже,


Вот как раз по этим причинам я вообще перестал пользоваться goto -- ошибешься меткой и замучаешься отлаживать, а break это тот же goto, но без метки конца перехода и с четко известным местом приземления.

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


Хорошее меню должно содержать не более семи пунктов верхнего уровня... остальных, желательно тоже, но это не так критично. И, кстати, попробуй сжать форму с меню до безобразия... ты увидишь, что его пункты могут перейти на другие строчки... так что партия думает за нас.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как сгенерировать событие?

Сообщение Сквозняк » 15.11.2017 14:46:43

zub писал(а):Это криворукопроблемы - в квоте описание жутчайшего говнокода, который допускать нельзя, но даже он спокойно разрулится без всяких свистотаймеров

Ты по русски даже пишешь криво - про какие-то квоты. Тоже говнокод.

ага, заато гото сразу выдает то что авттор сего тванения - куку))

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

Зачем тебе ширина менюшки? считай что ее нет... форма должна быть той ширины которую ей задал пользователь, а не той которую криво косо пытается расчитать автор поделия

Если кривое ПО не даёт рассчитать примерную ширину менюшки, то пользователь не знакомый с таким заскоком разработчиков средств написания кода может просто не догадаться что справа есть ещё один пункт меню и просто не растянет форму чтобы увидеть меню полностью. Обрезать меню может точно по границе пунктов.

Добавлено спустя 8 минут 29 секунд:
Лекс Айрин писал(а):Вот как раз по этим причинам я вообще перестал пользоваться goto -- ошибешься меткой и замучаешься отлаживать

Мне оно помогает отлаживать. Метки цифровые и логика у них просматривается чётче чем у кучи условий засунутых в кучу блоков.
Хорошее меню должно содержать не более семи пунктов верхнего уровня...

В моём меню всего шесть пунктов верхнего уровня. Это как-то помогает разглядеть спрятавшийся за формой шестой пункт? О том что он есть и надо растянуть форму чтобы его увидеть кто-то может и не догадаться.
И, кстати, попробуй сжать форму с меню до безобразия... ты увидишь, что его пункты могут перейти на другие строчки... так что партия думает за нас.

Ничего в GTK2 на другие строчки не переезжает. В партию пролезли опортунисты, космополиты и прочие - им не до нас. Посмотрел на гуёвину в вайне, там переезжает. На основной платформе разработки интерфейс не работает как положено - приехали.
Последний раз редактировалось Сквозняк 15.11.2017 15:03:29, всего редактировалось 1 раз.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: Как сгенерировать событие?

Сообщение zub » 15.11.2017 14:56:58

Твой Application.QueueAsyncCall расслабиться, если заняться его тестированием и встройкой в приложение, точно не даст. Та дочерняя форма не просто выключается из кучи мест, но и память отжирает при старте, а значит её почистить надо снаружи 1 раз а не 2, а также шлёт сообщения родительской форме. На всё это потребуется куча обработчиков, которые ещё надо синхронизировать, а будильник-дурильник справляется со всем один, только в его обработчик надо вписать

Расшифрую: в цитате выше описание говнокода... и детских проблем из него следующих

>>Проблемы недовольных нищебродов меня должны волновать?
Пока о своих проблемах пишешь ты))

>>Если кривое ПО не даёт рассчитать примерную ширину менюшки
нету никакой менюшки - последнее время ее очень модно отрываь от окна куданибудь. ПО не занимается ее отображением - считать ее оно тоже не должно
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Как сгенерировать событие?

Сообщение Лекс Айрин » 15.11.2017 15:03:38

Сквозняк писал(а):Мне оно помогает отлаживать.


В этом случае скорее речь идет о неправильной компоновке условий.

Сквозняк писал(а): Это как-то помогает разглядеть спрятавшийся за формой шестой пункт?


Нет, но позволяет использовать более узкое меню.

Сквозняк писал(а): О том что он есть и надо растянуть форму чтобы его увидеть кто-то может и не догадаться.


А тут есть другие методы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как сгенерировать событие?

Сообщение Сквозняк » 15.11.2017 15:10:01

zub писал(а):Расшифрую: в цитате выше описание говнокода... и детских проблем из него следующих
Гонокод в лазарусе - он не позволяет писать сложные вещи просто.
Пока о своих проблемах пишешь ты))

Код с гото у меня не глючит, а болит от него у тебя.
нету никакой менюшки - последнее время ее очень модно отрываь от окна куданибудь.

Запустил бинарь - есть менюшка и никуда не отрывается.
ПО не занимается ее отображением - считать ее оно тоже не должно

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

Добавлено спустя 4 минуты 1 секунду:
Лекс Айрин писал(а):В этом случае скорее речь идет о неправильной компоновке условий.

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

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

И все они плохие.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: Как сгенерировать событие?

Сообщение vada » 15.11.2017 15:47:50

Весело тут у вас! (с)
На ровном месте срач учинили :(
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Как сгенерировать событие?

Сообщение Сквозняк » 15.11.2017 16:06:19

Так лоровская школа:)
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: Как сгенерировать событие?

Сообщение Лекс Айрин » 15.11.2017 16:30:30

Сквозняк писал(а):Их бывает много, а потом их количество может поменяться. Каждый раз всё из-за этого переписывать?


Да. Потому что "их бывает много" означает, что код требует рефакторинга.

Сквозняк писал(а):Так какой запас у формы по ширине должен быть чтобы на любой шрифт его хватило?

Сквозняк писал(а):И все они плохие.


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

Добавлено спустя 1 минуту 28 секунд:
vada, это не срач... это вполне культурное обсуждение.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как сгенерировать событие?

Сообщение Alex2013 » 15.11.2017 17:46:23

О свежий ветер ! :D

1. По исходному вопросу ...
Ситуация знакомая . Лечится несколькими способами :
Через предварительный Enabled:=false; + иногда Visible:=false; (работает не всегда) .
(Кстати Close без free обычно работает без проблем там же по сути только Visible:=false; делают... А ПОНЯЛ ! "Дочка" модальная ? Ну тогда понятно ! Кстати, самый простой выход : отказаться то модальности "дочки" .. Появляются "проблемы" с удержанием фокуса, но все решается например через FormState:=fsStayOnTop)

Второй способ: послать сигнал "хозяину " (или обработать нажатие "в родителе" проверив активность "дочки") пусть с детишками(Дочериной формой ) сам разбирается "я тебя открыл, я и закрою! " :wink: .(Есть свои сложности, но решаемо )

Третий способ: как тут писали через таймер (или поток ) ( но это "не гут" , разве что таймер для чего-то вроде показа часов в программе УЖЕ крутится )


2. Не имею "ужасного страха" ни перед Break/Continue/Exit ни перед GoTo ...
Разумеется, без крайней нужды GoTo лучше не применять (и упаси бог массово! ) . Но если конструкция языка сохранена, то не вижу никаких "мистических" причин не использовать её совсем !
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Как сгенерировать событие?

Сообщение Сквозняк » 15.11.2017 19:21:00

Лекс Айрин писал(а):Да. Потому что "их бывает много" означает, что код требует рефакторинга.

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

Код: Выделить всё
Просто обеспечь первый запуск окна в полноэкранном режиме, чтобы пользователь гарантированно увидел все пункты. Для тебя это самый простой выход. Ну или на всю ширину монитора.

Это плохой выход. Ты видел главное окошко приложения pcsxr? А теперь представь похожее, только с растягиваемой формой и периодически убегающей за пределы окна менюшкой. Правда, как выяснилось убегает она не на всех тулкитах.

Добавлено спустя 15 минут 4 секунды:
Alex2013 писал(а): Кстати, самый простой выход : отказаться то модальности "дочки" ..

А вот это я не понял. Этих дочек больше десяти и лепить их не формошлёпством - тяжело и муторно. Работает - не трожь. После освоения трюка close + free из главной формы, через этих дочек хоть перестала память течь, и теперь в них не нужно при закрытии делать dispose контроллам - это и муторно и всё равно, каким-то не делалось и память текла.
Второй способ: послать сигнал "хозяину " (или обработать нажатие "в родителе" проверив активность "дочки") пусть с детишками(Дочериной формой ) сам разбирается "я тебя открыл, я и закрою! " .(Есть свои сложности, но решаемо )

Память при серии открытий и закрытий окна не течёт?
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: Как сгенерировать событие?

Сообщение zub » 15.11.2017 19:36:09

Форум превратился в сборище фриков. Закрыть форму = таймеры или сообщения? вы серьезно?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Как сгенерировать событие?

Сообщение Лекс Айрин » 15.11.2017 19:41:30

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


Если не переделывать старый код, то новый так же будет набором велосипедов, палок и гуано. И не считай это убытком. Это скорее практикум, польза от которого видна не сразу.

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


Ну тогда у тебя только один выход, но он еще хуже -- собирать программу под каждую систему, со всеми возможными шрифтами и разрешениями... что есть бред полный и я не думаю, что кто-то на него пойдет.
Правда, есть еще один вариант -- написать свое псевдоменю. Например, в виде строчки из TLabel, не знаю, правда, можно ли подручные меню отображать под компонентом, а не под курсором, но думаю вполне.

Сквозняк писал(а):Правда, как выяснилось убегает она не на всех тулкитах.


Осталось узнать баг компонента ли это или фича конкретной системы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как сгенерировать событие?

Сообщение Сквозняк » 15.11.2017 19:49:28

zub писал(а):Форум превратился в сборище фриков.

А, ну раз так, позвольте поинтересоваться, ви как к искривлению пространства, неделимости кванта и обнаружению "гравитационных волн" относитесь?

Закрыть форму = таймеры или сообщения?

Ты не поверишь, но наблюдать при закрытии формы окошки с предложением закрыть приложение из-за ошибки и утечки памяти, не очень весело. Реализуй в лазарусе лучшую работу штатных средств и такие вопросы не возникнут. Лишний параллельный обработчик событий не единственное что может напрягать - массив кнопок или картинок на форме никак кроме неведомыми хаками не реализовать.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: Как сгенерировать событие?

Сообщение zub » 15.11.2017 19:56:25

>>Реализуй в лазарусе лучшую работу
Перепиши свой говнокод - всё будет ок. и не гони на лазарус.
Не надо удалять контрол в обработчике его события. т.к. код этого контрола писал не ты и нет гарантии последующего обращения к уже убитому классу. Ферштейн?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

Рейтинг@Mail.ru