Listbox mit horizontaler Scrollbar |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Enthält eine Listbox mehr Einträge als sie anzeigen kann, wird auf der rechten Seite automatisch eine vertikale Scrollbar angezeigt, um auch die anderen Items in den sichtbaren Bereich scrollen zu können.Sind allerdings einige Items breiter als die Listbox, wird keine horizontale Scrollbar zur Verfügung gestellt. Man muss manuell die LB_SetHorizontalExtent-Message an die Listbox senden. Im Folgenden Beispiel wird der Listbox eine Horizontale Scrollbar mit einer pauschalen Breite von 1000 Pixel hinzugefügt:
procedure TForm1.FormCreate(Sender: TObject);
begin
Listbox1.Perform(LB_SetHorizontalExtent, 1000, Longint(0));
end;
Möchte man den Scrollbereich der Scrollbar abhängig vom Inhalt festlegen, ist das OnDrawItem-Ereignis der richtige Ansatzpunkt dafür. Setzen Sie zunächst das Style-Property der Listbox auf lbOwnerDrawVariable oder lbOwnerDrawFixed und deklarieren Sie ein globales Feld in der Formular-Klasse:
type
TForm1 = class(TForm)
//...
private
flbHorzScrollWidth: Integer;
//...
Die Scrollbar ist nun immer so groß, dass der breiteste Item angezeigt werden kann:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
Len: Integer;
NewText: String;
begin
NewText:=Listbox1.Items[Index];
with Listbox1.Canvas do
begin
FillRect(Rect);
TextOut(Rect.Left + 1, Rect.Top, NewText);
Len:=TextWidth(NewText) + Rect.Left + 10;
if Len>flbHorzScrollWidth then
begin
flbHorzScrollWidth:=Len;
Listbox1.Perform(LB_SETHORIZONTALEXTENT, flbHorzScrollWidth, 0 );
end;
end;
end;
So entfernen Sie die Scrollbar wieder:
procedure TForm1.Button2Click(Sender: TObject);
begin
flbHorzScrollWidth:=0;
Listbox1.Perform(LB_SETHORIZONTALEXTENT, 0, 0 );
end;