• Ich suche schon länger die Möglichkeit eine Linie,ein Rechteck mit der
    Maus flimmerfrei auf den Bildschirm zu zeichnen.


    Ich habe eine Lösung gefunden, deren Umsetzung in Profan mir nicht gelingt.(Text zwischen den beiden Smilies)


    Zitat:
    " ( wg. Guttenberg )


    Echtzeit-Ausgabe beim Erstellen und Editieren von Zeichenobjekten


    Wenn man zum Beispiel mit der Maus in einem Zeichenprogramm ein geometrisches Objekt (z.B. ein Polygon) auf der Zeichenfläche in Echtzeit von Position A nach Position B verschieben möchte, dann wäre es sinnlos, für jede der Zwischenpositionen, an denen sich die Maus gerade befindet, alles neu zu zeichnen, den Puffer zu füllen und anschließend auszugeben. Hier bedient man sich eines Kniffes. Mit Hilfe des ROP (Raster Operator) kann man mit XOR (exklusives OR) folgendermaßen vorgehen.
    :-)Man zeichnet das zu verschiebende Objekt zunächst mit XOR an der alten Stelle noch einmal direkt auf dem Ausgabegerät. Dadurch „verschwindet“ dieses Objekt auf der Ausgabefläche wie von Geisterhand. Nun zeichnet man das Objekt direkt und ohne XOR an die neue Position, so dass es dort wieder sichtbar wird. Das wiederholt man bei jeder einzelnen Mausbewegung erneut, so dass innerhalb einer Sekunde durchaus 10-50 Positionsveränderungen dargestellt werden können. Das träge Auge nimmt dies als ruckelfreien und fließenden Vorgang ohne Flimmern wahr.:-) Erst am Schluss wird der Puffer komplett neu gefüllt und ausgegeben. Diese Methode des nicht beständigen, direkten Zeichnens auf ein Device nennt man auch „floating drawing“.
    "
    Bei Microsoft findet man folgendes:


    For a color device, GDI uses RGB values to represent the colors of the pen and the destination. An RGB color value is a long integer that contains a red, a green, and a blue color field, each specifying the intensity of the specified color. Intensities range from 0 through 255. The values are packed in the three low-order bytes of the long integer. The color of a pen is always a solid color, but the color of the destination may be a mixture of any two or three colors. If an application attempts to draw with a white pen on a blue destination by using the available binary raster operations, the following results occur.
    Raster operation Result
    R2_BLACK Visible black line
    R2_COPYPEN Visible white line
    R2_MASKNOTPEN Visible black line
    R2_MASKPEN Invisible blue line
    R2_MASKPENNOT Visible red/green line
    R2_MERGENOTPEN Invisible blue line
    R2_MERGEPEN Visible white line
    R2_MERGEPENNOT Visible white line
    R2_NOP Invisible blue line
    R2_NOT Visible red/green line
    R2_NOTCOPYPEN Visible black line
    R2_NOTMASKPEN Visible red/green line
    R2_NOTMERGEPEN Visible black line
    R2_NOTXORPEN Invisible blue line
    R2_WHITE Visible white line
    R2_XORPEN Visible red/green line



    Kann mir jemand ein Beispiel machen, indem diese GDI32 Funktionen
    (Rasteroperationen XOR) benutzt werden.:?::)

  • Hallo Ralph,


    hier ein kleines Beispiel, das funktioniert nur wenn Du von links/oben nach recht/unten das Rechteck mit der Maus aufziehst. Du musst Dir also die Koordinaten für andere Bewegungen anpassen.


    Gruss
    Andreas


    ______________________
    http://www.ampsoft.eu


    Profan 3.3 - XProfanX2
    Windows 95,98,ME,2000,XP
    Vista - Windows 7 32 / 64 Bit


    ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher

  • Hab da auch noch was rumliegen:


    Funktioniert in alle Richtungen und flimmerfrei. Bildname mal anpassen.

    Gruß, Frank

  • Zitat von Ralph Theobald;852802

    Das zweite Beispiel ist spitze.:-)


    Stimmt, nicht schlecht mit FocusRect().


    Mit SetROP2() ist allerdings flexibler(Rechtecke, Kreise, Linien usw.), auch wenn es ein Relikt aus Zeiten von Win3.1 ist, funktioniert das doppelte Invertieren sehr gut.


    Gruss
    Andreas


    ______________________
    http://www.ampsoft.eu


    Profan 3.3 - XProfanX2
    Windows 95,98,ME,2000,XP
    Vista - Windows 7 32 / 64 Bit


    ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher

  • Hallo Andreas,





    So funktioniert dein Beispiel in alle Richtungen.

  • Zitat

    Stimmt, nicht schlecht mit FocusRect().


    Mit SetROP2() ist allerdings flexibler(Rechtecke, Kreise, Linien usw.), auch wenn es ein Relikt aus Zeiten von Win3.1 ist, funktioniert das doppelte Invertieren sehr gut.


    SetROP2 nutze ich selber auch gerne. Jetzt war aber nach Rechteck gefragt, da bieten sich die Focuslinien an. Vor allem, weil die Dicke auch frei wählbar ist. :)

    Gruß, Frank

  • Zitat von Ralph Theobald;852821

    Hallo Andreas,



    So funktioniert dein Beispiel in alle Richtungen.


    Das flackert bei mir leider sehr extrem. Ist auch ungünstig, das Zeichnen in einer Schleife laufen zu lassen, die ständig aktualisiert. In der Zeit wird auch keine Message mehr verarbeitet.

    Gruß, Frank

  • Noch ein Gummiband, gefällt mir fast am besten, da sichtbarer.


    Gruss
    Andreas


    ______________________
    http://www.ampsoft.eu


    Profan 3.3 - XProfanX2
    Windows 95,98,ME,2000,XP
    Vista - Windows 7 32 / 64 Bit


    ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher

  • Hallo Andreas,
    sieht gut aus .
    Setrop2 ist aber flexibler. Durch die verschiedenen Modi kann man
    mehr Effekte erzielen.
    Beispielsweise müßte das Verschieben eines gerade gezeichneten Bereichs
    auch machbar sein.

  • Zitat von Ralph Theobald;852895

    Hallo Andreas,
    sieht gut aus .
    Setrop2 ist aber flexibler. Durch die verschiedenen Modi kann man
    mehr Effekte erzielen.
    Beispielsweise müßte das Verschieben eines gerade gezeichneten Bereichs
    auch machbar sein.


    Hallo Ralph,


    dann musst Du mit Regionen arbeiten.

    Gruss
    Andreas


    ______________________
    http://www.ampsoft.eu


    Profan 3.3 - XProfanX2
    Windows 95,98,ME,2000,XP
    Vista - Windows 7 32 / 64 Bit


    ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher

  • Zitat von Ralph Theobald;852822

    Wie kann man im letzten Beispiel von Andreas die Füllung
    halbtransparent machen :):?:


    Man kann :)


    Gruss
    Andreas


    ______________________
    http://www.ampsoft.eu


    Profan 3.3 - XProfanX2
    Windows 95,98,ME,2000,XP
    Vista - Windows 7 32 / 64 Bit


    ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!