Delphi Tips & Tricks softsale > Delphi Tips & Tricks      

< poprzednia rada

Poziomy suwak w Listbox

Standardowo komponet ListBox nie jest wyposażony w poziomy pasek przewijania. Jak odczytać zawartość bardzo długiego elementu w ListBox, nie rozszerzając samego listboxa. Można oczywiście wykorzystać własność Hint do odpisania zawartości elentu listboxa ale nie jest to rozwiązanie eleganckie. Realizuje to poniższa procedura na zdarzeniu Onclick listboxa.

procedure TForm1.ListBox3Click(Sender: TObject);
   begin
      hint := listbox3.items.strings[listbox3.itemindex];
      showhint := true;
   end;

Okazuje się, że tak naprawdę ListBox posiada możliwość pokazania poziomego suwaka, trzeba tylko wysłać odpowiedni komunikat.

Aplikacja wysyła komunikat LB_SETHORIZONTALEXTENT aby ustawić szerokość w pikselach według, której listbox będzie przwijany poziomo. Jeżeli szerokość listboxa będzie mniejsza niż ta wartość, to listbox zostanie wyposażony w poziomy pasek przewijania. Jeżeli szerokość listboxa jest równa lub większa od tej wartości to poziomy pasek przewijania zostanie ukryty. Realizuje to poniższa procedura setlistboxhorskrol(lst:Tlistbox)

procedure setlistboxhorskrol(lst:Tlistbox);
   var   i :integer;
   begin
   for i:=0 to lst.items.count-1 do
   if (lst.canvas.textwidth(lst.items.strings[i])>lst.width)
                                                        then
   begin
   sendMessage(lst.handle,lb_sethorizontalExtent,1000,
                                          longint(0));
   Break;
   end;
   end;

Wywołanie procedury np. na zdarzeniu OnCreate formy.

procedure TForm1.FormCreate(Sender: TObject);
   begin
      setlistboxhorskrol(listbox1);
   end;

SOFTSALE - Oprogramowanie i Szkolenia
softsale@softsale.com.pl

03-565 Warszawa , ul. Borzymowska 43 lok. 301C
tel/fax:4084840,GSM:0607612428