powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ListBox vs CheckListBox
40 сообщений из 40, показаны все 2 страниц
ListBox vs CheckListBox
    #39555425
Переехал утром с ListBox на CheckListBox. Нужно чтобы чекбокс реагировал даже если клик был по надписи. Сделал по аналогии с хелпом :

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm1.CheckListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: integer;
  mp: TPoint;
begin
  mp.X := X;
  mp.Y := Y;
  i := CheckListBox1.ItemAtPos(mp, True);
    if i < CheckListBox1.Items.Count then
      if CheckListBox1.Checked[i] then
        CheckListBox1.Checked[i] := False else CheckListBox1.Checked[i] := True;
end;



Теперь реагирует на клик по надписи, но отвалилась отработка по самому чекбоксу. Не понял юмора.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555430
Твой код обрабатывается и при клике по чекбоксу, из-за чего ты сам же снимаешь только что проставленную галочку.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555433
Зачем предполагать и фантазировать, код же целиком здесь.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555437
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так это были не фантазии, а правда. И еще.
Замени вот это:
небезопасный
Код: pascal
1.
2.
if CheckListBox1.Checked[i] then
        CheckListBox1.Checked[i] := False else CheckListBox1.Checked[i] := True;


На вот это
Код: pascal
1.
CheckListBox1.Checked[i] := not CheckListBox1.Checked[i];


, не издевайся над читателями.

А чтобы не снимать поставленное - придется координаты мыши проверять, например.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555438
Господи да это-то здесь причем. Там вообще ShowMessage будет.


Я просто желаю понять почему отвалилось то что прекрасно работало до доработки.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555439
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пятница была вчера.

Код: pascal
1.
2.
3.
4.
5.
6.
var
  i: integer;
begin
  i := CheckListBox1.ItemAtPos( Point( X, Y ), True );
  if ( i <> -1 ) then
    CheckListBox1.Checked[i] := not CheckListBox1.Checked[i];
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555441
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасныйЯ просто желаю понять почему отвалилось то что прекрасно работало до доработки.На каком основании утверждается, что что-то отвалилось? Тем более если код "приведён целиком".
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555442
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасныйЯ просто желаю понять почему отвалилось то что прекрасно работало до доработки.Значит у тебя туго с пониманием, раз тебе уже объяснили, подтвердили, разжевали, а ты по прежнему желаешь понять.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555446
Сейчас найду чем видеоэкран записать и покажу, а то мы до понедельника будем переписываться.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555449
Гаджимурадов РустамПятница была вчера.

Код: pascal
1.
2.
3.
4.
5.
6.
var
  i: integer;
begin
  i := CheckListBox1.ItemAtPos( Point( X, Y ), True );
  if ( i <> -1 ) then
    CheckListBox1.Checked[i] := not CheckListBox1.Checked[i];


Ну этот код работает так же как и мой. То же самое только в профиль. А мне бы решение проблемы а не перебор одного и того же.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555450
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты про галочки, то нужно либо какой-то флаг
ставить где-то (в каком-то событии) и проверять
его предварительно, либо тупо что-то вроде

Код: sql
1.
2.
3.
begin
  if x <= CheckListBox1.ItemHeight
    then Exit; // галочка сама нажмётся



Ну или наследника написать, который будет так
себя вести (или иметь соотв. опцию).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555451
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасный> К сообщению приложен файл (-.gif): cкачать. Размер - 54Kb

См. выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555464
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо пикироваться.

Так заработало или ещё что-то отвалилось/не устраивает?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555471
Еще не проверял идею - старательно и мучительно прикручиваю проверку через CheckListBox1ClickCheck
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555474
Вот так завелось все:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  i: integer;
begin
  i := CheckListBox1.ItemAtPos( Point( X, Y ), True );
  if x >= CheckListBox1.ItemHeight then
  if ( i <> -1 ) then
    CheckListBox1.Checked[i] := not CheckListBox1.Checked[i];



Рустам, от души - последняя подсказка помогла, там только со знаком ошибка была: надо не <= а наоборот >=

Спасибо.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555478
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасный,

Вот здесь такая же проблема и там приведено даже два решения: быстрое и правильное :)
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555522
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасныйпоследняя подсказка помогла, там только со знаком ошибка была: надо не <= а наоборот >=Никаких ошибок - у меня "then Exit", а не "then обработка".
И если делать наоборот, то не >=, а строго >.

alekcvp Вот здесь такая же проблема и там приведено даже два решения: быстрое и правильное :)А где там правильное?
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555544
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасный,

видимо, галочка срабатывает как положено, но клик тут же возвращает прежнее состояние. Надо еще проверять при клике, что координаты курсора не входят в область галочки.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555548
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
procedure GetCheckSize;
begin
  with TBitmap.Create do
    try
      Handle := LoadBitmap(0, PChar(OBM_CHECKBOXES));
      FCheckWidth := Width div 4;
    finally
      Free;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetCheckSize;
end;

procedure TForm1.CheckListBox1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  i: integer;
  R: TRect;
begin
  i := CheckListBox1.ItemAtPos( Point( X, Y ), True );
  if ( i <> -1 ) then
  begin
    R := CheckListBox1.ItemRect(i);
    R.Left := R.Left + FCheckWidth;
    if PtInRect(R, Point(X, Y)) then
      CheckListBox1.Checked[i] := not CheckListBox1.Checked[i];
  end;
end;
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555552
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer
Код: pascal
1.
2.
3.
Handle := LoadBitmap(0, PChar(OBM_CHECKBOXES));
R := CheckListBox1.ItemRect(i);
R.Left := R.Left + FCheckWidth;


И что, Вы считаете эти пляски лучше простой проверки на itemheight ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555560
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

ну как Вам сказать...
Ваш вариант, конечно, красивее.
Но бывают ситуации, когда itemheight не равно ширине области галочки. При стиле lbOwnerDrawFixed
когда нужно итему картинку подрисовать хотя бы 16x16.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555577
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, я не настаиваю, ситуации разные бывают, но разработчик-то
должен знать, OwnerDraw у него или нет, стандартные размеры
галочки или нет и пр.

Если уж делать правильно и по-человечески, то написать своего
наследника, в котором будет опция типа AllowCaptionPress default True.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555582
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЕсли уж делать правильно и по-человеческиЕсли по совести рассудить, то необходимость или отсутствие нажатия птички чекбокса при нажатии на текст - определяется вкусом разработчика.
А пользователям это по барабану. Они на птичку будут нажимать, ибо в инструкции написано "птичку ставить", а не на текст нажимать.
Такое даже в настройки выносить стыдно. Опять же, т.к. пользователям по барабану - значит зачем настройки захламлять.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555608
YuRockОни на птичку будут нажимать, ибо в инструкции написано "птичку ставить", а не на текст нажимать.
Сразу видно <<опытного>> пользователя. А теперь открой-ка настройки Дэлфи и удивись:
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555615
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моё мнение, что текст должен нажиматься и без опций.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555656
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА где там правильное?
Там где код больше всего. Я не проверял в дельфи, но на вскидку - вполне грамотно, и должно работать даже для Tri-State чекбоксов :)
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555660
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockопределяется вкусом разработчика.Логично, в принципе. Так же как шоткаты, контекстные меню и многое другое.
Предлагаю всё это тоже убрать, авось каким-то "пользователям это по барабану".

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

YuRockТакое даже в настройки выносить стыдно. Опять же, т.к. пользователям по барабану - значит зачем настройки захламлять.<рукалицо> Настройки не программы, а *компонента*, пользователь о них не в курсе.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555661
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpГаджимурадов РустамА где там правильное? Там где код больше всего.Странные у тебя способы определения правильного кода.

alekcvpвполне грамотно, и должно работать даже для Tri-State чекбоксов :)Tri-State и пр. - это фигня и само по себе правильность не означает.
Повторяю, правильно было бы писать наследника (или родной патчить),
в котором при нажатии на надпись вызывался бы тот же метод, что и
при нажатии на саму галочку (с выносом этого на всякий случай в
соотв. пропертю с дефолтным True).
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555667
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасныйА теперь открой-ка настройки Дэлфи и удивисьНу так это вообше косяк, когда птичка нажимается не только при клике на текст, а даже через 3 сантиметра справа на пустом месте.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555725
YuRockэто вообше косяк, когда птичка нажимается не только при клике на текст, а даже через 3 сантиметра справа на пустом месте.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555731
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock> Ну так это вообше косяк, когда птичка нажимается не только при клике на текст

