GDI+ Countdown

  • meinst du mithilfe einer For Schleife?


    das ist ja leider nicht ganz das was ich will ich will den Countdown genau in dem Style zoomen wie im Code den ich gepostet hatte

    Es ist nicht alles so wie es scheint, gebt der Sache eine Chance und urteilt dann.... :thumbsup:

  • mit der For Schleife ist es sehr leicht ja:
    For $i = 0 To 20
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    _GDIPlus_GraphicsClear($hBuffer, 0xFFA2FF00)
    _GDIPlus_GraphicsDrawString($hBuffer, StringFormat("%02i - %02i:%02i:%02i", $days, $hour, $Mins, $secs), $xAchse, $yAchse, "Arial", $i)
    Sleep(50)
    Next


    Ist aber nicht das was ich will, wenn mir jemand helfen kann, ich währe dann sehr sehr dankbar


    Edit: Ich habe es jetzt so geschafft den Countdown zu machen, an sich sieht das schon super aus nur der einzige Fehler ist, während dem Zoomeffekt, Geht der Countdown nicht runter, das heist er bleibt stehen, das soll nicht sein hat jemand dazu Hilfestellung?


    Edit: So Ich habe es geschafft mein Problem nun selber zu lösen :) Habe mir den Code nochmal genau angeschaut und habe den Fehler gefunden :) Ich danke euch trotzdem für eure Hilfe :)


    Habe euch den Code aktualisiert, Funktioniert genau so wie ich es mir vorstelle


    Hier der Code:

    Es ist nicht alles so wie es scheint, gebt der Sache eine Chance und urteilt dann.... :thumbsup:

    3 Mal editiert, zuletzt von Ququknife ()

  • Ich hab dein Script etwas verändert:


    Und zwar hab ich folgende Unschönheiten beseitigt:
    .) Du erstellst bei jedem Schleifendurchgang einen neuen Pfad, ohne dass du diesen wieder aus dem Speicher freigibst.
    entweder immer wieder freigeben (GdipDeletePath), oder wie in meinem Sript nur einmal erstellen und diesen einen Pfad verwenden


    .) Die Matrix, welche die Schrift zentriert, muss nur einmal berechnet werden


    .) Du hast eine Endlosschleife in deiner Update-Funktion und rufst diese trotzdem jede Sekunde neu auf
    Ich hab es so verändert, dass der Text nur dann neu geschrieben wird, wenn dieser sich verändert hat


    .) Du solltest in Zukunft auch diese 2 Dinge berücksichtigen:
    - deklariere niemals innerhalb einer Function eine Variable Global
    - deklariere niemals innerhalb einer Schleife eine Variable, sondern immer davor



    Evtl interessiert dich das noch: einen schönen Effekt ergibt es, wenn du als Hintergrund ein Foto verwendest (_GdiPlus_ImageLoadFromFile) und den Alphakanal von $hBrush auf leicht transparent setzt...


    E

  • eukalyptus
    ich bedanke mich bei dir für deine Hilfe, und deine Hinweise, diese werde ich dann in Zukunft berücksichtigen.
    ich habe dein Script direkt getestet, und es kommt mir so vor, als würde der Zoom flüssiger laufen als davor :)


    Vielen Dank dafür.


    Nur eine Frage hätte ich noch Warum sollte man niemals innerhalb einer Schleife eine Variable Global deklarieren, wenn es dennoch zu Funktionieren scheint, diese Frage ist nur zum Verständnis für mich :)

    Es ist nicht alles so wie es scheint, gebt der Sache eine Chance und urteilt dann.... :thumbsup:

  • Hi,


    weil diese Variable dann nur unter Umständen (der Schleifenbedingung) deklariert wird. Gilt natürlich vor allem für kopfgesteuerte Schleifen. Das kann Fehler verursachen. Außerdem ist es kein guter Stil.
    Allgemein werden Variablen immer am Programmanfang deklariert (außer lokale natürlich :D).


    Gruß stay

  • ok das klingt plausibel damit kann ich etwas anfangen :) dann werd ich mich in zukunft daran halten. nur zum verständnis,


    Global Variablen deklariere ich immer am Scriptanfang auserhalb einer schleife,
    Local Variablen deklariert man auch normalerweise am Scriptanfang, man kann sie aber auch in einer schleife für bestimmte Optionen deklarieren


    habe ich das richtig verstanden?

    Es ist nicht alles so wie es scheint, gebt der Sache eine Chance und urteilt dann.... :thumbsup:

  • man kann sie aber auch in einer schleife für bestimmte Optionen deklarieren


    Nein, innerhalb einer Schleife notwendige Variablen sollst du vor Schleifenbeginn deklarieren. Anderenfalls wird bei jedem Durchlauf völlig unnötig die Variable neu deklariert.


    Local Variablen deklariert man auch normalerweise am Scriptanfang


    Auch nein. Locale Variablen sind, wie der Name sagt, nur in einem lokalen Umfeld, also innerhalb einer Funktion gültig. Somit erstellt man sie erst innerhalb einer Funktion.
    Wird eine Variable am Skriptanfang mit Local deklariert ist sie dann trotzdem Global.