|
Вопрос # 363/ вопрос решён / |
|
Как сделать, чтобы галочки ставились в CheckListBox не только при нажатии на область пометки, но и при нажатии на название элемента?
======================================
Что напрашивалось сразу - я написал обработчик событий на OnClick и вроде заработало, но после этого при нажатии на область пометки - галочка появляется и сразу исчезает! Забавно так))) Прилагаю обработчик! Может както его модифицировать?
Приложение: Переключить в обычный режим- procedure TOtchForm3.CheckListBox1Click(Sender: TObject);
- begin
- CheckListBox1.Checked[CheckListBox1.ItemIndex]:= not
CheckListBox1.Checked[CheckListBox1.ItemIndex];
- end;
-
 |
Вопрос задал: RedMask (статус: Посетитель)
Вопрос отправлен: 28 февраля 2007, 10:34
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: Иусов Сергей Ник.
Здравствуйте, RedMask!
Забавный обработчик, думаю он войдет в анналы истори :)))
Попробуй так:
PS: Не проверял, могут быть ошибки в синтаксисе :)
Приложение: Переключить в обычный режим- procedure TOtchForm3.CheckListBox1Click(Sender: TObject);
- var
- mes:string;
- begin
- if (Sender as TCheckListBox).Checked[(Sender as TCheckListBox).ItemIndex] then
- mes:=' checked'
- else
- mes:=' unchecked';
- ShowMessage('Item: "'+(Sender as TCheckListBox).Items[(Sender as
TCheckListBox).ItemIndex]+mes);
- end;
 |
Ответ отправил: Иусов Сергей Ник. (статус: 3-ий класс)
Время отправки: 28 февраля 2007, 10:56
Оценка за ответ: 4
Комментарий к оценке: Ну не знаю, в чём я не правильно задал вопрос %))
|
Ответ #2. Отвечает эксперт: Роман
Здравствуйте, RedMask!Вот работающий код.Нужно для проверки использовать State которое имеет 3 состояния:cbUnchecked-выключен,cbChecked-включен,cbGray-серое состояние.
Приложение: Переключить в обычный режим- procedure TForm1.CheckListBox1Click(Sender: TObject);
- begin
- if (Sender as TCheckListBox).State[(Sender as TCheckListBox).ItemIndex]=cbChecked then
- (Sender as TCheckListBox).Checked[(Sender as TCheckListBox).ItemIndex]:=false
- else
- (Sender as TCheckListBox).Checked[(Sender as TCheckListBox).ItemIndex]:=true;
- end;
 |
Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 28 февраля 2007, 11:41
Оценка за ответ: 4
Комментарий к оценке: Работает, если в OnClickCheck поставить abort =)
|
Ответ #3. Отвечает эксперт: Николай Рубан
Единственное что могу еще дополнительно порекомендовать, так это просто пропишите в оба обработчика (Click и ClickCheck) одинаковые действия...
Смотрите приложение.
Удачи!!!
Приложение: Переключить в обычный режим- procedure TForm1.CheckListBox1Click(Sender: TObject);
- begin
- if CheckListBox1.Selected[CheckListBox1.ItemIndex] then
- CheckListBox1.Checked[CheckListBox1.ItemIndex]:= not
CheckListBox1.Checked[CheckListBox1.ItemIndex];
- end;
-
- procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
- begin
- if CheckListBox1.Selected[CheckListBox1.ItemIndex] then
- CheckListBox1.Checked[CheckListBox1.ItemIndex]:= not
CheckListBox1.Checked[CheckListBox1.ItemIndex];
- end;
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 28 февраля 2007, 14:10
Оценка за ответ: 5
Комментарий к оценке: Я сделал что-то типо этого! Спасибо
|
Ответ #4. Отвечает эксперт: Aymenel
Здравствуйте, RedMask!
var
Flag: boolean;
procedure TForm1.CheckListBox1Click(Sender: TObject);
begin
if not Flag then
CheckListBox1.Checked[CheckListBox1.ItemIndex]:= not CheckListBox1.Checked[CheckListBox1.ItemIndex];
Flag := False;
end;
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
begin
Flag := True;
end;
 |
Ответ отправил: Aymenel (статус: 2-ой класс)
Время отправки: 28 февраля 2007, 19:39
Оценка за ответ: 5
Комментарий к оценке: Работающий вариант! :-)
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 28 февраля 2007, 14:55; участников в обсуждении: 3.
|
RedMask (статус: Посетитель), 28 февраля 2007, 12:15 [#1]:
Не могу пока поставить оценки пока, потому что.
-Иусов Сергей Ник, ваш обрабочик выдаёт сообщение уже после изменения статуса пометки, поэтому не могу использовать
-Роман, ваш обработчик почему то также работает, как и мой! При нажатии на пометку галочка появляется и сразу исчезает
|
|
Иусов Сергей Ник. (статус: 3-ий класс), 28 февраля 2007, 12:25 [#2]:
Тогда:
1. Учимся правильно задавать вопросы
2. Используем событие OnClickCheck
|
|
Иусов Сергей Ник. (статус: 3-ий класс), 28 февраля 2007, 13:09 [#3]:
Коментарий к коментарию (извините за тавтологию) к моему ответу.
Вопрос был: Модифицировать обработчик.
Обработчик был модифицирован, модификация вопрошающего не устроила. Возникает вопрос: почему? Наверное нужно было объяснить что требуется получить от модифицированного обработчика.
|
|
RedMask (статус: Посетитель), 28 февраля 2007, 14:13 [#4]:
Не очень хочу спорить, но вопрос был не модифицировать обработчик, а "Как сделать, чтобы галочки ставились в CheckListBox не только при нажатии на область пометки, но и при нажатии на название элемента?" - цитата оттуда! А дальше я просил "Может както его (обработчик)модифицировать?", но это не значит, что я на этом настаиваю! Важнее решить ситуацию, а способ предлагаете вы. Всё оказалось очень просто, в другом обработчике поставил Abort
|
|
Роман (статус: 5-ый класс), 28 февраля 2007, 14:55 [#5]:
procedure TForm1.CheckListBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
CheckListBox1ClickCheck(Sender);
end;
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
begin
if (Sender as TCheckListBox).State[(Sender as TCheckListBox).ItemIndex]=cbChecked then
(Sender as TCheckListBox).Checked[(Sender as TCheckListBox).ItemIndex]:=false
else
(Sender as TCheckListBox).Checked[(Sender as TCheckListBox).ItemIndex]:=true;
end;
procedure TForm1.CheckListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
try
if Key = vk_Space then
CheckListBox1ClickCheck(Sender) ;
except
on EListError do end;
end;
У меня работает.
|
31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|