Во-первых, ты уж не юли, ты утверждал "только на галочку".
Во-вторых, это стандартное виндовое (и вполне логичное)
поведение, когда кликается вся ширина надписи, даже если
там пустота (из-за пробелов или переноса).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555737
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамВо-первых, ты уж не юли, ты утверждал "только на галочку".
Во-вторых, это стандартное виндовое (и вполне логичное)Не везде. Это баттон со стилем чекбокс так себя ведет для простоты, если ему размер неверно указать (как в анимашках выше).
А, например, в три/листвью чекбоксы нажимаются только при нажатии непосредственно на галочку.

И я не утверждал "на галочку". Я говорил, что это дело вкуса программера, а пользователю пофиг.
Но если клик на пустом месте нажимает какую-то галочку, которая где-то далеко слева - это явный баг разработчика.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555745
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockИ я не утверждал "на галочку". Я говорил, что это дело вкуса программера, а пользователю пофиг.
ИМХО заблуждение. Например, на ноутбуке при разрешении FullHD и размере экрана ~15", надписи нормально читаются. Но вот выцеливание мышкой этого крохотного чекбокса вызывает лучи поноса в сторону разработчиков, в то время как ткнуть мышкой в текст в разы проще. Единственное, что я бы переключал его не просто по тыканью в текст, а по DblClick на надписи. Это решает сразу две проблемы: ту что пытается решить автор поста и нежелательное переключение флажка при случайном тычке в список (например с целью активировать неактивное окно).
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555753
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасныйА теперь открой-ка настройки Дэлфи и удивисьПутаете группировку самостоятельных (GroupBox) с набором в составе (CheckListBox).

В первом случае, клик по тексту (но не по пустому месту за ним, что - халтура) допустим за счет дистанции элементов друг от друга, облегчающей юзеру установку фокуса внимания. Во втором - размытие фокуса по множеству скомпенсировано отделением выбора элемента от позиционирования на нем; элемент, изменяющий свой состояние (, должен быть) четко обозначен для пользователя.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555755
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock> Не везде. Это баттон со стилем чекбокс так себя ведет для простоты

Ты точно с этой планеты? Брось на форму обычный чекбокс и проверь.

> А, например, в три/листвью чекбоксы нажимаются только

Именно. И в CheckListBox (не только в Delphi, но и в винде в целом,
по крайней мере, в старых версиях) - тоже. И не только не кликаются,
но даже не дабл-кликаются (что выше предлагают).

> И я не утверждал "на галочку". Я говорил, что это
> дело вкуса программера, а пользователю пофиг.

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

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

Клик на пустом месте рядом с надписью, а не "где-то далеко слева".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555785
ma1tusВо втором - размытие фокуса по множеству скомпенсировано отделением выбора элемента от позиционирования на нем; элемент, изменяющий свой состояние (, должен быть) четко обозначен для пользователя.
Еще один не с нашей планеты. Рустам, у нас нашествие инопланетян сегодня, пеленгуйте их ай-пи адреса!
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555788
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамYuRock> Не везде. Это баттон со стилем чекбокс так себя ведет для простоты

Ты точно с этой планеты? Брось на форму обычный чекбокс и проверь.
"Обычный чекбокс на форме" - это стандартный Windows-контрол класса 'button' со стилем BS_CHECK.

Всё остальное - чушь так чушь, мне всё равно.
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555833
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасный,
А чем такие картинки захватываются?
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39555904
alekcvpнебезопасный,
А чем такие картинки захватываются?

По секрету: https://lifehacker.ru/2016/05/27/gif-screencast-apps/
...
Рейтинг: 0 / 0
ListBox vs CheckListBox
    #39556111
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
небезопасныйalekcvpнебезопасный,
А чем такие картинки захватываются?
По секрету: https://lifehacker.ru/2016/05/27/gif-screencast-apps/
Я умею в гугл, спасибо. Меня интересовало чем пользуетесь конкретно вы.
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ListBox vs CheckListBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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