Auf Screen gezeichnete GDI+ Grafiken wieder sauber löschen - Ohne Flackern

  • Moin AutoIt-ler,

    dies ist das erste Mal das ich GDI+ mal fürs zeichnen verwenden möchte. Habe sonst lediglich Screenshots weiter verarbeitet und gespeichert.

    Ich möchte also gerne direkt auf dem Screen zeichnen. Nach einiger Recherche habe ich herausbekommen das man wohl immer eine GUI benötigt damit man etwas auf dem Screen darstellen kann.

    Habe das Beispiel von "Croco" aus diesem Forum übernommen: https://www.elitepvpers.com/forum/coding-t…hirm-malen.html mit dem die GUI ja tatsächlich transparent wird und es quasi wirkt als würde man direkt auf den Screen zeichnen.

    Mein Problem ist nur, das ich gezeichnete "GDI+ Graphics" nicht sauber wieder gelöscht bekomme. Tatsächlich funktioniert nur die dort gepostete WinApi Funktion:

    Code
    _WinAPI_RedrawWindow($hWND)

    Da ich aber eine Art "Animation" darstellen wollte bei den ich immer wieder das Gezeichnete schnell hintereinander löschen müsste entsteht aufgrund der WinApi-Funktion ein starkes Flackern.

    Habt ihr eine Idee wie man dies sauber darstellen könnte (ohne Flackern) ?


    Beispiel-Skript: (angehängte .gif muss sich im skript-ordner befinden: autoit.de/wcf/attachment/89077/ )

  • Was Du vermutlich brauchst, ist ein sog. Backbuffer. Schau Dir mal ein paar Threads im Zusammenhang von AutoIt, GDI+ und Backbuffer an.

    Außerdem solltest Du die Grafik wahrscheinlich nur zu bestimmten Zeitpunkten aktualisieren. Windows stellt dafür Events (Stichwort: WM_PAINT) zur Verfügung.

    Mehr Infos gibt es z.B. hier:

    GDI+ Backbuffer verstehen - Übersicht

    https://www.autoitscript.com/forum/topic/10…i-doublebuffer/

    https://www.autoitscript.com/forum/topic/86210-gdi/

    Hier ist ein altes Beispiel von mir, als ich noch tiefer in dem Thema steckte - starten, Shift-Taste gedrückt halten und die Maus bewegen:

    Spoiler anzeigen

    Viele Grüße,

  • Danke SEuBo,

    das ist wirklich nützlich. Auch das man das .gif gar nicht benötigt um eine transparente GUI zu erzeugen. Komfortabler. Ich kann mir schon ungefähr denken wozu der Backbuffer dient, werde mich dazu aber nochmal belesen. :thumbup:

  • Gerne! Noch ein Nachtrag, denn ich fürchte das obige Script zeigt nur den Backbuffer-Teil, der aber wahrscheinlich fürchterlich umgesetzt ist:

    Die Funktion _WinAPI_BeginPaint solltest Du dir auch anschauen. Das Hilfe-Beispiel dazu zeigt auch gleich, wie die WM_PAINT Nachricht funktioniert.

  • Hallo chrisbyRRC,

    vor langer Zeit - beginnend 2010 - hatte ich mich mal ausgiebig mit "Grafik für AutoIt" beschäftigt: "Wir bauen uns ein CAD"

    Wir bauen uns ein CAD

    Es ist ein recht langer Thread, aber mangels allgemeinen Interesse habe ich das dann unterbrochen ... d.h. bis heute nicht weiter bearbeitet.

    Das Flacker-Problem und das mit dem Löschen einzelner Grafiken (Linie, Rechteck usw.) hatte ich auch.

    Schau Dir einfach mal an, wie ich das gelöst habe ...

    Grüsse aus Berlin

    PSblnkd

  • Klasse! Danke Leute für die wertvollen Skripte! ^^ :thumbup:

    EDIT:

    PSblnkd

    Ich hätte mir gerne dein Skript mal angesehen, habe aber nur compilierte exen in dem Thread gefunden. Hast du den Quellcode noch?

    Einmal editiert, zuletzt von chrisbyRRC (7. März 2021 um 15:24)

  • chrisbyRRC

    Natürlich habe ich den Quellcode noch - will schließlich irgendwann, wenn wieder Zeit dafür ist, weiterarbeiten.

    Die verbalen Beschreibungen waren wohl nicht ausreichend ...?

    Am besten ist, Du kontaktierst mich via eMail.

    Grüsse aus Berlin

    PSblnkd