Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизКак узнать координаты определенной строки в ListBox-е? Найти похожие ветки
← →
Cosinus © (2004-12-20 17:54) [0]Собственно Sabj. Проблемма такая, есть
ListBox
, который заполняется в RunTime, посредствомDragDrop
. Хочется создавать слева от каждой добавленной строки мелкийImage
, содержание которого зависит от содержимого строки. Но для того, чтобы создатьImage
необходимо знать координаты каждой строки. Есть, в принципе, идея привязаться кListBox.Top
иListBox.Items.Count
, но мне кажется, что разъедется все это при некоторых условиях... Есть ли другой способ?
← →
Skier © (2004-12-20 18:03) [1]1)TListBox.Style := lbOwnerDrawFixed
2)TListBox.OnDrawItem
← →
olookin © (2004-12-20 18:16) [2]Вот как сделал это я. У динамически создаваемого TListBox ставлю свойство Style:=lbOwnerDrawFixed; и назначаю событие OnDrawItem:=ListDrawItem. Картинки лежат ImageList.
А в самом событии пишу:
procedure TMyListBox.ListDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var r: TRect;
s: string;
b: boolean;
begin
with (Control as TListBox) do begin b:=false;
r:=ItemRect(Index); s:=Items.Strings[Index]; Canvas.FillRect(r);
if Pos(": картинка 1",s)<>0 then begin
ImageList.Draw(Canvas,0,r.Top,0); b:=true; end;
if Pos(": картинка 2",s)<>0 then begin
ImageList.Draw(Canvas,0,r.Top,1); b:=true; end;
......
Canvas.TextOut(30,r.Top+2,s); end;
end;
И вроде бы ничего не разъезжается. Правда у меня шрифт моноширинный...
← →
Cosinus © (2004-12-20 18:44) [3]
> Skier © (20.12.04 18:03) [1]
olookin © (20.12.04 18:16) [2]
Спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c