Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: CL | DM;

Вниз

В TCheckListBox проставить галочки тыкая в названия   Найти похожие ветки 

 
korvin ©   (2004-12-15 15:48) [0]

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


 
ssk ©   (2004-12-15 16:05) [1]

procedure TForm1.CheckListBox1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
 i: integer;
 P: TPoint;
begin
 P.X := X;
 P.Y := Y;
 i := CheckLIstBox1.ItemAtPos(P, True);
 CheckLIstBox1.Checked[i] := not CheckLIstBox1.Checked[i];
end;


 
ssk ©   (2004-12-15 16:09) [2]

так лучше:


procedure TForm1.CheckListBox1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
 i: integer;
 P: TPoint;
begin
 P.X := X;
 P.Y := Y;
 i := CheckLIstBox1.ItemAtPos(P, False);
 if i < CheckLIstBox1.Items.Count then
   CheckLIstBox1.Checked[i] := not CheckLIstBox1.Checked[i];
end;


 
KSergey ©   (2004-12-15 16:52) [3]

> [2] ssk ©   (15.12.04 16:09)
> так лучше:

Не, не так
Заменить

if i < CheckLIstBox1.Items.Count then

на

if i >= 0 then

и будет хорошо ;)


 
KSergey ©   (2004-12-15 16:56) [4]

За это

> [3] KSergey ©   (15.12.04 16:52)

прошу прощения. Не вник. Код мой ошибочен.


 
KSergey ©   (2004-12-15 16:57) [5]

Ну и если совсем уж придираться, то

вместо

P.X := X;
P.Y := Y;
i := CheckLIstBox1.ItemAtPos(P, False);

можно написать одну строку

i := CheckLIstBox1.ItemAtPos(Point(X, Y), False);

и убрать объявление P, соответсвенно.


 
ssk ©   (2004-12-15 17:00) [6]

>KSergey ©
Ну и если совсем уж придираться


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


 
korvin ©   (2004-12-16 09:13) [7]

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


 
KSergey ©   (2004-12-16 09:47) [8]

Ну проверять еще и указанных X: если он больше определенншго числа - то это текст, иначе - не чекать, т.к. это и так область чекалок. Как определить - не знаю. Можно просто экспериментально, хотя это и по-детски, возможно.


 
ssk ©   (2004-12-16 10:46) [9]


 if x > 14 then
   begin
     i := CheckListBox1.ItemAtPos(Point(X, Y), False);
     if i < CheckListBox1.Items.Count then
       CheckListBox1.Checked[i] := not CheckListBox1.Checked[i];
   end;


 
Александр Иванов ©   (2004-12-16 10:57) [10]

Объявить переменную Checked:boolean

onFormCreate - Checked := false;

onCheckClick - Checked := true;

onMouseDown -

if not Checked then
begin
i := CheckListBox1.ItemAtPos(Point(X, Y), False);
if i < CheckListBox1.Items.Count then
CheckListBox1.Checked[i] := not CheckListBox1.Checked[i];
end
else
Checked := false;


 
korvin ©   (2004-12-16 17:16) [11]

> KSergey ©   (16.12.04 09:47) [8]
Применил детский вариант ;)

> ssk ©   (16.12.04 10:46) [9]
Истинно так и работает. Спасибо.

> Александр Иванов ©   (16.12.04 10:57) [10]
Всётаки вариант попроще мне больше понравился, но спасибо за беспокойство.



Страницы: 1 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
14-1102934065
alex145
2004-12-13 13:34
2005.01.02
Стать админом


1-1103280746
Erik1
2004-12-17 13:52
2005.01.02
Запретить Refresh при изменении несвязаного с параметрами поля?


1-1103383258
Ivolg
2004-12-18 18:20
2005.01.02
Текст


14-1102569513
Layner
2004-12-09 08:18
2005.01.02
ИТ-специалистов вытеснят новые технологии


3-1100425554
Dell3r
2004-11-14 12:45
2005.01.02
Сортировка в DBGrid