Beiträge von Oscar

    Ich benutze seit einiger Zeit die App "NUNAV" auf dem Smartphone (Android). Die ist kostenlos und benutzt ebenfalls die Google-Daten zum Straßen-"Füllstand".

    Die App hat auch eine deutsche Sprachausgabe, die dann schon rechtzeitig über die weitere Fahrtrichtung informiert, ohne dass man unbedingt auf das Display schauen muss.

    Mir gefällt die App ganz gut. Vielleicht wäre das auch etwas für Dich.

    anbei der Komplette Code:

    Du solltest nicht die benutzten Funktionen aus den UDFs herauskopieren und in Dein Script einfügen, sondern mit "Include" arbeiten.

    Ich habe Dein Script mal dahingehend angepasst (und mit Tidy formatiert):

    Ich möchte gerne einen Countdown in das Ok Button hinzufügen, das die vorgebene Zeit herunter zählt.

    Es gäbe da auch noch die Möglichkeit mittels der Timer-UDF:

    das nenn ich mal geschmeidig.

    Naja, noch nicht ganz! Die globalen Variablen stören noch.

    Ich habe das Ganze noch etwas umgebaut, sodass nur statische Variablen benötigt werden:

    Ich habe mir das mit dem sortieren beim Listview mal in C++ angesehen.

    Man braucht gar nicht das Colum-Image ändern. Stattdessen handelt es sich um den Header des Listviews.

    Das Handle zum Header kann man ermitteln und dann die Sortierpfeile entsprechend anpassen (HDF_SORTUP und HDF_SORTDOWN).

    Hier mal als Beispielcode:


    Screenshot:

    Hast du eine Einstellung entdeckt, dass man die Up/Down-Pfeile evtl. rechts vom Text im Header anordnen könnte?

    Hmm...das hat nichts mit den Sortier-Pfeilen zu tun. Das Problem liegt am Platz für den Checked-Haken.

    Der wird hier immer freigehalten, auch wenn der Modus gar nicht aktiv ist (idPlaylist.enableCheckBoxes(true) ist gar nicht vorhanden). Somit müsste die erste Spalte eigentlich ganz am Rand stehen, was aber nicht der Fall ist.


    Edit: Ein möglicher Workaround wäre, eine zusätzliche erste Spalte (mit Größe 0) einzufügen. So wird der Platz für den Checked-Haken auf Null gesetzt:

    Aber wie soll ich Werte mit dieser Vorgabe vergleichen? Die Callback-Funktion verlangt Integer als Parameter und das Ergebnis ist auch Integer. Ich habe aber Textdaten in der Liste, die ich vergleichen möchte.

    Bei den Integerwerten für die Callback-Routine werden die Indexe der zu sortierenden LV-Einträge übergeben. Damit kannst Du dann den Itemtext auslesen und das Ergebnis des Vergleichs als Returnwert übergeben.

    Hier mal ein Beispiel:

    kann mir jemand erklären, warum die frame rate droped nach einer kurzen Zeit (sofern die Maus nicht bewegt wird) ?

    Das liegt am MessageLoop-Modus (GUIGetMsg in der Mainloop). GUIGetMsg erzeugt automatisch Sleeps (ohne Mausbewegung/Tastatureingaben), um den Prozessor zu entlasten.

    Nimm lieber den OnEvent-Modus oder benutzte die Timer-UDF für die Zeichenoperationen.

    darf ich Hilfe erwarten?

    So geht's:

    Ja, ich wollte eigentlich noch etwas zu dem "warum: GUICtlrCreatePic" schreiben, hatte aber nicht mehr soviel Zeit.

    Deswegen hier die Erklärung:

    Bei GUICtrlCreateIcon gibt es einen Bug: wenn man keine Icondatei beim Erstellen angibt, wird ein Platzhalter mit den Maßen 0,0 (width, height) erzeugt, und _WinAPI_GetClientRect liefert nicht die korrekten Daten.

    Bei GUICtlrCreatePic tritt das nicht auf, weshalb ich bevorzugt dieses Controlelement benutze.


    Beispiel:

    Ich würde lieber ein Pic-Control nehmen und eine kleine (selbstgeschriebene) Funktion:

    Ich gebe zu Bedenken, dass eine Aktualisierung bei jedem Schleifendurchlauf u.U. dazu führt, dass der Prozessor mehr mit dem aktualisieren beschäftigt ist, als die eigentliche Aufgabe auszuführen.

    Deshalb wäre eine Aktualisierung nur alle xxx Millisekunden viel zielführender. Sowas lässt sich sehr leicht mit einem Timer realisieren.

    Hat jemand eine Idee, wie ich das gebacken bekomme?

    Habe schon länger nichts mit NIM gemacht, musste mich erst wieder einlesen. :)

    Man muss OpenClipboard mit dem Fensterhandle aufrufen und EmptyClipboard verwenden, dann funktioniert es auch mit Office.

    Hier mal die geänderte Funktion:

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

    Cool! Ich hatte schon ziemlich lange nach einer anderen Sleep-Funktion gesucht, aber diese Variante habe ich nicht gefunden.

    Vielen Dank dafür! :):thumbup:

    Ich habe das Beispielscript in Post#1 entsprechend angepasst.

    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:

    Ein Problem gab es noch: und zwar den Fokus-Rahmen. Der war immer dunkelblau, was auf einem dunklen Hintergrund natürlich ungünstig ist.

    Jetzt habe ich es geschafft, eine Funktion zu schreiben, die mir den Index vom Link mit dem Focus zurückgibt, aber $NM_CUSTOMTEXT gibt mir nur den Text aus, aber nicht den Index des gerade zu zeichnenden Textes.

    Also habe ich etwas getrickst und die Texte selbst mit einem Index versehen. Dazu benutze ich eine statische MAP, um die Texte und die Indizes zu speichern.

    Auf jeden Fall kann man so auch die Farbe für den Fokus-Rahmen ändern (wegen der MAP nur mit der aktuellen AutoIt-Version):


    Screenshot:

    Ich habe mich mal noch etwas mehr damit beschäftigt und speziell ging es mir um die Möglichkeit die Farben der Links zu ändern, sodass man auch einen dunklen Hintergrund benutzen kann.

    Ich habe mal ein Beispielscript erstellt, bei dem statt der Callback-Routine nur GuiRegisterMsg verwendet wird (ist für Anfänger vielleicht einfacher zu verstehen):

    Screenshot:

    Ach shit!

    Jetzt, wo ich das hier aufgeschrieben habe, sehe ich den Fehler: lpRect muss ein Pointer sein und nicht $tagRECT.

    Es muss also so aussehen:

    AutoIt
    Global Const $tagNMCUSTOMTEXT = 'struct;' & $tagNMHDR & ';handle hDC;ptr lpString;int nCount;ptr lpRect;uint uFormat;bool fLink;endstruct'

    Manchmal sieht man den Wald vor lauter Bäumen nicht.