Tnt&Std ListBox - dodawanie HScroll

Odpowiedz Nowy wątek
snw
2005-06-21 13:43
snw

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

0

poniższa procedura aktywuje poziomy pasek przewijania gdy
klasa TAHCustomListBox jest pochodną TListBox. Gdy jednak uczyniłem ją 'dzieckiem' TTntListBox, wszystko przestało działać. (oczywiście ta procedura tylko inicjuje scrollbara, mniejsza odetale, myślę że jak coś nie działa to właśnie to)

procedure TAHCustomListBox.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or ws_HScroll;
end;

ewentualnie to :/

procedure TAHCustomListBox.SetScrollLength(S: String);
var
  Extent: Word;
begin
  Extent := Canvas.TextWidth(S)+40;
  if Extent > FLongestString then
  begin
    FLongestString := Extent;
    Perform(lb_SetHorizontalExtent, Extent, 0);
  end;
end;

ma ktoś pomysł co jest nie tak ? a może ktoś ma swoje działające źródła dla TTntListBox ?
aha, Tnt jest najświerzsze, 3.0...
dzięki z góry za pomoc...


Pozostało 580 znaków

Opi
2005-06-21 15:37
Opi

Rejestracja: 15 lat temu

Ostatnio: 1 miesiąc temu

0

Sam tego szukałem, bo było mi bardzo potrzebne, dlatego podziele się zdobytą wiedzą :) [soczek] A więc, w ListBox, CheckListBox i prawdopodobnie innym pochodnym od TListBox można tak:

ListBox1.ScrollWidth := 1000;

lub tak

CheckListBox1.Items.Add('długi tekst.....');
CheckListBox1.ScrollWidth := CheckListBox1.ClientWidth + 90;

lub można też tak (najlepsze)

private
   procedure AdjustCheckListBox;

procedure TForm1.AdjustCheckListBox;
var
        i, nMaxWidth, nItemWidth : integer;
begin
        nMaxWidth := CheckListBox1.ClientWidth;
        for i := 0 to CheckListBox1.Items.Count - 1 do
        begin
                nItemWidth := Length(CheckListBox1.Items[i]) * 5 + 90;
                if (nItemWidth > nMaxWidth) then
                        nMaxWidth := nItemWidth;
        end;
        if (nMaxWidth > CheckListBox1.ClientWidth) then
                CheckListBox1.ScrollWidth := nMaxWidth;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
CheckListBox1.Items.Add('długi tekst...');
AdjustCheckListBox;
end;

Pozostało 580 znaków

snw
2005-06-21 21:32
snw

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

0

rozumiem że zostałem dobrze zrozumiany i ta metoda działa również dla komponentów [b]TNT[/b] ? bo tak na oko mi się nie wydaje. ale jeśli się mylę to bardzo przepraszam ;(


Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0