• Um einen Text auf einer GUI als Laufschrift auszugeben, gibt es in AutoIt standardmäßig nur die Möglichkeit den Text zeichenweise nach links laufen zu lassen.

    Das sieht nicht so toll aus und meistens ruckelt es auch.

    Hier kommt jetzt meine UDF zum Einsatz, die den gesamten Text vorab rendert und als HBitmap speichert. Anschließend kann man diese HBitmap dann pixelweise in ein Pic-Control blitten.

    Das ist (zumindest auf meinem Rechner) schön flüssig und sieht ganz gut aus (siehe Beispielscript im Anhang).

    Was bietet meine UDF:

    1. beliebiger Text (kann bis 2^32 Pixel lang sein, das sollte selbst fuer sehr viel Text reichen)

    2. jeder installierte Zeichensatz kann benutzt werden

    3. die Hoehe des Zeichensatzes wird automatisch ermittelt (anhand der Größe des Scrolltext-Control)

    4. der Zeichensatzstil (Kombinationen möglich) kann ausgewählt werden (0 = normal, 1 = bold, 2 = italic, 4 = underline, 8 = strikethrough)

    5. die Vorder- und Hintergrundfarbe des Textes sind frei wählbar (RGB-Format)

    6. wenn der Text komplett durchgescrollt wurde, wird "True" statt "False" zurückgegeben, sodass man dann darauf reagieren kann

    Update 16.02.2022:

    Mit der "_ShortSleep"-Funktion von Velted läuft das Beispiel auch mit einer niedrigeren Verzögerung als 10ms (Standard-Sleep) mit einer geringen Prozessorlast. Vielen Dank Velted!

    Hier das Example mit der erwähnten Funktion:

    Screenshot:

  • Danke,

    dafür habe ich in den nächsten Tagen verwendung :thumbup:

    LG

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Moin,

    noch eine Anmerkung zum Thema

    AutoIt
             _TimerSleep(4) ; "Sleep" mit Timer kann auch niedrigere Werte, allerdings mit 100% Last (ein Kern)

    Mit einer nicht dokumentierten Windowsfunktion geht das auch mit deutlich weniger CPU-Last:

    Die Funktion soll sich nach Allem, was ich bisher dazu gefunden habe, nur auf den aufrufenden Prozess auswirken. Einmal aufrufen und dann die Sleep() Aufrufe durch den zugehörigen DllCall ersetzen.

    AutoIt
    Func _ShortSleep($mSec)
        DllCall("Kernel32.dll", "None", "Sleep", "DWORD", $mSec)
    EndFunc

    Eine Auflösung von 1 Millisekunde (Minimalwert) wird zwar nicht immer erreicht, man kommt dem aber recht nahe.

    Einmal editiert, zuletzt von Velted (16. Februar 2023 um 14:09) aus folgendem Grund: Ein paar Textkorrekturen.

  • Sehr wertvoller Hinweis Velted 👍 , Danke!

    Viele Grüße
    Sven

  • Zu Oscar :

    Auch dir natürlich Danke für das Beispiel bzw. für die UDF 👍 . Ich hatte zwar noch keinen Bedarf für so etwas, dennoch gut zu wissen das es damit einfacher machbar ist, Danke 😀 .

    Viele Grüße
    Sven

  • Oscar
    Danke, schöne Funktion.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl