Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ListView, lvoCheckboxes, lvoOwnerData - проблемка [Delphi, Windows]


Майк_110 ©   (2004-05-29 11:57:00) 

Преамбула: FAQ читал, и по форуму вроде искал. :)

1. Создаю ImageList из ресурса 'CHECKBOX':
 ilCheck := NewImagelist(frmMain);
 ilCheck.ImgWidth := 12;
 ilCheck.ImgHeight := 12;
 ilCheck.LoadBitmap('CHECKBOX', clFuchsia);


2. Далее - создаю ListView:
 lvItems := NewListview(panMid, lvsDetail, [lvoGridLines, lvoCheckboxes,
            lvoRowSelect, lvoNoSortHeader, lvoFlatsb],
            nil, nil, ilCheck);


3. Далее - добавляю один пункт по-обычному:
lvItems.LVAdd('Item', -1, [lvisBlend], 1, -1, 0);

Работает.Т.е. "галочка" переключается.

Вариант №2 - с "виртуальным" ListView.
1. то же, что и выше.
2. то же, но с lvoOwnerData:
 lvItems := NewListview(panMid, lvsDetail, [lvoGridLines, lvoCheckboxes,
            lvoRowSelect, lvoNoSortHeader, lvoOwnerData, lvoFlatsb],
            nil, nil, ilCheck);

3. Чуть ниже:
 lvItems.OnLVData := TOnLVData( MakeMethod( lvItems, @lvItems_OnLVData ) );
4. Чуть выше :)
procedure lvItems_OnLVData( Dummy: Pointer; Sender: PControl; Idx, SubItem: Integer;
             var Txt: String; var ImgIdx: Integer; var State: DWORD;
             var Store: Boolean );
begin
 case SubItem of
    0: Txt := arrCatItemRecs[Idx].id;
    1: Txt := arrCatItemRecs[Idx].title;
 end;
 lvItems.LVItemStateImgIdx[Idx] := 1;
end;


Интересующая строка выделена жирным. Нужного эффекта не получается.
В чем подвох?
Неужели в виртуальном ListView нельзя использовать LVItemStateImgIdx ?


Майк_110   (2004-06-07 21:14:00) [1]

и напоследок.. резюме (для архива).

procedure lvItems_OnLVData( Dummy: Pointer; Sender: PControl; Idx, SubItem: Integer;
             var Txt: String; var ImgIdx: Integer; var State: DWORD;
             var Store: Boolean );
var
 StateImgIdx: DWORD;
begin
 case SubItem of
    0: Txt := arrCatItemRecs[Idx].id;      // column 1
    1: Txt := arrCatItemRecs[Idx].title;   // column 2
    2: Txt := arrCatItemRecs[Idx].price;   // column 3
 end;
 if (arrCatItemRecs[Idx].checked) then StateImgIdx := 2
   else StateImgIdx := 1;
 State := (State xor $F) or ((StateImgIdx and $F) shl 12);
end;


Майк_110   (2004-06-06 23:59:00) [2]

Фантастика :) как же я сам не догадался :))
Большое спасибо! Вероятно я где-то это упустил в документациях.


Vladimir Kladov   (2004-06-06 10:03:00) [3]

shl 12


Майк_110   (2004-06-06 07:48:00) [4]

procedure lvItems_OnLVData( Dummy: Pointer; Sender: PControl; Idx, SubItem: Integer;
             var Txt: String; var ImgIdx: Integer; var State: DWORD;
             var Store: Boolean );
begin
 case SubItem of
    0: Txt := arrCatItemRecs[Idx].id;
    1: Txt := arrCatItemRecs[Idx].title;
    2: Txt := arrCatItemRecs[Idx].price;
 end;
  State := 1;  // 0, 1, 2
end;


Изменение значения State ни на что не влияет в данном случае. По крайней мере внешне. :(


Vladimir Kladov   (2004-06-05 10:52:00) [5]

Когда список виртуальный, надо правильно устанавливать значение параметра var State: DWORD;, а присваивать уже ничего ничему не надо в обработчике.


Майк_110   (2004-06-05 06:58:00) [6]

дык мне вроде бы надо как раз LVItemStateImgIdx (?)
т.е. когда есть и ImageIndex и StateImgIdx - должны отображаться две иконки подряд, вот мне нужно StateImgIdx, которая почему-то не влияет на отображение ListView с виртуальным содержимым. :(


Gandalf   (2004-06-04 18:53:00) [7]

Насколькл я понимаю ты перепутал...

ListView1.LVItemImageIndex ( ImgIdx )
<>
ListView1.LVItemStateImgIdx ( State )


Майк_110   (2004-06-02 22:10:00) [8]

up


Майк_110   (2004-05-29 11:59:00) [9]

в принципе в procedure lvItems_OnLVDataя могу менять ImgIdx, но... это ведь немножко другой коленкор :) не тот, что предполагался.


Наверх

Титульная страница Поиск, карта сайта Написать письмо