Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi arrays (https://www.delphipraxis.net/1690-arrays.html)

Privateer3000 18. Dez 2002 12:37


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:
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;
Das soll so funktionieren das ein Klick auf Shape1 der Timer1 gestartet und gestoppt wird,Shape2 den Timer2 usw.
Helft mir mal bitte

Privateer

Christian Seehase 18. Dez 2002 12:41

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.

sakura 18. Dez 2002 12:42

Re: arrays
 
Delphi-Quellcode:
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;
Ungetestet, sollte aber gehen.

Privateer3000 19. Dez 2002 08:08

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)

mika 19. Dez 2002 11:35

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

Privateer3000 19. Dez 2002 15:54

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:
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;
nämlich in Form2.
Bitte nochmal Hilfe!

Christian Seehase 19. Dez 2002 16:02

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.

Privateer3000 19. Dez 2002 22:50

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