Форум: "Основная";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
ВнизВ 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c