Ich hab folgendes Problem:
Mein Programm analysiert Daten und gibt sie formatiert als Übersicht aus (verschiedene Farben, Fonts // Grafiken etc..);
Ich hab keine Möglichkeit gefunden dies irgendwie dynamisch zu realisieren;
im Moment hab ich einfach 20 Label erstellt, die ich entsprechend formatiere.
Wenn ich Label nicht dynamisch erstellen kann, kann ich die bestehenden Statischen irgendwie als Array oder mit Zeigern dynamisch
ansprechen??
Dynamisches Erstellen von TLabel
-
- Beiträge: 27
- Registriert: Do 28. Jan 2010, 13:24
- OS, Lazarus, FPC: openSuse Leap 42.3 (L 1.8 FPC 3.0.4)
- CPU-Target: 64Bit
Re: Dynamisches Erstellen von TLabel
Ich nehme mal an du meinst mit "statisch" zur Entwurfszeit und "dynamisch" zur Laufzeit.
Zur Laufzeit kannst du Labels so erzeugen:
Der "Besitzer" (meistens das Formular) hat nun die Komponente in einer Liste gespeichert und man kann sie wieder ansprechen:
Oder:
Zur Laufzeit kannst du Labels so erzeugen:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var aComp:TComponent;
i:integer;
begin
With TLabel.Create(self) do
begin
Parent:=Self;
Caption:='test';
Left:=10;
Top:=10;
Name:='test1';
end;
end;
Code: Alles auswählen
aComp:=FindComponent('test1');
if aComp is TLabel then TLabel(AComp).Caption:='Label test1 gefunden';
Code: Alles auswählen
for i:=0 to ComponentCount-1 do
if Components[i] is TLabel then TLabel(Components[i]).Caption:='auch ein Label gefunden';
-
- Beiträge: 145
- Registriert: So 22. Mär 2009, 07:48
- OS, Lazarus, FPC: WIN 11 (momentan )
- CPU-Target: 64 und 32Bit
- Wohnort: Hessen
- Kontaktdaten:
Re: Dynamisches Erstellen von TLabel
Hallo downloaditweb,
der Vorschlag vom heo zeig dir schon ganz gut, wie es geht.
Wenn Du zum Beispiel die Daten aus einer Tabelle oder Datenbank holst, dann kannst du es sicher auch so machen, dass deine Labels in einem Array stehen. Ich verwende zu diesem zweck dann immer einen owner z.b. ein panel, dass ich dann z.B. mit panel1.free auch einfach wieder ablöschen kann.
Na ja, so ähnlich sollte es auch gehen.
Mit freundlichem Gruß
Ralph
der Vorschlag vom heo zeig dir schon ganz gut, wie es geht.
Wenn Du zum Beispiel die Daten aus einer Tabelle oder Datenbank holst, dann kannst du es sicher auch so machen, dass deine Labels in einem Array stehen. Ich verwende zu diesem zweck dann immer einen owner z.b. ein panel, dass ich dann z.B. mit panel1.free auch einfach wieder ablöschen kann.
Code: Alles auswählen
private oder public oderzu einer Klasse
panel1 : TPanel;
aLabel1: Array of TLabel;
procedure TForm1.Button1Click(Sender: TObject);
panel1 := TPanel.Create(self);
panel1.SetBounds(10,10,100,100);
//oder z.b. aus einer Tabelle
panel1.SetBounds(strtoint( dbp_left.Text ), strtoint( dbp_top.Text ), strtoint( dbp_with.Text ), strtoint( dbp_height.Text ));
panel1.Parent := Form1;
panel1.Visible:=true;
Datasource1.DataSet.First;
SetLength(aLabel1, Datasource1.DataSet.FieldByName('nindex').AsInteger+1)
while Datasource1.DataSet.EOF = false do begin
aLabel1[nindex]:=TLabel.Create(Panel1);
aLabel1[nindex].Parent:=Panel1;
aLabel1[nindex].Caption:=Datasource1.DataSet.FieldByName('Caption').AsString;
aLabel1[nindex].Left:=10; //oder berechnet oder auch aus der Datentabelle
aLabel1[nindex].Top:=10 * nindex; //oder auch aus der Datentabelle
Datasource1.DataSet.Next;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
panel1.Free;
end;
Mit freundlichem Gruß
Ralph
Fehler sind wie Berge, man steht auf dem Gipfel seiner eigenen und redet über die der anderen.
-
- Beiträge: 27
- Registriert: Do 28. Jan 2010, 13:24
- OS, Lazarus, FPC: openSuse Leap 42.3 (L 1.8 FPC 3.0.4)
- CPU-Target: 64Bit
Re: Dynamisches Erstellen von TLabel
Vielen Dank für die schnellen Antworten,
sie haben mir viel weitergeholfen.
sie haben mir viel weitergeholfen.