Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   "Disco" (oder Countdown) in Delphi möglich? (https://www.delphipraxis.net/58613-disco-oder-countdown-delphi-moeglich.html)

Informatik_Doppelstundler 9. Dez 2005 15:19


"Disco" (oder Countdown) in Delphi möglich?
 
Hi! Verzeiht meine vermeintlich doofe Frage, aber ich fange eben grade erst mit Delphi an, angefangen durch den Informatik Unterricht aber auch privat viel spaß dran.
Also, meine Frage lautet:

Gibt es die möglichkeit in delphi einen countdown laufen zu lassen, bzw. "form1.color" von farbe grün zu rot, zu lime, zu orange...usw. wechseln zu lassen? Also praktisch eine disco ablaufen zu lassen? Natürlich gibt es das, aber ich hab halt keine ahnung wies geht. :stupid:

Ich habe genau diese letzte "disco"-idee mit einer for-schleife und einer while-schleife probiert, aber keine der beiden funktioniert. Er wechselt immer nur von der grundfarbe, die von vorneherein eingestellt ist, auf die letzte Farbe in der schleife. Dabei liegt es nicht daran, dass die schleife so schnell durchlaufen wird, dass man es nicht sieht (i in der for-schleife hab ich von 1 bis 7000000 laufen lassen!!) Naja wie gesagt, ich bin ratlos. Könnt ihr mir helfen?


P.S.: Das Problem liegt auch nicht in der Procedure, ich lass das unter edit1.change laufen, unter der bedingung, dass man "disco" eingibt.

faux 9. Dez 2005 15:25

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Hallo!

Mit einer Schleife wird es nicht gehen, da das Programm wärend deren Ausführung zuzusagen "gesperrt" ist, also keine Paint-Ereignisse auslöst.
Jetzt gibt es zwei Möglichkeiten.
Entweder du schreibst in deine Schleife Application.HandleMessage; um Delphi dazuzubringen, auch wären deiner Schleife das Formular neu zu zeichnen, oder du benutzt einen Delphi-Referenz durchsuchenTimer.
Ich würde den Timer bevorzugen.

Einfach einen Timer auf die Form (Reiter System) und auf Enabled:= True setzen, sowie das Intervall in millisekunden einstellen und dann doppelklicken und den Code eingeben.
Einfach mal probieren oder in der DP suchen.

Grüße
Faux

EDIT: Das Wort System hervorgehoben

FriFra 9. Dez 2005 15:27

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Mit einer Schleife wirst Du IMHO nicht glücklich werden, da diese viel zu schnell läuft. Nimm lieber einen Timer ;)

z.B.:
Delphi-Quellcode:
procedure TForm1.Timer1Execute(Sender: TObject);
begin
  if Color = clBtnFace then
    Color := clRed
  else if Color = clRed then
    Color := clGreen
  else if Color = clGreen then
    Color := clBlue
  else if Color = clBlue then
    Color := clLime
  else if Color = clLime then
    Color := clBtnFace;
end;

Informatik_Doppelstundler 9. Dez 2005 15:43

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Wow :shock: das ging ja schnell! So fixe antworten hätte ich nicht erwartet :) DankeDanke. Nu zum Problem:

Also ich hab euch verstanden, hab jetzt nur noch ein Problem:

Da ich delphi 5 leider auf englusch habe und die deutsche version nur in der schule, kann ich mit dem index eintrag zum "timer" net viel anfangen. Deswergen wärs klasse wenn ihr mir nochmal erklären könntet, wie man "einen timer setzt". :stupid:

faux 9. Dez 2005 15:46

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Im prinzip musst du diesen nur auf die Form setzen, und dann doppelt anklicken.
Alles was du dann in die erschienene Procedure schreibst, wird dann alle 1000ms (jede Sekunde) ausgeführt, es sei denn, du hast in der Eigenschaft Intervall einen anderen Wert.

Grüße
Faux

Airblader 9. Dez 2005 15:47

Re: "Disco" (oder Countdown) in Delphi möglich?
 
@FriFra
:shock: Noch nie von Delphi-Referenz durchsuchencase gehört? ;)

@Informatik_Doppelstundler
Einfach einen TTimer auf dein Formular ziehen und bei "Interval" die Millisekunden angeben.
Bei den Prozeduren dazu kannst du das Event OnTimer definieren, dass jeden Timerdurchlauf ausgeführt wird ;)

