AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Dynamisch erstellte Labels zugreifen

Ein Thema von 150gozilla · begonnen am 20. Okt 2006 · letzter Beitrag vom 20. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
150gozilla

Registriert seit: 1. Sep 2005
Ort: Taunusstein
116 Beiträge
 
Delphi 5 Professional
 
#1

Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 10:32
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;
   ...
Chris
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 10:35
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 10:37
Label43.Caption := 'Hallo Welt?!'; So wie auf jedes andere Element auch.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 10:52
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
  Mit Zitat antworten Zitat
150gozilla

Registriert seit: 1. Sep 2005
Ort: Taunusstein
116 Beiträge
 
Delphi 5 Professional
 
#5

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 11:00
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 "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
Chris
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 11:01
Zitat von 150gozilla:
funktioniert es nicht
Was funktioniert nicht? Welche Fehlermeldung?
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
150gozilla

Registriert seit: 1. Sep 2005
Ort: Taunusstein
116 Beiträge
 
Delphi 5 Professional
 
#7

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 11:02
Zitat von chaosben:
Zitat von 150gozilla:
funktioniert es nicht
Was funktioniert nicht? Welche Fehlermeldung?
Es passiert nichts
Chris
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#8

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 11:12
musst Du nicht i und j in deiner Schleife auch ändern, bzw index2 für left und top nutzen
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 11:12
@Gozilla: Da muss es an einem Teil des Codes liegen, den du noch nicht gepostet hast.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
150gozilla

Registriert seit: 1. Sep 2005
Ort: Taunusstein
116 Beiträge
 
Delphi 5 Professional
 
#10

Re: Auf Dynamisch erstellte Labels zugreifen

  Alt 20. Okt 2006, 11:25
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

MfG, Chris
Miniaturansicht angehängter Grafiken
sudoku_181.jpg  
Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 Uhr.
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