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

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

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

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

Сообщение Сквозняк » 15.11.2017 20:01:22

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

Время не резиновое. Пока ты будешь пытать добиться идеального форматирования исходников, говнокод захватит ресурсы и станет стандартом.
Ну тогда у тебя только один выход

Забить :mrgreen: У большинства отобразится, а у остальных - и так сойдёт, как-нибудь справятся :P
Осталось узнать баг компонента ли это или фича конкретной системы.

На x86_64 линуксовых лазарусах, установленных из rpm, с GTK2 тулкитом наблюдаю такой же эффект убегания менюшки за край формы. На лазарусе 1.4.4 и более древних при уменьшении ширины окна менюшка отображается не вся, а на лазарусе 1.6.4 отключили растягиваемость окошка - теперь его уже не сделаешь и на фичу менюшки не полюбуешься.

Добавлено спустя 8 минут 57 секунд:
zub писал(а):Перепиши свой говнокод - всё будет ок. и не гони на лазарус.

Русскую документацию по написанию таких сложных приложений без того что ты называешь говнокодом в студию!
Не надо удалять контрол в обработчике его события. т.к. код этого контрола писал не ты и нет гарантии последующего обращения к уже убитому классу. Ферштейн?

Найн! Закрывать окошки надо и очищать выжранную ими память - тоже надо. В окошко могут грузиться тяжёлые картинки или тонны текста, если их не чистить, они всё равно будут каждый раз грузиться заново, в новые области памяти. Способ этого избежать нашли, но ты чем-то недоволен.
Сквозняк
энтузиаст
 
Сообщения: 579
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение Лекс Айрин » 15.11.2017 20:23:52

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


Не так... он уже захватил. И знаешь, я, например, не знаю какую операционку использовать, так как все не устраивают.

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


Насколько я понимаю, Zub хочет сказать, что при необходимости выстрела в ногу ее (ногу) желательно убрать в сторону. Если компонент удаляет себя, то его надо просто отметить удаляемым. Если надо закрыть все окно, то стоит пометить форму закрывающейся, тогда, при завершении обработки нажатия, окно просто закроется, так как очередь перейдет к обработчику onClose. Насколько я помню, это функция Hide.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4169
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение zub » 15.11.2017 21:01:22

Закрывать окна надо - их все закрывают. и то что там загружено - убивают или нет по нужде. проблем с этим нет никаких. У других. У тебя почемуто есть

>>Вот такой обработчик стек не ломает:
>>А в procedure TForm9.Button1KeyDown практически тоже самое - ломает.
А ты поставь ка точку останова внутри и дотямай почему так происходит. и почему оба эти варианта не годны
zub
долгожитель
 
Сообщения: 2275
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Сквозняк » 15.11.2017 21:26:40

zub писал(а):Закрывать окна надо - их все закрывают. и то что там загружено - убивают или нет по нужде. проблем с этим нет никаких. У других. У тебя почемуто есть

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

Увы, когда было желание изучить ассемблер, не было возможности: ПО и литературы, а когда оно появилось вместе с интернетом, то желание сильно поуменьшилось :P Так что копайтесь в асме сами, у меня и так сейчас ПО работает и утечка памяти в нём стабилизировалась.

Добавлено спустя 16 минут 45 секунд:
Лекс Айрин писал(а):Насколько я помню, это функция Hide.

Потратил время, а на выходе https://yadi.sk/d/O0ht_yGZ3PjHyj глюки. Сама себя форма скрывает плохо. А если передавать команду сделать эту операцию родительской форме, то опять надо делать параллельный системному обработчик событий. И зачем тогда было со мной спорить :wink:
Сквозняк
энтузиаст
 
Сообщения: 579
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение zub » 15.11.2017 21:51:27

Это не баг. это закономерность вызваная непониманием
zub
долгожитель
 
Сообщения: 2275
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение sign » 16.11.2017 07:19:50

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


1.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
sign
энтузиаст
 
Сообщения: 883
Зарегистрирован: 30.08.2009 09:20:53

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

Сообщение Лекс Айрин » 16.11.2017 09:17:01

Сквозняк писал(а):. Сама себя форма скрывает плохо.


Это как? В этом случае при выходе из любого приложения был бы глюк.

Код: Выделить всё
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
Close;
end;

Что закрываем?

Добавлено спустя 2 минуты 32 секунды:
Сквозняк писал(а):А если передавать команду сделать эту операцию родительской форме, то опять надо делать параллельный системному обработчик событий.


Зачем? Чем тебя не устраивает Form.Hide?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4169
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение Mikhail » 16.11.2017 11:13:29

Сквозняк писал(а):Затем что break не вызывает ощущения надёжности и комфорта

Совсем даже наоборот, Exit, break, continue имеют фиксированную точку выхода и, самое главное, посетят соответствующие finally блоки, в отличие от goto. Так что подобное применение goto это потенциальная утечка.

