![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прорисовка ListBox [D7, WinXP]
Igor_thief © (2004-12-19 16:58:00)Как сделать такое? Есть ListBox. В нем выделен один элемент. При движении мишки над Listbox'om надо чтобы элементы находящийся под курсором мишки подсвечивался (только подсвечивался, а не ставал активным).
Igor_thief (2004-12-20 11:56:00) [1]antonn © (19.12.04 17:39) [3]
Спасибо за идею. Я этот код немного приукрашу и все будет работать как надо.
Igor_thief (2004-12-20 11:45:00) [2]antonn © (19.12.04 17:39) [3]
ЧТо-то похожее, но чтобы не терялся выделенный элемент!
Igor_thief (2004-12-20 11:44:00) [3]begin...end © (19.12.04 17:05) [2]
Не подойдет.
begin...end © (19.12.04 17:03) [1]
Это понятно. Но как в OnMouseMove перепрорисовывать конкретный элемент под мышкой?
antonn (2004-12-19 17:39:00) [4]
> Igor_thief (19.12.04 16:58)
Так, что ли?
var track:integer;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
With ( Control As tListBox ).Canvas Do Begin
if Index=track then begin
Font.Color := 204;
Brush.Color := 14737663;
end else begin
Font.Color := clWindowText;
Brush.Color := clWindow;
end;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, ( Control As tListBox ).Items.Strings[index]);// +' '+ pWWW_Conn(List_Conn.Items.Objects[ index ])^.sss);
end;
end;
procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
track:= y div ( Sender As tListBox ).ItemHeight;
( Sender As tListBox ).Invalidate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.DoubleBuffered:=true;
end;
begin...end (2004-12-19 17:05:00) [5]> Igor_thief
Кстати, а TListView не подойдёт? Там уже есть свойство HotTrack.
begin...end (2004-12-19 17:03:00) [6]> Igor_thief (19.12.04 16:58)
Думаю, что копать нужно в сторону TListBox.OnMouseMove и TListBox.ItemAtPos.