AGB  ·  Datenschutz  ·  Impressum  







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

Dynmaische Label finden

Ein Thema von TheMiller · begonnen am 10. Jul 2005 · letzter Beitrag vom 11. Jul 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#11

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 00:17
Ähm ja...

Delphi-Quellcode:
procedure TForm1.Button30Click(Sender: TObject);
var
  i,j:integer;
begin
  Label4.Visible:=False;
  Wort:=sl.Strings[random(sl.Count)];
  Label4.Caption:=Wort;
  j:=176;
  SetLength(Buchstaben, Label4.GetTextLen);
  for i:=1 to Label4.GetTextLen do
  begin
    Buchstabe:=TLabel.Create(nil);
    Buchstabe.Parent:=Form1;
    Buchstabe.Caption:=Copy(wort,i,1);
    Buchstabe.Name:='Dyn'+IntToStr(i);
    [b]ShowMessage(Buchstabe.Name);[/b]
    Buchstabe.Left:=j+20;
    Buchstabe.Top:=176;
    j:=Buchstabe.Left;
  end;
end;
Delphi-Quellcode:
procedure TForm1.Button31Click(Sender: TObject);
var
  i:integer;
begin
  for i := 0 to form1.ComponentCount - 1 do
  begin
    if form1.Components[i].ClassType = TLabel then
    begin
      if Form1.Components[i].Name = 'Dyn1then
      ShowMessage('JA');
    end;
  end;
end;
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 00:25
Das:
Delphi-Quellcode:
procedure TForm1.Button31Click(Sender: TObject);
var
  i:integer;
begin
  for i := 0 to form1.ComponentCount - 1 do
  begin
    if form1.Components[i].ClassType = TLabel then
    begin
      if Form1.Components[i].Name = 'Dyn1then
      ShowMessage('JA');
    end;
  end;
end;
sollte so aussehen:
Delphi-Quellcode:
procedure TForm1.Button31Click(Sender: TObject);
var
  i:integer;
begin
  for i := 0 to self.ComponentCount - 1 do
  begin
    if self.Components[i].ClassType = TLabel then
    begin
      if self.Components[i].Name = 'Dyn1then
      ShowMessage('JA');
    end;
  end;
end;
oder gar so:
Delphi-Quellcode:
procedure TForm1.Button31Click(Sender: TObject);
var
  i:integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i].ClassType = TLabel then
    begin
      if Components[i].Name = 'Dyn1then
      ShowMessage('JA');
    end;
  end;
end;
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#13

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 00:29
Auch mit deinen beiden Codes findet er nix...

Was mach ich denn falsch??
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#14

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 00:30
Zitat von DJ-SPM:
Auch mit deinen beiden Codes findet er nix...
Was mach ich denn falsch??
Zitat von sniper_w:
Vielleicht ist das falsch:Dyn1:=TLabel.Create(nil) und sollte so aussehen:Dyn1:=TLabel.Create(self{form1})
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#15

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 00:41
wundert euch nicht, wenn ich momentan nix schreibe. Ich blicke garnicht mehr durch....

Habe oben den Code gepostet, wie ich ein Wort auf mehrere Dynamische Labels (Variable Buchstabe:TLabel) aufteile. Nur wie greife ich zu... keine Ahnung
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#16

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 01:09
Zitat von DJ-SPM:
wundert euch nicht, wenn ich momentan nix schreibe. Ich blicke garnicht mehr durch....

Habe oben den Code gepostet, wie ich ein Wort auf mehrere Dynamische Labels (Variable Buchstabe:TLabel) aufteile. Nur wie greife ich zu... keine Ahnung
Hast du dich nicht gewundert, wie das Form wissen kann, was es für Labels besitzt?
Das wird über den Owner gelöst.
Deshalb musst du das Formular, Panel, ... welches deine Labels besitzen soll auch im Constructor angeben.

Und wenn dich die zehntausend Stringvergleiche stören.
Hier eine simple TLabel-Ableitung:
Delphi-Quellcode:
   TDynLabel = class(TLabel)
   private
      fIndex: Integer;
      procedure setIndex(const aValue: Integer);
   public
      constructor Create(aOwner: TWinControl; aIndex: Integer); overload; virtual;
   published
      property Index: Integer read fIndex write setIndex;
   end;
Delphi-Quellcode:
constructor TDynLabel.Create(aOwner: TWinControl; aIndex: Integer);
begin
   inherited Create(aOwner);
   Parent := aOwner;
   Index := aIndex;
end;

procedure TDynLabel.setIndex(const aValue: Integer);
begin
   fIndex := aValue;
   Name := 'DynLabel' + IntToStr(Index);
end;
Jetzt kannst du deine Erzeugung der labels damit ersetzen:
Delphi-Quellcode:
for i := 1 to BuchstabenLabel.GetTextLen do
   with TDynLabel.Create(Self, i) do
   begin
      j := j + 20;

      Caption := Wort[i];
      Left := j;
      Top := 176;
   end;
Der Zugriff wäre damit ganz easy (schließlich weißt du ja, dass alle TDynLabels deine dyn. Labels sind ):
Delphi-Quellcode:
for i := 0 to ControlCount - 1 do
begin
   if Controls[i] is TDynLabel then
      with TDynLabel(Controls[i]) do
      begin
         if Index = 1 then
            ShowMessage('Ja');
      end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#17

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 01:19
Danke, funzt super.

Eine Frage gleich noch. Wie kann ich die Labels wieder löschen? *fg* Mit destroy kommt eine AV
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#18

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 01:53
Du musst auch von hinten löschen. Du reduzierst ja dabei die Anzahl der Controls.
Delphi-Quellcode:
for i := ControlCount - 1 downto 0 do
begin
  if Controls[i] is TDynLabel then
    Controls[i].Free();
end;
Wozu brauchst du eigentlich soviele Labels?
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#19

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 01:55
Gleich wirst du mich schlagen, weil's bestimmt vieeel viel einfacher ging.

Ich will ein Hangman-Spiel zur Überung programmieren. Jetzt bin ich schon soweit, dass der relevante Code von "fremden" kam, aber dabei lerne ich trotzdem.

Und sag's mir... Es ging einfacher
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Dynmaische Label finden

  Alt 11. Jul 2005, 08:38
die einfachste und vielleicht auch perfomanteste Lösung wäre wie schon angesprochen wohl diese
Delphi-Quellcode:
private
  LabelList: TList; //Liste in der die Labels gehalten werden
[...]
LabelList := TList.Create; //Liste muss natürlich erzeugt werden (im Create)
[...]
LabelList.Free; //und auch wieder zuerstört werden(im Destroy)
[...]
procedure TYourClass.ClearLabellist; //Diese Procedure gibt alle Labels frei
var LCount: Integer;
begin
  for LCount := 0 to LabelList.Count - 1 do //und zwar in dem alle Labels aus der Liste freigegeben werden
    TObject(LabelList.Items[LCount]).Free;
  LabelList.Clear;
end;
[...]
var
  i,j:integer;
begin
  ClearLabelList; //befor neue Labels angelegt werden geben wir die alten Labels frei
  Label4.Visible:=False;
  Wort:=sl.Strings[random(sl.Count)];
  Label4.Caption:=Wort;
  j:=176;
  for i:=1 to Label4.GetTextLen do
  begin
    Buchstabe:=TLabel.Create(nil);
    Buchstabe.Parent:=Form1;
    Buchstabe.Caption:=Copy(wort,i,1);
    Buchstabe.Left:=j+20;
    Buchstabe.Top:=176;
    j:=Buchstabe.Left;
    LabelList.Add(Buchstabe); //damits wieder freigegeben werden kann muss es noch in die Liste eingetragen werden
  end;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:30 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