![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ItemAtPos
Flea © (2006-06-28 23:58:00)товарищи! а почему у коловского listbox нет свойства itematpos? или я его не вижу просто? а может быть есть другой способ узнать номер итема под курсором мыши?
Flea (2006-06-29 14:45:00) [1]благодарю за помощь
ECM (2006-06-29 11:30:00) [2]Действительно нет ... :(
Но доделать это несложно... А пока воспользуйтесь сл. функцией:
function LBItemAtPos(LBCtrl: PControl; X,Y: Integer): Integer;
var
R: TRect;
P: TPoint;
i: Integer;
begin
P := MakePoint(X,Y);
for i := LBCtrl.Perform(LB_GETTOPINDEX,0,0) to LBCtrl.Count -1 do begin
LBCtrl.Perform(LB_GETITEMRECT, i , Integer(@R));
if PointInRect(P,R) then begin
Result := i;
Exit;
end;
end;
Result := -1;
end;
Тут есть одна особенность - item-ы просматриваются начиная с первого видимого. И если их будет "огромное количество" - цикл может затянуться.
Впрочем VCL делает точно так же.