"Enables" sagt dir, ob der Timer läuft (TRUE) oder nicht (FALSE)

air

Interceptor 9. Dez 2005 15:48

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Der Timer is ne Komponente, befindet sich im Reiter 'System', wenn mich nicht alles täuscht.
Zieh ihn auf die Form, klicke doppelt drauf und du bist im On_Timer event, da schreibst du dann den Code rein.

Und nicht vergessen ihn vorher auf enabled := true zu setzen.

etom291272 9. Dez 2005 15:48

Re: "Disco" (oder Countdown) in Delphi möglich?
 
timer aufs formular ziehen property interval einstellen enabled auf true und im ereignis on timer den code rein -> fertig :mrgreen:

Informatik_Doppelstundler 9. Dez 2005 15:53

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Ja genau das war das problem (wo ich TTimer finde)

1000 Dank :-D


UUUND: Es funzt!!!!!! :-D :-D :-D :-D Fett! (Wofür werden Informatik-Lehrer bezahlt, wenn sie einem solche dinge net erklären können :twisted:

Also nochmal dankedankedanke :dp:

FriFra 9. Dez 2005 16:00

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Zitat:

Zitat von Airblader
@FriFra
:shock: Noch nie von Delphi-Referenz durchsuchencase gehört? ;)

Doch, aber ich bevorzuge trotzdem if, da man damit auch komplexere Abfragen realisieren kann... wenn einem mal irgendwann noch eine weitere Bedigung "einfällt", dann hat es sich ohnehin "ausgecased" ;)

Zitat:

Zitat von faux
Wo liegt bloß der Sinn, wenn vier Leute exakt das Selbe schreiben? :roll:

Den gibt es nicht :zwinker: ...

ichbins 9. Dez 2005 16:25

Re: "Disco" (oder Countdown) in Delphi möglich?
 
In der while-schleife wäre das auch möglich:

Delphi-Quellcode:
var
  lastact:tdatetime;
const
  interval:real=1;
begin
  while not application.terminated do begin //solange der Benutzer das Prog nicht geschlossen hat
    while now<lastact+interval/3600/24 do  //solange die letzte Aktion nicht länger als interval sekunden her ist
      application.processmessages;  //Windows-Nachrichten abarbeiten
    //jetzt farbe ändern
  end;

Airblader 9. Dez 2005 16:36

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Zitat:

Zitat von FriFra
Zitat:

Zitat von Airblader
@FriFra
:shock: Noch nie von Delphi-Referenz durchsuchencase gehört? ;)

Doch, aber ich bevorzuge trotzdem if, da man damit auch komplexere Abfragen realisieren kann... wenn einem mal irgendwann noch eine weitere Bedigung "einfällt", dann hat es sich ohnehin "ausgecased" ;)

Dann muss man Anfängern aber nicht die elegantere Lösung vorenthalten, nur weil einem die unschönere besser gefällt und es ja mal irgendwann sein könnte, dass es so nichtmehr geht ;)
Abgesehen davon kann case imho auch mehrere Bedingungen verarbeiten - habs aber selber noch nie probiert.

air

Master_RC 9. Dez 2005 17:09

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Noch so zum TTimer (hihi, TTimer [englisch ausgesprochen] ^^)

Das Property - also die Eigenschaft links bei Delphi "Interval" gibt an, wie oft er das ausführt, was du bei dem Timer alles so reinschreibs.

In Millisekunden halt ^^

Also Standard ist 1000 - also jede Sekunde macht der Timer was
500 wäre halt dann alle halbe Sekunde
2000 jede zeite Sekunde :)

Informatik_Doppelstundler 10. Dez 2005 17:35

Re: "Disco" (oder Countdown) in Delphi möglich?
 
Zitat:

Dann muss man Anfängern aber nicht die elegantere Lösung vorenthalten, nur weil einem die unschönere besser gefällt und es ja mal irgendwann sein könnte, dass es so nichtmehr geht Wink
Also case befehl kenn ich, hab das ganze auch damit programmiert weil if n wenig mehr tipparbeit gewesen wäre^^. an sich wärs jetzt aber für mich aufs gleiche rausgekommen ob ich nu if oder case nehme.. :coder:
das schönere an if-funktionen finde ich, dass mans besser nachvollziehen kann...rein von der struktur und der syntax her:
warum genau kann ich jetzt nicht begründen.. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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