Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать координаты определенной строки в 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо