TListView
ListView2.AddItem('1',MyObj);
Как потом обратиться к MyObj исходя из ListView2.Items[0]?
Заранее Спасибо!
Цитата: Yurec
Собственно вот и я пройдя эатпы замены не угодного мне DBGrid на StringGrid, пришел к идее замены StringGrid`а на TListView. Очень заманило свойтво Objects Item`a, но в отличии от других компонентов не ясно как потом его вытащить.
ListView2.AddItem('1',MyObj);
Как потом обратиться к MyObj исходя из ListView2.Items[0]?
Заранее Спасибо!
ListView2.AddItem('1',MyObj);
Как потом обратиться к MyObj исходя из ListView2.Items[0]?
Заранее Спасибо!
Код:
ListView1.Items[0].Data
Я ступил в хелпе на этом "__property void * Data = {read=FData, write=SetData};" так и не поняв, что это оно и есть.
Есть еще вопрос, не могу найти свойство как разрешить пользователю перемещать конолки в том же листвью.
.FullDrag
Столкнулся еще с одной траблой, видимо повсеместной.
Изменение фона выделенной строки.
Если юзать Custom события отрисовки, то ничего перерисовывать не наджо, просто меняешь цвет текста, фона и отрисовывается самостоятельно.
НО! В таком случае при выделении строки все перерисовывается на стандартный цвет.
В таком случае можно юзать не Custom события, например OnDrawItem, и выводить с помощтю TextOut самостоятельно, но !!! в таком случае у меня нкиак не получается вывести текст для SubItem, так как не знаю куда его, собственно выводить...
Кто знает!?
Цитата: Yurec
в таком случае у меня нкиак не получается вывести текст для SubItem, так как не знаю куда его, собственно выводить...
Кто знает!?
Кто знает!?
Используйте свойство ListView1->Column->Width;
Оно вернет ширину i-того столбца. Сложив полученные значения и отступ в необходимом столбце вы и получите координату x для вывода.
Цитата: nikitozz
Используйте свойство ListView1->Column->Width;
Оно вернет ширину i-того столбца. Сложив полученные значения и отступ в необходимом столбце вы и получите координату x для вывода.
Оно вернет ширину 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;
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;
НО! все очень плохо, когда двигаешь колонки, особенно вправо.
Как быть с отрисовкой при передвидении колонок?
Разобрался! Пришлось переписывать компонент. Всем опытом поделюсь, когдал все косяки прикрою