Komponente mit Bewegung



  • Moin Moin,

    ich möchte eine Button/Menü-Komponente schreiben.

    Und dabei soll bei einem Klick eine kleine Animation durchgeführt werden, später möglicherweise auch eine Animation wenn gerade nicht geklickt wird.
    Getriggert werden soll die Animation dann aber schon durch eine Benutzeraktion, also zum Beispiel der Klick auf einen anderen Button.

    Deshalb die Frage:
    Wie macht man das mit der Animation am besten?
    a) Beim Klick eine Schleife abarbeiten und eben einfach alles nacheinander zeichnen
    b) Einen Extrathread dafür hernehmen?
    c) Einen Timer dafür hernehmen?

    Die Animationen sollen natürlich nicht lang sein weniger als 1 Sekunde, deshalb denke ich, dass man mit a) ganz gut fährt, oder?

    Was gibts da für empfehlungen?

    Danke
    jenz



  • Bei a) blockierst du dir dann aber selber alle GUI-Aktionen, d.h. der Anwender muß dann erst das Ende der Animation abwarten, ehe er am Programm weiterarbeiten kann.
    Daher empfehle ich einen Timer (c) --- bedenke jedoch, daß die Timer-Genauigkeit bei ca. 15ms liegt.



  • Ja, das ich dann blockiere ist mir klar.
    Aber, es sollen wirklich nur kurze Animationen sein.
    1 Sekunde ist da wahrscheinlich schon lang angegeben.
    Ich denke, dass es sich eher so um 200ms handelt.
    Ein Blinken eben, oder ein Farbwechsel, sowas.

    Statt Timer würde ich dann aber lieber einen Thread nehmen.
    Oder spricht das was gegen?

    jenz



  • Ja es spricht gegen einen Thread, weil die Animation eine reine GUI-Aktion ist (und daher mittels Synchronize() vollständig im GUI-Thread ablaufen muß) - der Neben-Thread wäre also gar nicht beschäftigt und damit sinnlos.



  • naja, ich würde im thread alles in ein bitmap malen und wenn ich damit fertig bin, dann das bitmap per synchronize in einem rutsch darstellen.

    außerdem dachte ich, dass die anzahl der timer begrenzt wäre.
    wenn man also "heimlich" welche benutzt, wäre das nicht so clever, oder?

    jenz



  • Die Anzahl für Timer ist glaube pro Prozess begrenzt und war auf NT glaube 16 Timer pro Prozess (bei XP bzw. Vista oder 7 wahrscheinlich wesentlich höher).

    Also solange du dein Programm nicht mit Timern zu bombardierst sollte nicht gegen einen Timer sprechen^^


Anmelden zum Antworten