Кроме того использование для меток чисел уже давно устарело и рекомендуются человекопонятные идентификаторы.

В общем в данном случае совершенно не мотивированное применение goto <=> говногод. :D

PS не понял при чем тут break, он же для циклов.
Mikhail
постоялец
 
Сообщения: 481
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение alexs » 16.11.2017 14:55:29

Рекорд побит? 3 страницы треда о том как закрыть форму...

Штатный Close чем не устаивает?
А в OnClose - CloseAction:=caFree;
И всё. И форма будет уничтожена, и ресурсы освобождены.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3494
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение Лекс Айрин » 16.11.2017 15:00:11

alexs, то ли еще будет. Как я понял, человек просто не хочет рефакторить код и разбираться в чем причина глюков.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4169
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение pupsik » 16.11.2017 15:20:53

Сквозняк

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
  if FF_2=0 then
  begin
    Form2 := TForm2.Create(Application); //почему так? решайте сами, но: F_2: TForm2 относительно равно Form2
    FF_2:=1;
  end;
  Form2.Show;
  Form1.enabled:=false;
end;


Код: Выделить всё
procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.enabled:=true;
  Form1.BringToFront;
  form2.Hide;
end;
pupsik
энтузиаст
 
Сообщения: 1014
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение Сквозняк » 16.11.2017 21:40:01

Лекс Айрин писал(а):Это как? В этом случае при выходе из любого приложения был бы глюк.

В примере на кнопку в окне с картинкой нажимал? А ты нажми и полюбуйся на окно с ошибкой.
Что закрываем?

Родительскую форму. И, внезапно, она закрывается.
Зачем? Чем тебя не устраивает Form.Hide?

Ты ведёшь беспредметный разговор как тролль из "интернетвойск" РАН. В примере Form.Hide вызвало глюк, ты это проигнорировал и опять гонишь рекламу не рабочего кода. Тебе был дан образец глючного кода, построенного по твоим описаниям. Характерной особенностью троллей этого типа является отрицание и неиспользовании информации из некошерных источников, программируемый склероз и реклама нерабочей хрени по кругу, авось человек запутается и зомбируется.

Добавлено спустя 6 минут 5 секунд:
Лекс Айрин писал(а):alexs, то ли еще будет. Как я понял, человек просто не хочет рефакторить код и разбираться в чем причина глюков.

Ну ты же сам в приложенном примере не показал как этот глюк победить, а разбираться ещё и в твоих глюках - это мне не надо :mrgreen: Если ты думаешь, что интерфейс с окошками, это самая сложная часть кода, то ты крупно ошибаешься. Погромисты на плюсах на такую сложность вообще не берутся без живительных плёток манагеров с плюсами не знакомыми. И ты вот тут предлагаешь рефакторить рабочий код ради избавления от гото? Товарищи Сталин с Берией знаешь чтобы сделали в ответ на такое предложение :wink:
Сквозняк
энтузиаст
 
Сообщения: 579
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение zub » 16.11.2017 21:51:27

Сквозняк
ага
сначала
F_2:=TForm2.Create(Application);
а потом
form2.Hide;
не заглядывал что там в form2 та лежит? или умники справляются без отладчика?

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

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

Сообщение vitaly_l » 16.11.2017 21:55:27

Сквозняк писал(а):Сталин с Берией знаешь

Попробуйте воспроизвести глюк на пустой форме (без остального кода) и прикрепите сюда (на форум) этот проект.
И вот этот код, в новый проект, вставьте:
alexs писал(а):Штатный Close чем не устаивает?
А в OnClose - CloseAction:=caFree;


Получится сбой? :wink:

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3099
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Сквозняк » 16.11.2017 21:56:52

Mikhail писал(а):Совсем даже наоборот, Exit, break, continue имеют фиксированную точку выхода

Не видимую для программиста.
Кроме того использование для меток чисел уже давно устарело и рекомендуются человекопонятные идентификаторы.

Это говорит человек пишущий код на человеконепонятном алфавите, на языке, в котором сплошь и рядом у слова по 20-30 значений, а многих используемых значений нет вовсе.
В общем в данном случае совершенно не мотивированное применение goto <=> говногод.

Только к моему коду это обычно не относится :D Гото в нём даже если большой роли и не выполняет, то добавляет читаемости и эстетической красоты.

Добавлено спустя 2 минуты 23 секунды:
vitaly_l писал(а):Попробуйте воспроизвести глюк на пустой форме (без остального кода) и прикрепите сюда (на форум) этот проект.

Была же в сообщении ссылка на яндексдиск с примером https://yadi.sk/d/O0ht_yGZ3PjHyj
Сквозняк
энтузиаст
 
Сообщения: 579
Зарегистрирован: 29.06.2006 22:08:32

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru