Удаление компонента по щелчку (самого себя)

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

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

Re: Удаление компонента по щелчку (самого себя)

Сообщение wwswowsogon » 12.12.2023 22:50:31

Vlad04 писал(а):
wwswowsogon писал(а):Да, с этим кодом что-то не так. :) Но я, вроде бы, такого не писал в демо. Вы на что-то намекаете? :)

Думайте. Включите в параметрах проекта на вкладке Отладка проверку диапазона.


Ради эксперимента создал отдельную демку с вышеприведённым кодом:

Код: Выделить всё
var
  i, k: Byte;
  //i, k: Word;
  //i, k: Smallint;
begin

  k := 0;

  for i := 0 to k - 1 do
    begin

      ShowMessage(IntToStr(i));
    end; 

Был удивлён. Если i и k - Integer / Smallint, цикл не выполняется. Если же i и k - Byte / Word, то выполняется, хотя на мой взгляд не должен. И i в цикле возрастает от 0 до... проверять не стал, но рискну предположить, что до верхней границы диапазона данного типа минус то число, которое вычитается из k, в данном случае 1. Но это оооочень странно. :)
Понять логику происходящего, по-видимому, выше моих сил. По-видимому, разница поведения как-то связана с тем, что Byte и Word - беззнаковые типы, а Integer и Smallint - знаковые. Ну и да, если включить проверку в Отладке, то при использовании Byte / Word получаем Range Check Error.
Кстати, в определённых случаях, при использовании типа Byte компилятор предупреждает, что значение переменной может выходить за пределы диапазона.
Хороший урок, спасибо :) Но всё же я не понял, какое отношение всё это имеет к демо, которое с удалением компонентов. Там переменная в счётчике никогда не должна выйти за пределы диапазона Word. И вышеуказанный код я бы никогда в жизни не написал при работе, просто на всякий случай, безопасности ради. :)
Ну и, как я и говорил, замена Word на Integer проблему в проекте не решило. Если не ошибаюсь, ровно те же глюки.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Удаление компонента по щелчку (самого себя)

Сообщение zoltanleo » 13.12.2023 03:34:13

Пошли компоненту PostMessage с требованием уничтожить себя
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Удаление компонента по щелчку (самого себя)

Сообщение wwswowsogon » 13.12.2023 19:25:05

zoltanleo писал(а):Пошли компоненту PostMessage с требованием уничтожить себя


Предложение хорошее, но это WinAPI. Хотелось бы кроссплатформенности. Есть идея, как это сделать в Linux?..

P. S. Думаю, всё же надо использовать ListView, если говорить о практической стороне дела. :)
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Удаление компонента по щелчку (самого себя)

Сообщение zoltanleo » 13.12.2023 19:44:05

wwswowsogon писал(а):Предложение хорошее, но это WinAPI.

Добавь в uses LCLInfl, и будет щастье :)
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Удаление компонента по щелчку (самого себя)

Сообщение zoltanleo » 16.12.2023 19:59:24

wwswowsogon писал(а): Думаю, всё же надо использовать ListView,

не надо. Попробуй на линуксе

https://github.com/zoltanleo/Laz_kill_himself
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Пред.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru