Seltsamer Fehler bei AutoSize eines TBitBtns

Rund um die LCL und andere Komponenten
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Seltsamer Fehler bei AutoSize eines TBitBtns

Beitrag von pluto »

Hallo,
ich möchte BitBtns zur Laufzeit erzeigen. So ähnlich wie eine Leiste.
Eigentlich auch kein Problem. Allerdings stimmt die Breite der Buttons nicht. Ich habe AutoSize auf True geschaltet und es sieht so aus wie das Bild im Anhang. Ich habe folgenden Code dafür erstellt:

Code: Alles auswählen

var
  i,n,px,py:Integer;
  BitBtn:TBitBtn;
  s:TCaption;
begin
  n:=NumToken(aDir,DirectorySeparator);
  px:=0; py:=0;
  for i:=1 to n do begin
    s:=GetToken(aDir,DirectorySeparator,i);
    if s <> '' then begin
      BitBtn:=TBitBtn.Create(self);
      BitBtn.AutoSize:=True;
      BitBtn.left:=px;
      BitBtn.Top:=py;
      BitBtn.Caption:=s;
      writeln('"',s,'"');
      BitBtn.Parent:=self;
      BitBtn.AdjustSize;
      px:=px+BitBtn.Width;
    end;
  end; // for i
in einer eigenen Unit und in einer eigenen Klasse.
und wenn ich BitBtn.Width mir ausgeben lasse per writeln steht da immer 75 drin. Egal wie breit der Text auch sein mag. Immer 75. Wo habe ich hier mein Fehler ? Ist das evlt. ein BUG von Lazarus ?
Ich verwende übrigst seit einigen Tagen die neuste Version: 0.9.25. Und das unter KDE 4.0(glaube ich).
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

nter Windows funktioniert das bei mir wunderbar, auch mit deinem Code.
Probier doch mal Parent AutoSize als letztes zu setzen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Habe ich schon. das gleiche.
Ist denn bei dir das Ergebnis immer anders ? bei mir ist das immer 75 und die Buttons haben aber immer eine andere Größe. Wenn ich sie erstelle.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Wenn ich das so mache, scheint es zu gehen:

Code: Alles auswählen

var
  i,n,px,py:Integer;
  BitBtn:TBitBtn;
  s:TCaption;
begin
  n:=NumToken(aDir,DirectorySeparator);
  px:=0; py:=0;
  for i:=1 to n do begin
    s:=GetToken(aDir,DirectorySeparator,i);
    if s <> '' then begin
      BitBtn:=TBitBtn.Create(self);
      BitBtn.left:=px;
      BitBtn.Top:=py;
      BitBtn.Caption:=s;
      writeln('"',s,'"');
      BitBtn.Parent:=self;
      BitBtn.AdjustSize;
    //  BitBtn.AutoSize:=True;
 
      px:=px+BitBtn.Width;
    end;
  end; // for i
aber das verstehe ich nicht ! Wenn ich autoSize stelle wird auch AdjustSize aufgerufen, habe ich im Code von Lazarus gesehen. Naja so scheint es ja zu gehen.
MFG
Michael Springwald

Antworten