Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Help по TListView

2.6K
12 мая 2003 года
Shure
12 / / 05.05.2003
Народ может кто поможет, проблемма в следующем у меня TListView с чекбоксами ( необходимо для проги ) так вот как получать какой из Item'ов сейчас кликнут точнее в каком состояние находится чекбокс ( true или false )
пробовал так:
ListView1->Items->Item[ListView->ItemIndex]->Checked;
вылетает т.к. ItemIndex = -1
может кто знает как сделать.

Заранее благодарен
3.5K
12 мая 2003 года
vickr
19 / / 24.04.2003
Цитата:
Originally posted by Shure
Народ может кто поможет, проблемма в следующем у меня TListView с чекбоксами ...
...
Заранее благодарен



Держи кусок кода. Схема действий юзера при обычной работе с набором флажков (будь то TListBox или TListView) - пометить/снять нужные ему флажки и запустить какое-нибудь действие, которое учитывает сделанные им только что установки.
Есть форма Form1, список ListView1 с флажками (в нем 3 пункта - Item1, Item2, Item3; св-во ViewStyle==vsReport, CheckBoxes==true) и кнопка Button1.
Вот как будут анализироваться выбранные пользователем флажки, когда он нажмет на Button1:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString sMsg = "";
for(int i = 0; i < ListView1->Items->Count; i++)
if (ListView1->Items->Item->Checked)
sMsg += (ListView1->Items->Item->Caption + ";");
ShowMessage(sMsg);
}
Пробуй, понимай - удачи.

2.6K
12 мая 2003 года
Shure
12 / / 05.05.2003
Да ето все понятно ... ТОлько у мя на форме нет ни кнопок да и цикл организовывать не хочется т.к. идет жесткая привязка к колву Items а у меня онии динамически могут менятся

надо что то вроде

void __fastcall TMainForm::PCMassivClick(TObject *Sender)
{
if( PCMassiv->Items->Item[PCMassiv->ItemIndex]->Checked )
Application->MessageBox( "Включен","Test", MB_ICONQUESTION );
else
Application->MessageBox( "Выключен","Test", MB_ICONQUESTION );

}
3.5K
12 мая 2003 года
vickr
19 / / 24.04.2003
[QUOTE]Originally posted by Shure
Да ето все понятно ... ТОлько у мя на форме нет ни кнопок да и цикл организовывать не хочется т.к. идет жесткая привязка к колву Items а у меня онии динамически могут менятся
...

Понятно, что ты хочешь, но не совсем - ты не уточнил, в какой момент необходимо выводить Message - когда юзер щелкает непосредственно по флажку или щелкает по элементу списка в любом месте, кроме флажка?
Из твоего кода это не очевидно, т.к. TListView вообще не имеет св-ва ItemIndex (CBuilder 5)! Как у тебя компилятор не ругается?
В общем, для второго случая можно сделать так:
void __fastcall TForm1::LvwSelectItem(TObject *Sender, TListItem *Item,
bool Selected)
{
if ( Selected )
if( Item->Checked )
Application->MessageBox( "Включен","Test", MB_ICONQUESTION );
else
Application->MessageBox( "Выключен","Test", MB_ICONQUESTION ); */
}
или так:
void __fastcall TForm1::LvwClick(TObject *Sender)
{
if ( Lvw->Selected )
if( Lvw->Selected->Checked )
Application->MessageBox( "Включен","Test", MB_ICONQUESTION );
else
Application->MessageBox( "Выключен","Test", MB_ICONQUESTION );
}
У меня код работает, только что проверил.
Ответь, решил проблему или я тебя опять неправильно понял. :)
2.6K
12 мая 2003 года
Shure
12 / / 05.05.2003
У тя в вариантах везде присутствует Selected так вот ето событие и не происходит если не посредственно по checkbox кликать .. ((

ТОесть говоря твоими словами
Message - когда юзер щелкает непосредственно по флажку.

ItemIndex присутствует ( Borland 6 )

Оба варианта попробовал ... но они оба работают только после того как на Item кликать, а не на чекбоксе ...
3.5K
12 мая 2003 года
vickr
19 / / 24.04.2003
Цитата:
Originally posted by Shure
У тя в вариантах везде присутствует Selected так вот ето событие и не происходит если не посредственно по checkbox кликать .. ((

ТОесть говоря твоими словами
Message - когда юзер щелкает непосредственно по флажку.

ItemIndex присутствует ( Borland 6 )

Оба варианта попробовал ... но они оба работают только после того как на Item кликать, а не на чекбоксе ...



Полностью согласен. Так вот, методом проб и ошибок отработан следующий код (уже в 6 Билдере):
void __fastcall TForm1::ListView1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
if( Button == mbLeft )
{
TListItem *pItem = ListView1->GetItemAt(X, Y);
if( pItem )
{
if( pItem->Checked )
ShowMessage("Вкл");
else ShowMessage("Выкл");
// это необязательно:
pItem->Selected = true;
}
}
}
Несколько извращенно, но работает. Если еще не нашел решения сам, попробуй.

2.6K
13 мая 2003 года
Shure
12 / / 05.05.2003
:P мдя )))) ....
Мне тут пришла в голову сумашедшая идея )) Которая почти решит все проблеммы. Просто вместо чекбокса ( и почему при его клике не происходит фокус на итеме ) буду использовать картинку чекбокса )) Извращение но будет работать гарантированно :)
3.5K
13 мая 2003 года
vickr
19 / / 24.04.2003
Цитата:
Originally posted by Shure
:P мдя )))) ....
Мне тут пришла в голову сумашедшая идея )) Которая почти решит все проблеммы. Просто вместо чекбокса ( и почему при его клике не происходит фокус на итеме ) буду использовать картинку чекбокса )) Извращение но будет работать гарантированно :)


Не спорю, это будет всем извратам изврат. Единственное преимущество - ты сможешь использовать фложок любого вида, отличного от стандартного, ну и, конечно, то, что пример будет работать (правда придется попотеть). Но конечному пользователю такая фича - что муха слону. Что касается предыдущего примера - то он вроде бы полность рабочий, сам проверял. Я бы, конечно, не стал так заморачиваться, но все в твоих руках - дерзай :D

2.6K
13 мая 2003 года
Shure
12 / / 05.05.2003
У меня он почему то не сработал ((
Хотя надо еще повозится. Кстати прога не для пользователей а для админов, вкл/выкл учет интернет трафика :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог