Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ZUfälliges Panel aufleuchten lassen (https://www.delphipraxis.net/106595-zufaelliges-panel-aufleuchten-lassen.html)

Scorp 13. Jan 2008 16:20


ZUfälliges Panel aufleuchten lassen
 
Hallo leute
ich habe ein irgentwie großes problem das aber wahrscheinlich für euch keins ist ;-) ehm ja dann fange ich mal an also ich will nen reaktiontest programieren und naja so mit 16 feldern (panel) und sagen wir mal alle 3 sek oder so soll eins zufällig aufleuchten und wenn man es anklickt geht es aus nebenbei soll eine weitere uhr mitlaufen was muss ich jetzt alles für diesen wahrscheinlich sehr einfachen vorgang machen bitte wenn es geht von a-z beschreiben was ich wo machen muss sorry und danke im vorraus

Klaus01 13. Jan 2008 16:24

Re: Problem (für mich groß)
 
Guten Abend,

um eine zufällige Zahl zu ermitteln
lohnt es sich random und randomize anzuschauen.

Um zeitgesteuerte Sachen zu machen, dazu kannst
Du dir einmal TTimer anschauen.

Um eine Komponente über eine Zahl anzusprechen z.B. Edit1.text, Edit2.text
dabei hilft dann FindComponent.
Oder Du packst Dir Deine Panel in eine Array, dazu mußt Du sie dann
aber dynamisch erzeugen.

Grüße
Klaus

Bastler 13. Jan 2008 16:26

Re: Problem (für mich groß)
 
Darf ich mal raten?
Du hast Monatg (also morgen) Informatik und musst noch Hausaufgaben machen; bei Google hast du diese Forum gefunden und hoffst jetz' das wir dir helfen...

1) Willkommen bei uns in der DP!
2) Wir sind nicht dazu da, deine Hausaufgaben zu machen, falls ich Recht habe, etwas eigeninitiative musst du schon mitbringen.

Aber ich will ja auch mal nicht so sein... Panel haben eine Eigenschaft Color, damit kannst du sie "Blinken" lassen, desweiteren solltest du dir Sachen wie TTimer und Timespan angucken... oder auch SecoundsBetween, aus den DateUtils, wenn ich mich nicht irre.

By the Way... das ganze past wesentlich besser in Sonstige "Fragen zu Delphi" doer "Projekte"!

DP-Maintenance 13. Jan 2008 16:28

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Die Delphi-IDE" nach "Sonstige Fragen zu Delphi" verschoben.

DeddyH 13. Jan 2008 16:32

Re: Problem (für mich groß)
 
Hallo, Willkommen in der DP :dp:

Tust Du uns zunächst 2 Gefallen? Ändere bitte den Titel des Threads, so dass man gleich erkennen kann, worum es geht. Und beachte bitte die Regeln der Rechtschreibung und Interpunktion, dann ist Dein Beitrag auch leichter zu lesen ;)

Wie kann man Dein Problem nun angehen? Nun, in meinen Augen wirst Du zunächst einen Zufallsgenerator brauchen, den Du einmalig mit Randomize initialisierst. Des Weiteren könnte eine Timer-Komponente auch nicht schaden. Diese bekommt ein zufälliges Intervall innerhalb einer gewissen Grenze verpasst. Wenn der Timer feuert, ermittelst Du ein zufälliges Panel und färbst dies z.B. rot (PanelX.Color := clRed). Gleichzeitig ermittelst Du die aktuelle Zeit mit now() und speicherst sie in einer Varaiblen ab. Wird dies Panel nun angeklickt, ermittelst Du wieder die Zeit und subtrahierst die eben gemerkte Zeit. Nun weißt Du, wie lange der Anwender gebraucht hat. Diese Angabe ist in Tagen, aber durch Multiplikation mit 86400 (=> 24 * 60 * 60) hast Du sie dann in Sekunden. Nun bekommt der Timer wieder ein anderes zufälliges Intervall. Die einzelnen ermittelten Reaktionszeiten kannst Du aufaddieren und durch die Anzahl der Durchläufe dividieren, damit Du die durchschnittliche Reaktionszeit bekommst.

Ich hoffe, das hilft Dir erstmal weiter.

Scorp 14. Jan 2008 13:41

Re: ZUfälliges Panel aufleuchten lassen
 
Wie man es theoretisch macht weiß ich jetzt in etwa, nur wie kann ich alle Panels (16 Stück) gleichzeitig zusammenfassen und Randomize drüberlaufen kann?
Kann man vieleicht alle Panels zusammen fassen deklarieren oder so? Ist das möglich


(ps: Es sind keine hausaufgaben, wir sollen uns selbst ein Projekt ausdenken und das probieren zu verwirklichen)

Relicted 14. Jan 2008 13:53

Re: ZUfälliges Panel aufleuchten lassen
 
Delphi-Quellcode:
randomize;
zahl := random( 15 ) + 1;

for i := 0 to ComponentCount - 1 do
begin
  if Components[i] is TPanel then
  begin
    if zahl > 1 then
      dec( zahl )
    else
    begin
      (Components[i] as TPanel).Color := clRed;
      Sleep(1000);
      (Components[i] as TPanel).Color := clGreen;
    end;
  end;
end;
ist mal ungetestet mal eben nebenher... vielleicht auch fehlerbehaftet aber damit könnte man etwas anfangen. lesen, verstehen, testen... Achtung: nicht zum copy pasten geeignet sondern nur ein denkansatz


gruß
reli

edit:

oder mit
Delphi-Quellcode:
( findcomponent( 'Panel'+IntToStr(Random(15)+1)) as TPanel ).Color := clBrabelschneck;
versuchen... syntax habe ich gerade nicht im kopf ... aber zum selber arbeiten sollte es reichen

DeddyH 14. Jan 2008 13:56

Re: ZUfälliges Panel aufleuchten lassen
 
Wenn Du die Namen der Panels nicht geändert hast und diese also Panel1 - Panel16 heißen, versuch mal Folgendes:
Delphi-Quellcode:
TPanel(FindComponent('Panel' + inttostr(Random(16) + 1))).Color := clRed;
Vorher einmalig z.B. im OnCreate Randomize aufrufen.

Scorp 19. Jan 2008 21:44

Re: ZUfälliges Panel aufleuchten lassen
 
Hallo leutet könnt ihr mir zufällig sagen was diese if anwendung bewirkt?

if y - radius < Leinwand.ClipRect.Top then
begin
y := Leinwand.ClipRect.Top + radius;
dy := -dy;
end;
if y + radius >= Leinwand.ClipRect.Bottom then
begin
y := Leinwand.ClipRect.Bottom - 1 - radius;
dy := -dy;
end;
if x - radius < Leinwand.ClipRect.Left then
begin
x := Leinwand.ClipRect.left + radius;
dx := -dx;
end;
if x + radius >= Leinwand.ClipRect.Right then
begin
x := Leinwand.ClipRect.right - radius;
dx := -dx;

Das wäre echt nett danke euch im vorraus ;-)

rollstuhlfahrer 19. Jan 2008 22:45

Re: ZUfälliges Panel aufleuchten lassen
 
also ich sag mal so:
wenn der Code in Delphi-Tags stünde und/oder ordentlich formatiert wäre, wäre er einfacher zu lesen
das ganze sieht dann so aus.
Delphi-Quellcode:
if y - radius < Leinwand.ClipRect.Top then
begin
  y := Leinwand.ClipRect.Top + radius;
  dy := -dy;
end;

if y + radius >= Leinwand.ClipRect.Bottom then
begin
  y := Leinwand.ClipRect.Bottom - 1 - radius;
  dy := -dy;
end;

if x - radius < Leinwand.ClipRect.Left then
begin
  x := Leinwand.ClipRect.left + radius;
  dx := -dx;
end;

if x + radius >= Leinwand.ClipRect.Right then
begin
  x := Leinwand.ClipRect.right - radius;
  dx := -dx;
end;
Des Weiteren lässt sich nur sagen:
radius, dx: Integer; Auf jeden Fall ne Zahl im pos. und neg. Bereich
Leinwand: TCanvas; bin mir aber nicht ganz sicher

Für weitere Aussagen ist der Code-Schnipsel zu klein

rollstuhlfahrer


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr.
Seite 1 von 2  1 2      

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