powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ListBox vs CheckListBox
25 сообщений из 40, страница 1 из 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
25 сообщений из 40, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ListBox vs CheckListBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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