![]() |
Auf Dynamisch erstellte Labels zugreifen
Hallo, ich habe mir in meinem Programm dynamische Labels erstellt(Schleife).
Es sind 81 und haben den Namen "Label1, Label2, etc...) Wie kann ich jetzt auf ein einzelnes Label, sagen wir Label43 zugreifen, weil ich dort die Farbe einstellen möchte.
Delphi-Quellcode:
var
Labels:TLabel; ... Labels:= TLabel.Create(self); Labels.Parent:= Form1; ... |
Re: Auf Dynamisch erstellte Labels zugreifen
Du bekommst ja in "Labels" eine Referenz auf das neu erstellte Element zurück. Damit kannst du auf das Label zugreifen.
In deinem Fall würde sich ein Array anbieten:
Delphi-Quellcode:
Danach das freigeben der Labels und das Zurücksetzen der Länge des Arrays nicht vergessen. :)
var
Labels : array of TLabel; idx: Integer; begin for idx:=0 to 100 do begin SetLength(Labels,idx+1); Labels[idx]:=TLabel.Create(Form1); ... end; Labels[74].Color:=clGreen; end; |
Re: Auf Dynamisch erstellte Labels zugreifen
Delphi-Quellcode:
So wie auf jedes andere Element auch. ;)
Label43.Caption := 'Hallo Welt?!';
MfG freak |
Re: Auf Dynamisch erstellte Labels zugreifen
Zitat:
@150gozilla Du kannst die Labels nicht einfach ins "Blaue" erzeugen, sonder musst Dir eine Liste (Array) mit den Pointern (Objectzeigern) erzeugen... Frank :coder: |
Re: Auf Dynamisch erstellte Labels zugreifen
Im moment sieht es bei mir so aus:
Delphi-Quellcode:
Und wenn ich sie blau färben will "
for index2:=0 to 100 do
begin SetLength(Labels,index2+1); Labels[index2]:=TLabel.Create(self); Labels[index2].Top := ((i-1)* lg)+13; Labels[index2].Parent:= Form1; Labels[index2].AutoSize := false; Labels[index2].Font.Size := 12; Labels[index2].Left := 10 + lg *(j-1); Labels[index2].Height:= lg; Labels[index2].Width:=lg; Labels[index2].Caption:= IntToStr(i)+','+(IntToStr(j)); Labels[index2].Alignment := tacenter; end;
Delphi-Quellcode:
"funktioniert es nicht. Allein das Kompilieren dauert 2 Minuten... und das Fenster schließt sich nach einer Minute. könntet ihr mir helfen ?
Labels[2].Color := clblue;
MfG, Chris |
Re: Auf Dynamisch erstellte Labels zugreifen
Zitat:
|
Re: Auf Dynamisch erstellte Labels zugreifen
Zitat:
|
Re: Auf Dynamisch erstellte Labels zugreifen
musst Du nicht i und j in deiner Schleife auch ändern, bzw index2 für left und top nutzen
|
Re: Auf Dynamisch erstellte Labels zugreifen
@Gozilla: Da muss es an einem Teil des Codes liegen, den du noch nicht gepostet hast.
|
Re: Auf Dynamisch erstellte Labels zugreifen
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Den Timercode habe ich mal rausgenommen, da er nur die linien zeichnet, und das hier unwichtig ist
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Labels: array of TLabel; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var i, // Zeilenzähler j, // Spaltenzähler lg, // Labelgröße bg :Integer; // Boxgröße s :String; index2: integer; begin Form1.Height := round(screen.height*0.8); Form1.Width := Form1.Height; bg := Round((Form1.Height-20)/3); lg := Round((bg-5)/3); for i:=1 to 9 do begin for j:= 1 to 9 do begin for index2:=1 to 81 do begin SetLength(Labels,index2+1); Labels[index2]:=TLabel.Create(self); Labels[index2].Top := ((i-1)* lg)+13; Labels[index2].Parent:= Form1; Labels[index2].AutoSize := false; Labels[index2].Font.Size := 12; Labels[index2].Left := 10 + lg *(j-1); Labels[index2].Height:= lg; Labels[index2].Width:=lg; Labels[index2].Caption:= IntToStr(i)+','+(IntToStr(j)); Labels[index2].Alignment := tacenter; //SetLength(Labels, 1); end; Labels[10].Color:= clblue; // Funzt nicht. end; end; end; end. Ich soll Sudoku nachprogrammieren mit einer 9x9 Matrix, daher die schleifen j und i im moment sieht es so aus "siehe anhang" Die schwarzen linien hab ich mit paint dazu gemacht zur besseren übersicht Ich bin zwar kein frischling, aber auch nicht mehr der fitteste :oops: MfG, Chris |
Re: Auf Dynamisch erstellte Labels zugreifen
hmm
Du erzeugst 6561 Labels! Frank |
Re: Auf Dynamisch erstellte Labels zugreifen
Das sind ja 6561 Label, die Du erzeugst ! Für Sudoko ein bisschen zu viel, oder?
Davon legst du aber nur 81 im Array ab ! Was willst Du denn damit ? |
Re: Auf Dynamisch erstellte Labels zugreifen
Zitat:
Wie könnte ich die Schleifen am besten verschachteln ? |
Re: Auf Dynamisch erstellte Labels zugreifen
Die Schleife mit dem index2 einfach weglassen und einen Zähler in der inneren Schleife von 1 bis 81 zählen (inc())
|
Re: Auf Dynamisch erstellte Labels zugreifen
Zitat:
Delphi-Quellcode:
SetLength(Labels,81);
index2 := 0; for i:=1 to 9 do begin for j:= 1 to 9 do begin Labels[index2]:=TLabel.Create(self); Labels[index2].Top := ((i-1)* lg)+13; Labels[index2].Parent:= Form1; Labels[index2].AutoSize := false; Labels[index2].Font.Size := 12; Labels[index2].Left := 10 + lg *(j-1); Labels[index2].Height:= lg; Labels[index2].Width:=lg; Labels[index2].Caption:= IntToStr(i)+','+(IntToStr(j)); Labels[index2].Alignment := tacenter; inc(index2); end; end; Frank :coder: |
Re: Auf Dynamisch erstellte Labels zugreifen
Zitat:
Danke an alle die mir geholfen haben :) Hab wieder was gelernt =) Danke nochmal =) |
Re: Auf Dynamisch erstellte Labels zugreifen
Wobei hier ein dynamisches Array eigentlich keinen sonderlichen Sinn verfolgt (ein statisches hätt's auch getan, am besten 2 dimensional (array [1..9,1..9] of TLabel))
a la
Delphi-Quellcode:
const MaxWidthHeight = 9;
... Labels : array [1..MaxWidthHeight ,1..MaxWidthHeight ] of TLabel; .... for i:=1 to MaxWidthHeight do begin for j:= 1 to MaxWidthHeight do begin Labels[i,j]:=TLabel.Create(self); Labels[i,j].Top := ((i-1)* lg)+13; Labels[i,j].Parent:= Form1; Labels[i,j].AutoSize := false; Labels[i,j].Font.Size := 12; Labels[i,j].Left := 10 + lg *(j-1); Labels[i,j].Height:= lg; Labels[i,j].Width:=lg; Labels[i,j].Caption:= IntToStr(i)+','+(IntToStr(j)); Labels[i,j].Alignment := tacenter; end; end; Ist mglw später einfacher anzusprechen !!! |
Re: Auf Dynamisch erstellte Labels zugreifen
Hallo,
noch zum Zugriff. Beim Erzeugen kann man ja Namen selber vorgeben Label.Name:= 'Label_Suduko_1'. Der Zugriff erfolgt dann über TLabel(FindComponent('Label_Suduko_1')) Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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 by Thomas Breitkreuz