ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
2126
2126
EMPFEHLEN
-
Hallo,
Ich habe mir in einer Schleife mehrere Shapes und Timer erstellt und ihnen Namen zugewiesen. Diese übergebe ich an eine Prozedur Shapecontroll. Das klappt soweit auch, nur weiß ich jetzt nicht, wie ich die jeweiligen Objekteigenschaften der Shapes und Timer anspreche.
klappt nicht, da bekomme ich die Fehlermeldung:Code :1
SName.top:=SName.top+5
Was muss ich also tuen, um mit den jeweiligen Eigenschaften arbeiten zu können?Code :1
Record, Object oder Klassentyp erforderlich
Hier mal der gesamte Quellcode:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
procedure TForm1.FormCreate(Sender: TObject); var j:integer; begin randomize; Leben := 20; schritt:= 10; Label1.caption := inttostr(Leben); for j:=6 to 15 do begin SName:='Shape'+inttostr(j); TName:='Timer'+inttostr(j); MyTShape:=TShape.Create(Self); MyTShape.Parent:=Form1; MyTShape.Show; MyTShape.Name:=SName; MyTShape.Brush.Color:=clred; MyTShape.height:=random(30)+10; MyTShape.width:=random(30)+10; MyTShape.top:=16; MyTShape.left:=random(193)+40-MyTShape.width; MyTTimer:=TTimer.Create(Form1); MyTTimer.Name:=TName; Shapecontrol(SName,TName); end; end; procedure TForm1.Shapecontrol(SName,TName:string); begin label1.caption:=TName; label2.caption:=SName; SName.top:=SName.top+5; end;
In den Labels werden die erzeugten Namen angezeigt, allerdings weiß ich nicht ob das auch heißt, dass die Objekte erzeugt sind, wobei die Shapes zu sehen sind.
MfG Blck
-
25.05.09 09:15 #2
- Registriert seit
- Mar 2004
- Beiträge
- 441
-
Du hättest in ShapeControll stattdessen Parameter von den Typen Shape : TShape und Timer TTimer verwenden sollen
Code :1 2 3 4 5 6 7 8
.... ShapeControl(MyTShape, MyTTimer); ... procedure ShapeControl( Shape: TShape, Timer : TTimer); ... Shape.Top := Shape.Top +5; ....
vop
-
Hallo,
ja sowas hatte ich mir beinahe gedacht. Wie erzeuge ich den jetzt für den generierten Timer MyTTimer eine Prozedur zur Überprüfung, also wie bei einem normalen Timer?
MfG Blck
-
Du kannst dem OnTimer-Ereignis deines Timers eine Prozedur zuweisen. Dabei muß die Prozedur von demselben Typ sein wie eine normale OnTimer-Prozedur also etwa
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
type procedure MyTimerProc(Sender:TObject); ... implementation procedure MyTimerProc(Sender:TObject); begin // Dein Code // Sender ist dabei dann jeweils dein Timer // über (Sender as TTImer).Tag beispielsweise kannst du // erkennen, welcher Timer es ist, wenn du bei der // Erzeugung der Timer das Property Tag zuweist. // Das kannst du natürlich auch über // (Sender as TTimer).Name end; ... // So wird die Prozedur dem Timer zugewiesen MyTTimer.OnTimer := MyTimerProc;
-
Hallo,
Vielen Dank für deine Hilfe!
Ich hab das jetzt mit drin und das läuft auch. Nur wie kriege ich folgendes Szenario zum laufen(Dynamisch erzeugt, statisch ist das kein Problem):
Timer1 kümmert sich um Shape1 (Shape1.top:=Shape1.top+1)
Timer2 kümmert sich um Shape2 (Shape2.top:=Shape2.top+1)
Timer3 kümmert sich um Shape3 (Shape3.top:=Shape3.top+1)
.
.
.
Mfg Blck
-
Schreibe deine Timer-Prozedur selbst dynamisch, indem du in er Verarbeitungsroutine für den Timer abfragst, welcher Timer sie ausgelöst hat (Sender)
über (Sender as TComponent).Name beispielsweise erhältst du den Namen des Sender-Objekte (beispielsweise 'MyTimer1')
Oder aber wie bereits erwähnt könntest du bei der Erzeugung der Timer die Eigenschaft Tag verwenden und diese in der Verarbeitungsroutine wieder auslesen etwa
Code :1
Nummer := (Sender as TTimer).Tag;
Hast Du den Namen einer gewünschten Komponente, kannst du folgendermaßen auf sie zugreifen (nur runtergeschrieben, nicht getestet)
Damit solltest du weiterkommen,Code :1 2 3 4 5 6 7 8 9 10 11 12 13
var Comp : TComponent; Name : string; Shape : TShape; Nummer : int; begin ... Nummer := (Sender as TTimer).Tag; Name := 'Shape' + IntToStr(Nummer); Comp := FindComponent(Name); Shape := TShape( Comp); Shape.Left := Shape.Left+5; ...
Gruß vop
-
Hallo,
Entschuldigung für die späte Rückmeldung! Ich hatte in letzter Zeit nicht viel Muße um mich damit zu beschäftigen!
So dein Script funktioniert, nur das nach einiger Zeit ein Laufzeitfehler auftritt und die Zeile:
als schuldigen deklariert. Ich bin beim dynamischen Erzeugen & Verarbeiten von Shape total unerfahren, deswegen die vielen NAchfragen.Code :1
shape.top:=shape.top+5;
MfG Blck
Ähnliche Themen
-
Turbo Delphi - Externe Komponenten einfügen
Von Alex Duschek im Forum Delphi, Kylix, PascalAntworten: 0Letzter Beitrag: 29.06.09, 22:30 -
top position dyn. erzeugter Shapes
Von blck im Forum Delphi, Kylix, PascalAntworten: 0Letzter Beitrag: 24.06.09, 22:48 -
Eigenschaften von Komponenten
Von Divi im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 28.05.06, 19:20 -
Doppeltes Komponenten-Array ... Problem! (Delphi)
Von RealSucker im Forum Delphi, Kylix, PascalAntworten: 2Letzter Beitrag: 13.05.05, 13:37 -
Hintergrund transparent bei von PHP erzeugter Grafik
Von neuni im Forum PHPAntworten: 3Letzter Beitrag: 07.02.05, 02:09





Zitieren
Login





