Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Auf Dynamisch erstellte Labels zugreifen (https://www.delphipraxis.net/79318-auf-dynamisch-erstellte-labels-zugreifen.html)

150gozilla 20. Okt 2006 09:32


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;
   ...

chaosben 20. Okt 2006 09:35

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:
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;
Danach das freigeben der Labels und das Zurücksetzen der Länge des Arrays nicht vergessen. :)

freak4fun 20. Okt 2006 09:37

Re: Auf Dynamisch erstellte Labels zugreifen
 
Delphi-Quellcode:
Label43.Caption := 'Hallo Welt?!';
So wie auf jedes andere Element auch. ;)

MfG
freak

Mavarik 20. Okt 2006 09:52

Re: Auf Dynamisch erstellte Labels zugreifen
 
Zitat:

Zitat von freak4fun
So wie auf jedes andere Element auch. ;)

Sicherlich nicht, da dynamisch erzeugt...

@150gozilla

Du kannst die Labels nicht einfach ins "Blaue" erzeugen, sonder musst Dir eine Liste (Array) mit den Pointern (Objectzeigern) erzeugen...

Frank :coder:

150gozilla 20. Okt 2006 10:00

Re: Auf Dynamisch erstellte Labels zugreifen
 
Im moment sieht es bei mir so aus:

Delphi-Quellcode:
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;
Und wenn ich sie blau färben will "
Delphi-Quellcode:
Labels[2].Color := clblue;
"funktioniert es nicht. Allein das Kompilieren dauert 2 Minuten... und das Fenster schließt sich nach einer Minute. könntet ihr mir helfen ?

MfG, Chris

chaosben 20. Okt 2006 10:01

Re: Auf Dynamisch erstellte Labels zugreifen
 
Zitat:

Zitat von 150gozilla
funktioniert es nicht

Was funktioniert nicht? Welche Fehlermeldung?

150gozilla 20. Okt 2006 10:02

Re: Auf Dynamisch erstellte Labels zugreifen
 
Zitat:

Zitat von chaosben
Zitat:

Zitat von 150gozilla
funktioniert es nicht

Was funktioniert nicht? Welche Fehlermeldung?

Es passiert nichts :(

chrisw 20. Okt 2006 10:12

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

chaosben 20. Okt 2006 10:12

Re: Auf Dynamisch erstellte Labels zugreifen
 
@Gozilla: Da muss es an einem Teil des Codes liegen, den du noch nicht gepostet hast.

150gozilla 20. Okt 2006 10:25

Re: Auf Dynamisch erstellte Labels zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
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.
Den Timercode habe ich mal rausgenommen, da er nur die linien zeichnet, und das hier unwichtig ist

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 10:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz