![]() |
Delphi-Version: 2007
Label[i]
Heyho, ich habe in einem Programm sagen wir mal 4 Labels als Positionsmarker gesetzt und möchte deren Eigenschaften top,left mit einem Timer auf Shapes übertragen, dass die Shapes wissen wo sie
hin müssen. da dachte ich im groben an so was
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i : integer; begin inc(i); ShapeRot.top:=Label[i].top; ShapeRot.left:=Label[i].left; end; So, dass das nicht klappen kann ist mit bewusst. Ich hatte nach StringToComponent gesucht, allerdings nichts passendes gefunden. Eine lösung für mich war dann, die Label Eigenschaften zu Beginn in 2 Arrays einzulesen. Ein Array für top und ein Array für left.
Delphi-Quellcode:
const maxarr = 4; ... topwerte : array[1..maxarr] of integer; leftwerte : array[1..maxarr] of integer; ... //um dann im form create die werte einzulesen... topwerte[1]:=Label1.top; leftwerte[1]:=Label1.left; . . . topwerte[4]:=Label4.top; leftwerte[4]:=Label4.left;
Delphi-Quellcode:
Soweit eine Lösung ich habe nur für mich das "Problem" , dass ich bei 40 Labels allein 80 Zeilen Code zum einlesen habe.
procedure TForm1.Timer1Timer(Sender: TObject);
var i : integer; begin inc(i); ShapeRot.top:=topwerte[i]; ShapeRot.left:=leftwerte[i]; end; Hätte jemand die Lösung wie ich das mit dem Arrays umgehen kann? LG Zeref |
AW: Label[i]
zwei Zeilen ... eine Schleife und
![]() |
AW: Label[i]
Könnte dich das Folgende auf den richtigen Weg führen:
Delphi-Quellcode:
Achtung, der Source ist nur einfach mal hingetippt.
var
mylabel : TLabel; i : Integer; begin for i := 1 to 10 do begin myLabel := FindComponent('Label' + IntToStr(i)); if Assigned(myLabel) then begin ShapeRot.top:=myLabel.top; ShapeRot.left:=myLabel.left; end; end; end; |
AW: Label[i]
vielen Dank für die Mühe :)
doch,
Delphi-Quellcode:
myLabel := FindComponent('Label' + IntToStr(i));
unit1.pas(66,16) Error: Incompatible types: got "TComponent" expected "TLabel" LG Zeref |
AW: Label[i]
Dann etwas anders:
Delphi-Quellcode:
Aber Vorsicht! Type-Casting in dieser Form nur, wenn du sicher bist, dass es auch wirklich von diesem Typ ist. Sollte aber eigentlich der Fall sein.
var
mylabel : TComponent; i : Integer; begin for i := 1 to 10 do begin myLabel := FindComponent('Label' + IntToStr(i)); if Assigned(myLabel) then begin ShapeRot.top := TLabel(myLabel).top; ShapeRot.left := TLabel(myLabel).left; end; end; end; |
AW: Label[i]
Delphi-Quellcode:
myLabel := TLabel(FindComponent('Label' + IntToStr(i)));
|
AW: Label[i]
vielen dank das fuktioniert super.. :)
ich will mich nicht aus dem Fenster lehnen, aber das TLabel davor sagt einfach bloß welche Komponente es direkt ist oder ? :D |
AW: Label[i]
Nein, nicht wirklich.
Es wandelt das, was in Klammern steht, in den angegebenen Type um. In diesem Fall TLabel. Eine Prüfung erfolgt nicht. Du könntest zum Beispiel auch TLabel(i) schreiben. Nur würde das mit Sicherheit zu Fehlern führen. |
AW: Label[i]
Warum nicht so
Delphi-Quellcode:
Man castet ja eh auf TLabel ohne zu prüfen, ob es wirklich ein Label ist. Dann kann man es auch gleich als TLabel deklarieren.
var
myLabel: TLabel; begin myLabel := TLabel(FindComponent('Label' + IntToStr(i))); Oder eben so
Delphi-Quellcode:
var
Comp: TComponent; myLabel: TLabel; begin Comp:= FindComponent('Label' + IntToStr(i)); if Comp is TLabel then begin myLabel: TLabel(Comp); end; |
AW: Label[i]
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 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