Funktionen zur Anzeige von Markierungen

  • Hallo Leute,

    ich wollte mir einige Funktionen zusammenbasteln, um Markierungen auf allen möglichen Fenstern anzuzeigen. Als Alternative zu Videotutorials, soll das Anlernen neuer Arbeitsvorgänge an einem konkret vorliegendem Fall möglich sein. Markierungen und Text-/Audioanleitungen sollen dabei unterstützen.

    Erst wollte ich es ganz ohne GDI+ machen, weil ich davon keine Ahnung habe. Mit GDI+ könnte ich aber auch Pfeile nutzen oder die Boxen variieren. Allerdings krampfe mir da einen ab. Kennt jemand hier vielleicht ein schon bestehendes Projekt, das ich nutzen kann?

    Bei meinem ersten Versuch blenden die Boxen schön aus (_WinAPI_AnimateWindow($aDeleteHandles[$i], BitOR($AW_BLEND, $AW_HIDE), 500) Zeile 221).

    Wie kann man das mit GDI+ machen?

    Zur Veranschaulichung mal meine beiden Versuche. Es gibt mehrere Beispiele (auskommentiert).
    Ohne GDI+

    Spoiler anzeigen

    Mit GDI+

    Spoiler anzeigen

    Grüße autoiter

    Einmal editiert, zuletzt von autoiter (18. März 2017 um 17:35)

  • Wie kann man das mit GDI+ machen?

    Das rausfaden? Schau dir doch mal deine _GDIPlus_PenCreate an. Du übergibst ihr dort eine Farbe die du erstellen willst.
    Die Farbe ist 4 Byte (ARGB). Der Alphakanal gibt die Deckung der Farbe an. FF = volle Deckung, 00 = transparent.
    Du kannst die Boxen aktualisieren (Graphics clearen) und mit einem neuen Pinsel transparenter zeichnen.

    Wenn du deine Fenster verschiebst werden die Boxen übrigens nicht aktualisiert, du musst also noch die WM_MOVE hooken mit GUIRegisterMsg.

  • Hey danke dir @alpines,
    genau das rausfaden meinte ich.

    Wenn du deine Fenster verschiebst werden die Boxen übrigens nicht aktualisiert, du musst also noch die WM_MOVE hooken mit GUIRegisterMsg.

    Ja, das fehlt definitiv noch. Bisher habe ich mir aber noch mit dem Erstellen der einfachen Boxen einen abgekrampft - da stand der Rest noch hinten an. Ich habe da noch viel Arbeit vor mir.

    Grüße autoiter

  • Moin!

    Ich habe mich schon vor einiger Zeit an etwas Ähnlichem versucht. Hab das Programm aber nie zuende geführt.
    Der Ansatz ist vieleicht etwas unorthodox, kommt aber ganz ohne GDI aus und benötigt nur ein "bisschen" WinApi ;)

    Es funktioniert für beliebige Fenster, was das Ganze komplizierter macht, als bei der Verwendung von selbst erstellen Guis. Daher musste ich auch die Bewegung des Child Fensters registrieren und nicht wie es sein sollte, des Parent Fensters.
    Wenn dir das so rum nicht gefällt, solltest du dir den Befehl _WinAPI_SetParent in Verbindung mit _WinAPI_SetWindowLong ansehen. Damit kann man ein beliebiges Fenster mit dem Popup Style versehen und als Child einbinden.

    Die Klassen bzw. Namen der Controls kannst du ja mit einem Tool wie Au3Info anzeigen lassen und entsprechend im Skript verwenden. Ansonsten gibts hier eine UDF von Großvater, die alle Controls eines Fensters ausliest (noch nicht von mir getestet).
    Du kannst selbstverständlich auch beliebig mit GDI+ in der transparenten Gui malen, aber der Einfachheit halber habe ich Labels verwedet.

    Funktioniert ziemlich gut mit Scite oder Au3Info als zu "verunstaltendem" Fenster. Andere Fenster, wie z.B. die AutoIt Hilfe oder der Explorer machen Probleme, was ich aber nicht weiter ergründet habe. Musst du einfach mal selbst rumprobieren ;)

    Die Funktionen "_TagControl" und "_CreateThickFrame" habe ich bewusst getrennt, so dass man mit "_CreateThickFrame" eigene Rahmen "von Hand" erstellen kann.
    Achtung: Später gezeichnete Rahmen überlagern komplett vorher erstellte.

    Hier das Skript (nicht das Sauberste:(

    Spoiler anzeigen

    Das sieht zwar jetzt nach sehr viel Code aus, aber das Meiste ist nur Demo.
    Was du letzten Endes brauchst, ist die Erstellung der Child Gui und die Funktionen "_TagControl" und "_CreateThickFrame"

    ==> siehe Funktion "_Au3InfoDemo"


    Anmerkung: Ich war nie wirklich zufrieden damit, was wohl auch der Grund ist, weshalb ich nicht weiter gemacht habe.

    • die Größe des "Parent" Fensters läßt sich ändern, ohne dass die Child Gui sich ändert (kann man verbessern, denke ich).
    • an bestimmten Stellen ist es möglich, das "Parent" Fenster ohne das Child zu bewegen. Immerhin funktioniert aber das minimieren...
    • der Fenstertitel wird überdeckt

    Beste Grüße, Friesel