Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TListView, Chekboxes 
:(
    Опции темы
Unregistered
Дата 1.6.2004, 07:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет. Возникла такая проблема: Использую компонент TListView с Checkboxes=true. Теперь нужно отследить момент, когда пользователь "чекнул итем". Как это сделать? Посмотрел по событиям компонента и ничего подходящего не нашел. Спасибо.
  Вверх
shilnik
Дата 1.6.2004, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 377
Регистрация: 22.12.2003

Репутация: нет
Всего: 1



А как же onClick?


--------------------
каталог товаров qp1
PM MAIL WWW   Вверх
Unregistered
Дата 1.6.2004, 09:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Никак. На OnClick не отследишь это состояние итема. Ну в общем-то решение я нашел, не знаю на сколько хорошее:

procedure TfrmMain.ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin

if (Change=ctState) then
begin
if Item.Checked then ..................


if not Item.Checked then .....................
end;
  Вверх
Girder
Дата 1.6.2004, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата
Ну в общем-то решение я нашел, не знаю на сколько хорошее

Нормальное решение.

Цитата
Никак. На OnClick не отследишь это состояние итема

Да нет, можно.

Для общего развития:

Смотри:
Код

procedure TForm1.XXXClick(Sender: TObject);
var i:integer;
   Item:TListItem;
begin
i:=XXX.Items.Count;
if i>0 then
 begin
  repeat
   dec(i);
   Item:=XXX.Items[i];
   if (Item.Checked) then
    begin
     ...// и делай с ним что хочь
    end;
  until (i=0);
 end;
end;


Если у тебя два миллиона записей, с Checkboxes.
Тогда можно вот так:
Код

var Item:TListItem;

procedure TForm1.XXXClick(Sender: TObject);
begin
if (Item<>nil)and(Item.Checked) then
 begin
   ...// и делай с ним что хочь
 end;
end;

procedure TForm1.XXXMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
Item:=XXX.GetItemAt(X,Y);
end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Unregistered
Дата 2.6.2004, 08:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну, это ж просто проверка идет на checked. Я может криво выразился... Если использовать онклик, то не будет реакции на пробел. Чекнуть-то и пробелом можно. Ну даже если это и опустить, то в первом варианте не узнаешь какой итем отмечен в данный момент, соответственно именно с ним не сопоставишь конкретные действия (они выполняться для всех чекнутых). Второй вариант тоже не подходит. С итемами связаны разные объекты образованные от разных классов. В момент когда юзер отмечает итем нужно произвести конкретные действия зависящие от связанного с итемом объекта. При простом клике на итеме ничего происходить не должно (не важно отмечен он или нет) в твоем коде это не прокатывает. Кроме того, нужно обработать и переход в состояние not Checked. Тут вообще ерунда получиться. В общем не состояние, а переход в состояние нужно отслеживать.
  Вверх
Girder
Дата 2.6.2004, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Согласен, я просто показал, что по извращавшись это в принципе реально сделать

Забыл совсем:
В Item.SubItems добавь запись о состоянии, к примеру:
-Item.SubItems.Add('1')-Если выбран
-Item.SubItems.Add('2')-Если не выбран
а потом их изменяй при изменении состоянии

Тогда проверяя Item.Checked и Item.SubItems.Strings[X] ты можеш точно сказать изменилось или нет состояние.

Удачи.

Это сообщение отредактировал(а) Girder - 2.6.2004, 11:16


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
<Spawn>
Дата 2.6.2004, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



А можно не париться и использовать предназначеное для этого событие OnClickCheck


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 2.6.2004, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Ой сори, не посмотрел про какой компонент идет речь - событие OnClickCheck есть у TCheckListBox, а не у TListView


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Unregistered
Дата 3.6.2004, 01:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну вариант с Change работает, на нем и остановлюсь наверное. Спасибо всем.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.