![]() |
AW: Objekte zur Laufzeit erzeugen
-BoxScro hat jetzt einen Parent
-FrmUse steht in der Erstellungsreihenfolge als zweites und wird durch FrmUse.Show; aufgerufen -LBut liegt in private und ist so deklariert:
Code:
LBut: array of TButton;
|
AW: Objekte zur Laufzeit erzeugen
Zitat:
Delphi-Quellcode:
setLength( LBut, FrmOpen.CDS.RecNo+1);
|
AW: Objekte zur Laufzeit erzeugen
Delphi-Quellcode:
Ist jetzt nicht zum eigentlichen Problem, weil mMn die Hälfte der Infos fehlen, die man bräuchte, um einen vernünftigen Rat zu erteilen. Daher nur zum obigen Codeschnipsel:
LBut[i].Left := 20 + ((LBut[i].Height + 10) * i);
LBut[i].Height := 20; if (i >= 5) then LBut[i].Height := 20 + ((LBut[i].Height + 10) * i); Wieso hängt die linke Position von der Höhe ab (die dazu erst noch in der nächsten Zeile gegeben wird? Wie wird die wohl vorher gewesen sein?). Button für i>5 werden größer??? Sollte hier Top gemeint sein??? |
AW: Objekte zur Laufzeit erzeugen
Ok ich habe alles jetzt noch einmal bearbeitet, habe die Länge des Array's gesetzt und habe auch die Fehler mit dem was Jumpy angesprochen hat beseitigt. Nur wird nur ein Button erzeugt. die prozedure sieht jetzt so aus:
Delphi-Quellcode:
procedure TFrmUse.GenerateButton;
var i: Integer; begin BoxScro := TScrollBox.Create(TabAbrech); BoxScro.Parent := TabAbrech; BoxScro.ParentBackground := true; BoxScro.Align := alClient; BoxScro.BorderStyle := bsNone; FrmOpen.CDS.First; for i := 1 to High(Self.LBut) do begin LBut[i] := TButton.Create(BoxScro); LBut[i].Parent := BoxScro; LBut[i].Left := 20 + 2*(i+1); LBut[i].Top := 30; if (i >= 5) then LBut[i].Top := 30 + 2*(i+1); LBut[i].Caption := FrmOpen.CDS.FieldByName('speise').Value; FrmOpen.CDS.Next; end; end; |
AW: Objekte zur Laufzeit erzeugen
Zitat:
|
AW: Objekte zur Laufzeit erzeugen
Zitat:
Delphi-Quellcode:
sagt muss auch
high
Delphi-Quellcode:
- äh
fisch
Delphi-Quellcode:
sagen.
low
Delphi-Quellcode:
for i := low( Self.LBut ) to high( Self.LBut ) do |
AW: Objekte zur Laufzeit erzeugen
Zitat:
Welche Breite haben die Buttons, wenn 2 pixel später schon der nächste beginnt? Und die Oberkante wird für i>5 immer größer?? |
AW: Objekte zur Laufzeit erzeugen
Zitat:
Delphi-Quellcode:
procedure TFrmUse.GenerateButton;
var i: Integer; begin BoxScro := TScrollBox.Create(TabAbrech); BoxScro.Parent := TabAbrech; BoxScro.ParentBackground := true; BoxScro.Align := alClient; BoxScro.BorderStyle := bsNone; FrmOpen.CDS.First; setLength( LBut, FrmOpen.CDS.RecNo+1); for i := 1 to FrmOpen.CDS.RecNo do begin LBut[i] := TButton.Create(BoxScro); LBut[i].Parent := BoxScro; ... FrmOpen.CDS.Next; end; end; |
AW: Objekte zur Laufzeit erzeugen
Ok danke, nur bekomme ich jetzt nur 2 Button..
|
AW: Objekte zur Laufzeit erzeugen
RecNo, nicht RecordCount? Ich persönlich würde aber sowieso einer Liste (TObjectList/TComponentList) den Vorzug geben, einfach mit First/Next über die Datenmenge iterieren und den neuen Button mit Add() der Liste hinzufügen, das ist weniger Gefummel und schneller dürfte es auch sein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz