Конференция "KOL" » вирт. ListView и чекбоксы
 
  • Dy1 (12.05.10 20:09) [0]
    КОЛнМЦК 2.90
    "обычный" список по неизвестной мне причине не сразу стал отображать чекбоксы, а в виртуальном режиме не показывал ни разу. Что не так делаю?

    свойства ЛВ: lvoGrigLines, lvoCheckBoxes, lvoRowSelect, lwoOwnerData
    procedure TForm1.LV1LVData(...
    begin
     ImgIdx := -1; // может быть галки рисуются вручную? Можно ткнуть носом?
     Store := False;
     case SubItem of
       0: Txt := tmp.Items[Idx];
       1: Txt := Int2Str( tmp.Objects[Idx] );
     end;
    end;

  • Vladimir Kladov © (12.05.10 21:49) [1]
    Так пришлось что чекбоксы в обычном listview я проверял не очень давно. Соответственно хотель бы уточнить до начала разбирательств, что означает не сразу. Виртуальный тогда не пробовал, не знаю, будет ли на него распространяться сия фича, может и нет. В этом случае обычным путем - галки в imagelist, возвращать индекс.
  • Dy1 (12.05.10 22:34) [2]
    закинул на форму второй LV, настроил - нет чекбоксов. Долго возился, заменил новым - опять нет. Потом кинул лв заново, имя с lv2 поменял на lv3 (потом его исправлял в коде), настроил, методы прощёлкал (присвоил уже написанные) - заработало. Это обычные.
    Теперь такая же проблема с LV1, но он мне нужен только виртуальным. Вышеописанное не подошло.

    Пробовал настроенный LV3 переключить в виртуальный - место выделяется, но квадратики не рисуются

    PS  Когда первый раз писал код, было без lvoCheckBoxes, его я включил позже, тогда и заметил эту проблему
  • Vladimir Kladov © (13.05.10 16:09) [3]
    Может, MCK не срауз код перегенировал, или build нужен был? У меня вроде как-то сразу работает. Delphi-то какой версии? Я под Delphi5 проверял.
  • Dy1 (13.05.10 23:27) [4]
    D7, билд был. Это началось не раньше версии 2.70, точно не помню
  • Dy1 (13.05.10 23:57) [5]
    возможно нашёл в чём дело.
    Чекбоксы не рисуются в нормальном режиме, если определён обработчик OnLVData.
    Включаю lvoOwnerData, всё норм кроме чекбоксов.
  • Dy1 (14.05.10 19:02) [6]
    вопрос по теме - как отображать?
  • Vladimir Kladov © (14.05.10 21:22) [7]
    Чекбокс - это просто индекс в списке ImageList. В ImageList добавляется свой крыжик, и либо его индекс, либо -1 (или индекс картинки без чекбокса) - в ImgIdx. Анализировать клик на крыжике (и нажатие пробела, например) и самостоятельно фиксировать состояние "checked". Виртуальный он на то и виртуальный, что хранить эти и никакие другие данные не обязан.
  • Dy1 (14.05.10 22:17) [8]
    в ImageList1 3 картинки (бмп24, 16х16). Код: ImgIdx := 1; в imageListState прописал imageList1.
    Ничего не отображается. lvoCheckBoxes и включал и выключал
  • Vladimir Kladov © (15.05.10 09:25) [9]
  • Dy1 (15.05.10 09:40) [10]
    Спасибо!
    Почему lvwpOnIcon (ImageListSmall), а не lvwpOnStateIcon (ImageListState)?
  • Vladimir Kladov © (15.05.10 11:43) [11]
    State Icon - это другая иконка, в отдельной колонке, из списка ImageListState.
  • Dy1 (16.05.10 11:10) [12]
    перенёс в свой код. Такое ощущение, что обновляется только при следующей отрисовке. Код из [9]
  • Vladimir Kladov © (16.05.10 13:03) [13]
    А listview.Invalidate - не помогает? У меня же был в коде.
  • Dy1 (16.05.10 14:00) [14]
    в вашем работает, в моём - только при следующем клике, при этом только что кликнутое визуально не изменяется
  • Dy1 (16.05.10 14:03) [15]
    или ChBtmp[LV1.LVCurItem] := not ChBtmp[LV1.LVCurItem]; задерживается на клик, что ещё менее вероятно
  • Dy1 (16.05.10 14:06) [16]
    наконец-то я проснулся :) Там выше есть
    i := LV1.LVItemAtPosEx( Mouse.X, Mouse.Y, Where);

    вот i и нужно подставлять вместо LV1.LVCurItem
 
Конференция "KOL" » вирт. ListView и чекбоксы
Есть новые Нет новых   [120350   +20][b:0][p:0.001]