Hallo,
wie kann ich außerhalb meiner GUI etwas zeichnen. Die meisten Anleitungen hier beziehen sich auf das Zeichnen in der GUI von Autoit. Ich möchte aber ein paar Quadrate außerhalb der GUI zeichen.
Hat jemand eine Idee wie das geht ?
Mfg
Hallo,
wie kann ich außerhalb meiner GUI etwas zeichnen. Die meisten Anleitungen hier beziehen sich auf das Zeichnen in der GUI von Autoit. Ich möchte aber ein paar Quadrate außerhalb der GUI zeichen.
Hat jemand eine Idee wie das geht ?
Mfg
Da gibt es mehrere Möglichkeiten, die aber nicht ganz einfach zu verstehen sind. Hier mal ein Beispiel.
Ich hab mir dafür mal eine Funktion gebastelt.
Func Zeichne_Viereck($links, $oben, $rechts, $unten)
Local $hDC, $hPen, $obj_orig
$hDC = _WinAPI_GetWindowDC(0)
$hPen = _WinAPI_CreatePen($PS_SOLID, 2, 0xFF)
$obj_orig = _WinAPI_SelectObject($hDC, $hPen)
_WinAPI_DrawLine($hDC, $links, $oben, $rechts, $oben) ;Oben
_WinAPI_DrawLine($hDC, $rechts, $oben, $rechts, $unten) ;Rechts
_WinAPI_DrawLine($hDC, $links, $unten, $rechts, $unten) ;Unten
_WinAPI_DrawLine($hDC, $links, $oben - 1, $links, $unten) ;Links
_WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
_WinAPI_SelectObject($hDC, $obj_orig)
_WinAPI_DeleteObject($hPen)
_WinAPI_ReleaseDC(0, $hDC)
EndFunc ;==>Zeichne_Rechteck
lg
Hallo,
mit folgenden Code zeichne ich was auf den Bildschirm:
[autoit]$handlee=ControlGetHandle ( "test", "", "" )
[/autoit][autoit][/autoit][autoit]For $i=1 To 50 Step +1
[/autoit][autoit][/autoit][autoit]SetPixel ( $handlee, 500-$i, 500-$i, 0xFF0000 ) ; schräg
SetPixel ( $handlee, @DesktopWidth/2-$i, @DesktopHeight/2, 0xFF00BB ) ; waagrecht
SetPixel ( $handlee, @DesktopWidth/2, @DesktopHeight/2-$i, 0xFF0000 ) ; senkrecht
Next
Func SetPixel ($handle, $x, $y, $color)
$dc= DllCall ("user32.dll", "int", "GetDC", "hwnd", $handle)
$setpixel= DllCall ("gdi32.dll", "long", "SetPixel", "long", $dc[0], "long", $x, "long", $y, "long", $color)
$realesedc= DllCall ("user32.dll", "int", "ReleaseDC", "hwnd", 0, "int", $dc[0])
EndFunc
Leider habe ich das Problem das es wenn ich mit der Maus darüberfahre weggeht.
Was muss ich machen, damit es dauerhaft eingeblendet wird ?
Mfg
ZitatWas muss ich machen, damit es dauerhaft eingeblendet wird ?
Entweder die Methode aus meinem Beispiel verwenden, oder das Quadrat kontinuierlich neu zeichnen ;).
@ name22 wie meinst du das mit den kontinuierlich neu zeichnen ?
Gruß
Jedesmal wenn du ein Objekt (Maus, Fenster) über einen bestimmten Bereich auf dem Bildschirm bewegst, sagt Windows allen Fenstern etc. die davon betroffen sind, dass sie sich neuzeichnen sollen um Darstellungsfehler zu verhindern. Dein Programm macht das aber nicht von selbst, und somit wird der Punkt einfach übermalt wenn etwas darüber bewegt wird. Normalerweise kann man die $WM_PAINT Nachricht per GUIRegisterMsg abfangen um z.B. GDI+ Elemente in einer GUI neu zu zeichnen, aber ich weiß nicht wie das bei deinem Script gehen könnte. Daher kannst du meins ein wenig umbauen oder warten bis jemand eine Lösung für dein Script findet. ![]()