![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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