| Delphi Tips & Tricks | softsale > Delphi Tips & Tricks |
| < poprzednia rada |
Poziomy suwak w ListboxStandardowo 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 |