![]() |
arrays
Hi Leutz,
ich brauch mal Schützenhilfe bei ner wahrscheinlich sehr simplen Sache. Ich möchte folgenden Code nicht 10 mal schreiben sondern die Timer "durchzählen".
Code:
Das soll so funktionieren das ein Klick auf Shape1 der Timer1 gestartet und gestoppt wird,Shape2 den Timer2 usw.
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if (timer1.enabled=false) then timer1.enabled:=true else timer1.enabled:=false; form2.label1.visible:=true; form2.label1.color:=clMaroon; end; Helft mir mal bitte Privateer |
Moin Privateer,
wenn die Namen schön durchnummeriert sind, kannst Du das mit FindComponent lösen. Dazu solltest Du hier im Forum ein paar Beispiele finden können. |
Re: arrays
Delphi-Quellcode:
Ungetestet, sollte aber gehen.
procedure TForm1.AnyShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var aTimer: TTimer; begin if Sender <> nil then if Sender is TShape then begin aTimer := FindComponent('Timer' + Copy(TShape(Sender).Name, 6, 2)) as TTimer; aTimer.Enabled := not aTimer.Enabled; end; end; |
Besten Dank für die ANtwort.
Irgendwie gehts net.Kommt aber auch keine Fehlermeldung, weder beim compilieren noch im laufenden Programm. 2 Fragen dazu: "AnyShape" ist ein künstliches Wort und kein reserviertes?! Was bedeutet in "Copy(TShape(Sender).Name, 6, 2))" die 6 und die 2? einen wunderschönen tag allen :o) |
Copy
kann dir bei deinem ursprünglichem Problem leider nicht helfen aber
Copy( Shapename, 6, 2 ) bedeuetet das von dem String "Shapename" von dem 6.ten Zeichen an 2 Zeichen kopiert werden und als antwort dieser funktion zurückgegeben werden. mfg, Mika |
Danke für die Antwort.
Wie kann ich eine Komponente finden die sich in einer anderen Unit befindet?? Die Labels befinden sich in einem anderm Form.So siehts im Moment aus:
Code:
nämlich in Form2.
procedure TForm1.AnyShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var aTimer: TTimer; aLabel: TLabel; begin if Sender <> nil then if Sender is TShape then begin aTimer := FindComponent('Timer' + Copy(TShape(Sender).Name, 6, 2)) as TTimer; aLabel := FindComponent('Label' + Copy(TLabel(Sender).Name, 6, 2)) as TLabel; if (atimer.enabled=false) then aTimer.Enabled := not aTimer.Enabled else atimer.enabled:=false; form2.aLabel.visible:=true; form2.aLabel.color:=clMaroon; end; end; Bitte nochmal Hilfe! |
Moin Privateer,
FindComponent ist eine Methode einer Komponente. In Deinem Beispiel wird vom Compiler angenommen, dass er die Methode der Komponente TForm1 aufrufen soll, da keine weitere Angabe gemacht wird, und die Methode in einer Methode von TForm1 aufgerufen wird. Indirekt steht dort nicht FindComponent sondern self.FindComponent, bzw. Form1.FindComponent. Womit Du eigentlich auch schon die Lösung hast. Du musst nur angeben, von welcher Komponente die Methode FindComponent aufgerufen werden soll, also in Deinem Falle Form2.FindComponent. |
kewl,
Danke Chris! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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-2025 by Thomas Breitkreuz