![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать координаты определенной строки в ListBox-е?
Cosinus © (2004-12-20 17:54:00)Собственно Sabj. Проблемма такая, есть
ListBox, который заполняется в RunTime, посредствомDragDrop. Хочется создавать слева от каждой добавленной строки мелкийImage, содержание которого зависит от содержимого строки. Но для того, чтобы создатьImageнеобходимо знать координаты каждой строки. Есть, в принципе, идея привязаться кListBox.TopиListBox.Items.Count, но мне кажется, что разъедется все это при некоторых условиях... Есть ли другой способ?
Cosinus (2004-12-20 18:44:00) [1]
> Skier © (20.12.04 18:03) [1]
olookin © (20.12.04 18:16) [2]
Спасибо.
olookin (2004-12-20 18:16:00) [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;
И вроде бы ничего не разъезжается. Правда у меня шрифт моноширинный...
Skier (2004-12-20 18:03:00) [3]1)TListBox.Style := lbOwnerDrawFixed
2)TListBox.OnDrawItem