Funktion aufrufen und ausführen, solange bool = true

maexle1894

Mitglied
Hi Leute,
ich bin schier am verzweifeln und weiß absolut nicht, wie ich das Problem lösen soll:

Ich habe im CBuilder ein Programm geschrieben, dass einige Visualisationen von Winamp steuern kann. Alles funktioniert einwandfrei. Jetzt würde ich gerne noch eine Auto-Funktion einbauen, d.h. Effekte werden random-like gesetzt, z.B. alle 3 Minuten.

Die Fkt., die die Effekte mit random belegt, heisst automatic() und ändert bei jedem Aufruf die Effekte ab.

Ich habe einen Button, bei dessen Betätigung diese Funktion alle 3 Minuten aufgerufen wird. Die Aufrufe sollten dann logischerweise bei einem weiteren Klick wieder aufhören.

Hat mir jemand eine Idee oder einen Denkanstoß?

mfg maexle
 
Ich kenne mich zwar mit CBuilder im speziellen nicht aus, aber Windows-Programmierung ist ja Windows-Programmierung...

Für solche Aufgaben prädestiniert ist das Timer-Steuerelement. Dem gibst du eine bestimmte Zeitspanne als Intervall mit. Wenn der Timer jetzt aktiviert ist, schickt er jeweils nach Ablauf dieser Zeit eine Nachricht an ein bestimmtes Fenster (immer wieder, so lange der Timer aktiv ist). Diese musst du dann abfangen und entsprechend deine Funktion aufrufen. Mit deinem Button aktivierst bzw. deaktivierst du den Timer dann.

Mit einem Codebeispiel kann ich dir hier leider nicht dienen. Aber der Begriff "Timer" sollte dir bei eigenen Recherchen hilfreich sein.
 
Sorry, das gepostete hier im Forum übersteigt meinen Horizont und hat mir nicht weitergeholfen...

Ich mach mir also einen Timer in meiner .h Datei.
Code:
TTimer *timer;

Den inizialisiere ich, wenn ich auf den Button klicke :
Code:
void __fastcall TForm1::Button6Click(TObject *Sender)
  {
  if (automatic_var) automatic_var = false; else automatic_var=true;
  
  if (automatic_var) timer->Enabled=true;
  else timer->Enabled=false;
  
  }

Dann habe ich eine Funktion, die TForm1::timer heisst, in der ich dann den Intervall und die Aktionen mache? Oder welche Funktion wird dann aufgerufen, wenn der Timer ausgelöst wird?

Ein praktisches SetTimer gibts ja nicht im cbuilder...
 
ist viel einfacher, als du dir das vorstellst:

Es gibt ein Komponente Timer, die du wie einen
Button auf deinen Dialog ziehen kannst. Findest
du in der Komponentenregisterkarte 'System'.
Gleich das erste Element ist der Timer.

Du kannst dann im Objektinspektor gleich alles
so einrichten wie du es brauchst (Interval, Enabled).

Immer wenn du dann Timer->Enabled = TRUE setzt
läuft dein Timer und führt den Code aus den du hinter
OnTimer hinterlegt hast (Diese Funktion kannst du über
die Ereignisse-Registerkarte im Objektinspektor anlegen.

Mit Timer->Enabled = FALSE stoppst du den Timer, z.B.
bei deinem erwähnten Mausklick.

Ich hoffe das hilft.

Greets
BadMourning
 
ggg, das ist ja einfach. Vielen Dank...

Komisch, dass ich den nie gefunden habe, die PaintBox direkt daneben habe ich auch schon verwendet *grrrr*.

Naja, Programm funktioniert bestens... Ich danke.
 
Zurück