![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В TCheckListBox проставить галочки тыкая в названия [D6, Win95/98, WinXP]
korvin © (2004-12-15 15:48:00)TCheckListBox заполнен неким списком.
Чекет проставляется только если юзер попал мышей в квадратик для этой галочки, а на списке не реагирует. Как доработать сей недостаток?
korvin (2004-12-16 17:16:00) [1]> KSergey © (16.12.04 09:47) [8]
Применил детский вариант ;)
> ssk © (16.12.04 10:46) [9]
Истинно так и работает. Спасибо.
> Александр Иванов © (16.12.04 10:57) [10]
Всётаки вариант попроще мне больше понравился, но спасибо за беспокойство.
Александр Иванов (2004-12-16 10:57:00) [2]Объявить переменную 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;
ssk (2004-12-16 10:46:00) [3]
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;
KSergey (2004-12-16 09:47:00) [4]Ну проверять еще и указанных X: если он больше определенншго числа - то это текст, иначе - не чекать, т.к. это и так область чекалок. Как определить - не знаю. Можно просто экспериментально, хотя это и по-детски, возможно.
korvin (2004-12-16 09:13:00) [5]Всё бы хорошо, но данная процедура не даёт теперь по самому полю чекета нажимать ... точнее ставит галочку и вмиг снимает.
ssk (2004-12-15 17:00:00) [6]>KSergey ©
Ну и если совсем уж придираться
да, действительно. так даже лучше смотрится.
KSergey (2004-12-15 16:57:00) [7]Ну и если совсем уж придираться, то
вместо
P.X := X;
P.Y := Y;
i := CheckLIstBox1.ItemAtPos(P, False);
можно написать одну строку
i := CheckLIstBox1.ItemAtPos(Point(X, Y), False);
и убрать объявление P, соответсвенно.
KSergey (2004-12-15 16:56:00) [8]За это
> [3] KSergey © (15.12.04 16:52)
прошу прощения. Не вник. Код мой ошибочен.
KSergey (2004-12-15 16:52:00) [9]> [2] ssk © (15.12.04 16:09)
> так лучше:
Не, не так
Заменить
if i < CheckLIstBox1.Items.Count then
на
if i >= 0 then
и будет хорошо ;)
ssk (2004-12-15 16:09:00) [10]так лучше:
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;
ssk (2004-12-15 16:05:00) [11]
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;