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

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

Про Listbox [D7, XP]


kirik ©   (2006-09-15 14:35:00) 

Есть ListBox. А как сделать так, чтобы выделялась всегда самая последняя видимая строчка?


Джо   (2006-09-15 16:46:00) [1]

Ну, и в связи с наличием свойства, искомый код будет выглядеть как-то так:

function GetBottomIndex (Lb: TListBox): Integer;
begin
 with Lb do
   Result := TopIndex + (Height div ItemHeight) - 1;
end;


Джо   (2006-09-15 16:35:00) [2]

> [8] kirik   (15.09.06 15:01)
> Это чего такое?
> Кстати, она у меня только фокус выделения рисует :(

Это, если на то пошло, не "она", а "оно" — т.е., свойство. Повзоляет получить/установить индекс ПЕРВОГО видимого эл-та.


Zeqfreed   (2006-09-15 15:17:00) [3]

function SelectBottommostVisibleItem(ListBox : TListBox) : Integer;
var
 Idx : Integer;
 p : TPoint;
begin
 Result := -1;
 if not (ListBox is TListBox) then Exit;

 with ListBox do begin
  p.X := 1;
  p.Y := ClientHeight - 1;
  Idx := ItemAtPos(p, false);

  if (Idx < Items.Count) then
   ItemIndex := Idx
  else if (Items.Count > 0) then
   ItemIndex := Idx - 1;
 end;

 Result := ListBox.ItemIndex;
end;



> Кстати, она у меня только фокус выделения рисует :(

Кто она?


kirik   (2006-09-15 15:01:00) [4]

Это чего такое?
Кстати, она у меня только фокус выделения рисует :(


kirik   (2006-09-15 14:59:00) [5]

О как...


Джо   (2006-09-15 14:59:00) [6]

Можно еще через TopIndex.


kirik   (2006-09-15 14:58:00) [7]

Хорошо, пусть так. Ну а как я узнаю индекс последнего видимого итема? Height div ItemHeight?


Zeqfreed   (2006-09-15 14:56:00) [8]

> Я имею в виду мышь движущаяся, а не выделенную строчку...

ListBox.ItemAtPos();


> И не ПОСЛЕДНЮЮ ЗАПИСЬ, а ПОСЛЕДНЮЮ ВИДИМУЮ в данном месте
> листа... то есть в нижний край...

ListBox.ItemAtPos();


kirik   (2006-09-15 14:52:00) [9]

Я имею в виду мышь движущаяся, а не выделенную строчку...
И не ПОСЛЕДНЮЮ ЗАПИСЬ, а ПОСЛЕДНЮЮ ВИДИМУЮ в данном месте листа... то есть в нижний край...


Zeqfreed   (2006-09-15 14:49:00) [10]

if (ListBox.Items.Count > 0) then
 ListBox.ItemIndex := ListBox.Items.Count - 1;

ListBox.ItemAtPos();


kirik   (2006-09-15 14:45:00) [11]

И ещё, как определить строчку, на которой находится мышь?


Наверх

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