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

Ваш аккаунт

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

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

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

TListView

513
03 сентября 2008 года
Yurec
228 / / 21.09.2005
Собственно вот и я пройдя эатпы замены не угодного мне DBGrid на StringGrid, пришел к идее замены StringGrid`а на TListView. Очень заманило свойтво Objects Item`a, но в отличии от других компонентов не ясно как потом его вытащить.

ListView2.AddItem('1',MyObj);
Как потом обратиться к MyObj исходя из ListView2.Items[0]?
Заранее Спасибо!
288
03 сентября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: Yurec
Собственно вот и я пройдя эатпы замены не угодного мне DBGrid на StringGrid, пришел к идее замены StringGrid`а на TListView. Очень заманило свойтво Objects Item`a, но в отличии от других компонентов не ясно как потом его вытащить.

ListView2.AddItem('1',MyObj);
Как потом обратиться к MyObj исходя из ListView2.Items[0]?
Заранее Спасибо!



 
Код:
ListView1.Items[0].Data
513
03 сентября 2008 года
Yurec
228 / / 21.09.2005
Грандиозно, спасибо!
Я ступил в хелпе на этом "__property void * Data = {read=FData, write=SetData};" так и не поняв, что это оно и есть.

Есть еще вопрос, не могу найти свойство как разрешить пользователю перемещать конолки в том же листвью.
14
03 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
.FullDrag
513
05 сентября 2008 года
Yurec
228 / / 21.09.2005
Спасибо, все вроде работает.
Столкнулся еще с одной траблой, видимо повсеместной.
Изменение фона выделенной строки.
Если юзать Custom события отрисовки, то ничего перерисовывать не наджо, просто меняешь цвет текста, фона и отрисовывается самостоятельно.
НО! В таком случае при выделении строки все перерисовывается на стандартный цвет.
В таком случае можно юзать не Custom события, например OnDrawItem, и выводить с помощтю TextOut самостоятельно, но !!! в таком случае у меня нкиак не получается вывести текст для SubItem, так как не знаю куда его, собственно выводить...
Кто знает!?
288
05 сентября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: Yurec
в таком случае у меня нкиак не получается вывести текст для SubItem, так как не знаю куда его, собственно выводить...
Кто знает!?



Используйте свойство ListView1->Column->Width;
Оно вернет ширину i-того столбца. Сложив полученные значения и отступ в необходимом столбце вы и получите координату x для вывода.

513
05 сентября 2008 года
Yurec
228 / / 21.09.2005
Цитата: nikitozz
Используйте свойство ListView1->Column->Width;
Оно вернет ширину i-того столбца. Сложив полученные значения и отступ в необходимом столбце вы и получите координату x для вывода.


Вроде получилось:

Код:
procedure TForm1.ListView2DrawItem(Sender: TCustomListView;
  Item: TListItem; Rect: TRect; State: TOwnerDrawState);
  var
  canvasq:TCanvas;
  i:integer;
  w:integer;
  begin

        Sender.canvas.Font.Color := clGREEN;
if  odSelected in  State then
        Sender.canvas.Font.Color := clRed;

        Sender.canvas.Brush.Color:=clWhite;
      Sender.canvas.FillRect(Rect);

with (Sender as TCustomListView ) do begin
  canvas.TextOut(Rect.Left, Rect.Top, item.Caption);
  w:=Rect.Left;
  for i:=0 to Item.SubItems.Count-1 do begin
    w:=w+Column.Width;
    canvas.TextOut(w, Rect.Top, Item.SubItems);
  end;
end;


НО! все очень плохо, когда двигаешь колонки, особенно вправо.
Как быть с отрисовкой при передвидении колонок?
513
08 сентября 2008 года
Yurec
228 / / 21.09.2005
Разобрался! Пришлось переписывать компонент. Всем опытом поделюсь, когдал все косяки прикрою
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог