AGB  ·  Datenschutz  ·  Impressum  







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

arrays

Ein Thema von Privateer3000 · begonnen am 18. Dez 2002 · letzter Beitrag vom 19. Dez 2002
Antwort Antwort
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#1

arrays

  Alt 18. Dez 2002, 12:37
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
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: arrays

  Alt 18. Dez 2002, 12:42
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.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#4
  Alt 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
)
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#5

Copy

  Alt 19. Dez 2002, 11:35
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
:: don't Panic ::
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#6
  Alt 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!
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#8
  Alt 19. Dez 2002, 22:50
kewl,

Danke Chris!
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:50 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