1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. UEZ

Beiträge von UEZ

  • Das ende geht nicht

    • UEZ
    • 7. November 2009 um 01:07
    Zitat von tkausl
    [autoit]

    global $go
    HotKeySet ( "{s}", "START")
    HotKeySet ( "{e}", "END")

    [/autoit] [autoit][/autoit] [autoit]

    func START()
    $go = true
    while $go
    MouseClickDrag( "", 232, 141, 755, 158)
    sleep(15000)
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func END()
    $end = false
    EndFunc
    while 1
    sleep(1000)
    WEnd

    [/autoit]

    wie kann ich es schreiben dass es geht? wenn ich E drücke tut sich garnichts...

    Alles anzeigen


    Was soll denn passieren, wenn "e" gedrückt wird? Programm beenden?

    Wenn ja, dann einfach ein EXIT einfügen:

    [autoit]


    func END()
    $end = false
    Exit
    EndFunc

    [/autoit]

    Ansonsten solltest du beschreiben, was beim Drücken von "e" passieren soll!

    UEZ

  • GDI+ Zeichnen und als Bild speichern.

    • UEZ
    • 5. November 2009 um 15:19

    Hier mit Transparenz (Kopf1), ohne (Knopf2)

    Bitte mal testen:

    http://www.autoit.de/index.php?page=Attachment&attachmentID=6603&h=38502a9047cd3ea6aa895cb774f6334eb1530801

    Danke,
    UEZ

  • GDI+ Zeichnen und als Bild speichern.

    • UEZ
    • 5. November 2009 um 12:28

    Hier eine Möglichkeit:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #Include <GDIPlus.au3>
    #Include <Misc.au3>
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $aButton[6]
    Global $dll = DllOpen("user32.dll")
    Global $Color = "0x000000"
    Global $bcolor = "0xEEEEEE"
    Global $hGraphic
    Global $hPen, $MX, $MY, $MXOld, $MYOld, $WinPos

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup ()

    [/autoit] [autoit][/autoit] [autoit]

    $w = 150
    $h = 200

    [/autoit] [autoit][/autoit] [autoit]

    $gui = GUICreate("Test Windows regions", $w, $h, @DesktopWidth-170, 20, $WS_POPUP, $WS_EX_TOOLWINDOW)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND (WinGetHandle($gui))
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($w, $h, $hGraphic) ;create bitmap
    $Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap) ;create buffer
    $hPen = _GDIPlus_PenCreate ('0xFF' & StringRight($Color,6),6)
    _GDIPlus_GraphicsClear($Buffer, $bcolor)
    $WinPos=WinGetPos($gui)

    [/autoit] [autoit][/autoit] [autoit]

    ;Left - Top - Width - Height
    $aButton[0] = GUICtrlCreateButton("1", 0, 0, 24, 24, -1, $WS_EX_TOPMOST)
    $aButton[1] = GUICtrlCreateButton("2", 24, 0, 24, 24)
    $aButton[2] = GUICtrlCreateButton("", 48, 0, 24, 24)
    GUICtrlSetBkColor($aButton[2], $Color)
    $aButton[3] = GUICtrlCreateButton("4", 72, 0, 24, 24)
    $aButton[4] = GUICtrlCreateButton("Exit", 100, 0, 24, 24)
    $aButton[5] = GUICtrlCreatePic("", 0, 30, 150, 170, BitOR(-1, $WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $pos = WinGetPos($gui)
    _GuiHole($gui, 0, 0, 150, 150)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $aButton[4]
    ; Clean up resources
    _GDIPlus_PenDispose ($hPen)
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_Shutdown ()
    Exit
    Case $aButton[0]
    _GDIPlus_ImageSaveToFileEx($Bitmap, @ScriptDir & "\Test.PNG", _GDIPlus_EncodersGetCLSID("PNG"))
    If Not @error Then
    MsgBox(0, '', 'Bild gespeichert nach ' & @ScriptDir & "\Test.bmp!")
    Else
    MsgBox(0, '', 'Error!')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case $aButton[1]
    MsgBox(0, '', 'Button2 geklickt')
    Case $aButton[2]
    $Color = _ChooseColor(2)
    If $Color <> -1 Then
    GUICtrlSetBkColor($aButton[2], $Color)
    EndIf
    Case $aButton[3]
    MsgBox(0, '', 'Button4 geklickt')
    Case $aButton[5]
    Draw()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;Thx an Bugfix
    Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
    Local $outer_rgn, $inner_rgn, $combined_rgn
    $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
    _WinAPI_DeleteObject($outer_rgn)
    _WinAPI_DeleteObject($inner_rgn)
    _AddCtrlRegion($combined_rgn, $aButton)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    EndFunc ;==>_GuiHole

    [/autoit] [autoit][/autoit] [autoit]

    Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    If IsArray($ctrl_id) Then
    For $i = 0 To UBound($ctrl_id) -1
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    Next
    Else
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    EndIf
    EndFunc ;==>_AddCtrlRegion

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Draw()
    ;_GDIPlus_PenSetDashCap($hPen, $GDIP_DASHCAPROUND)
    ;_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASH)
    $MXOld=MouseGetPos(0) - $WinPos[0]
    $MYOld=MouseGetPos(1) - $WinPos[1] - 24 ;- Knopf Höhe
    ; Loop until user exits
    While _IsPressed("01", $dll)
    $MX=MouseGetPos(0) - $WinPos[0]
    $MY=MouseGetPos(1) - $WinPos[1] - 24
    _GDIPlus_GraphicsDrawLine ($Buffer, $MXOld, $MYOld, $MX, $MY, $hPen)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $Bitmap, 0, 24, $w, $h)
    ;_GDIPlus_GraphicsDrawEllipse($hGraphic, $MX, $MY, 6, 6, $hPen) -> Fehler: Bild wird nach einiger Zeit gelöscht
    $MXOld=$MX
    $MYOld=$MY
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    ;ImageTest
    ;$hBitmap = _GDIPlus_BitmapCreateFromGraphics(150, 170, $hGraphic)
    ;$hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
    ;$sEncoder = _GDIPlus_EncodersGetCLSID ("PNG")
    ;_GDIPlus_ImageSaveToFileEx($hBitmap, "C:\Test.png", $sEncoder)
    ;_GDIPlus_ImageSaveToFile($hBitmap, "C:\Test.bmp")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]

    Kopf 1 speichert das Bild.

    An der Transparentfunktion arbeite ich noch dran :P

    Gruß,
    UEZ

  • GDI+ Doppelbufferung

    • UEZ
    • 4. November 2009 um 21:37
    Zitat von Magnus

    In vielen Teard´s zu GDI+ wird eine Doppelbufferung verwendet. ?( Kann mir das bitte mal jemand erklären.


    Double buffering ist nicht anderes als das Bild vollständig im Buffer zu zeichnen und anschließend in den sichtbaren Bereich (GUI) zu kopieren. Dadurch wird vermieden, dass die Darstellung bei Bewegungen "ruckelt".

    Schaue dir doch mal die GDI+ Beispiele z.B. in Skripte an!

    Gruß,
    UEZ

  • GDI+ - ungewollter Farbverlauf beim Strecken von Bildern

    • UEZ
    • 4. November 2009 um 15:53

    Hier eine andere Methode, die ich im engl. Forum gefunden habe!

    Allerdings muss vorher dein PNG in BMP umgewandelt werden:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Const $Style_Stretch = 1, $Style_Tile = 2, $Style_Center = 3
    Global $hBitmap, $ImageHeight, $ImageWidth, $Image_Style, $width, $height
    $width = 150
    $height = 100
    $Form = GUICreate("Form", $width, $height)
    LoadBitmap_FromFile("FrameTop.bmp", $Style_Stretch)
    GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until Not Sleep(50) + GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func WM_ERASEBKGND($hWnd, $Msg, $wParam, $lParam)
    If $hBitmap Then
    $D_C = _WinAPI_CreateCompatibleDC($wParam)
    $Object = _WinAPI_SelectObject($D_C, $hBitmap)

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $Image_Style = 1
    StretchBlt($wParam, 0, 0, _WinAPI_GetClientWidth($hWnd), _WinAPI_GetClientHeight($hWnd), $D_C, 0, 0, _
    $ImageWidth, $ImageHeight, $SRCCOPY)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Case $Image_Style = 2
    For $i1 = 0 To (_WinAPI_GetClientHeight($hWnd) - 1) Step $ImageHeight
    For $i2 = 0 To (_WinAPI_GetClientWidth($hWnd) - 1) Step $ImageWidth
    _WinAPI_BitBlt($wParam, $i2, $i1, _WinAPI_GetClientWidth($hWnd), _WinAPI_GetClientHeight($hWnd), _
    $D_C, 0, 0, $SRCCOPY)
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Case $Image_Style = 3
    If ($ImageWidth < _WinAPI_GetClientWidth($hWnd)) Then
    $i2 = ((_WinAPI_GetClientWidth($hWnd) - $ImageWidth) / 2)
    Else
    $i2 = 0
    EndIf
    If ($ImageHeight < _WinAPI_GetClientHeight($hWnd)) Then
    $i1 = ((_WinAPI_GetClientHeight($hWnd) - $ImageHeight) / 2)
    Else
    $i1 = 0
    EndIf
    _WinAPI_BitBlt($wParam, $i2, $i1, _WinAPI_GetClientWidth($hWnd), _WinAPI_GetClientHeight($hWnd), _
    $D_C, 0, 0, $SRCCOPY)
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    $Object = _WinAPI_SelectObject($D_C, $Object)

    [/autoit] [autoit][/autoit] [autoit]

    Return True
    EndIf
    EndFunc ;==>WM_ERASEBKGND

    [/autoit] [autoit][/autoit] [autoit]

    Func StretchBlt($hdcDest, $nXOriginDest, $nYOriginDest, $nWidthDest, $nHeightDest, $hdcSrc, $nXOriginSrc, _
    $nYOriginSrc, $nWidthSrc, $nHeightSrc, $dwRop)
    $DllCall = DllCall("Gdi32.dll", "int", "StretchBlt", "hwnd", $hdcDest, "int", $nXOriginDest, "int", $nYOriginDest, "int", $nWidthDest, _
    "int", $nHeightDest, "hwnd", $hdcSrc, "int", $nXOriginSrc, "int", $nYOriginSrc, "int", $nWidthSrc, "int", $nHeightSrc, "long", $dwRop)
    Return $DllCall[0]
    EndFunc ;==>StretchBlt

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func LoadBitmap_FromFile($sFileName, $ImageStyle)
    $IMAGE_BITMAP = 0
    $LR_LOADFROMFILE = 0x0010
    $hBitmap = _WinAPI_LoadImage(_WinAPI_GetModuleHandle(0), $sFileName, $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE)
    _GDIPlus_Startup()
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $ImageWidth = _GDIPlus_ImageGetWidth($hImage)
    $ImageHeight = _GDIPlus_ImageGetHeight($hImage)
    $Image_Style = $ImageStyle
    _GDIPlus_Shutdown()
    EndFunc ;==>LoadBitmap_FromFile

    [/autoit]


    Vielleicht auch mal nützlich!

    Gruß,
    UEZ

  • GDI+ - ungewollter Farbverlauf beim Strecken von Bildern

    • UEZ
    • 4. November 2009 um 10:36

    Hier, was mir als 1. eingefallen ist (Bruteforce):

    [autoit]


    #include <GDIPlus.au3>
    _GDIPlus_Startup()
    $Pic = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\FrameTop.png")

    [/autoit][autoit][/autoit][autoit]

    $width = 150
    $height = 100
    $ix = _GDIPlus_ImageGetWidth($Pic)
    $iy = _GDIPlus_ImageGetHeight($Pic)
    $hGui = GUICreate("Test", $width, $height, -1, -1)

    [/autoit][autoit][/autoit][autoit]

    $hGDI = _GDIPlus_GraphicsCreateFromHWND($hGui)

    [/autoit][autoit][/autoit][autoit]

    $dx = Int($width / $ix) + 1
    $dy = Int($height / $iy) + 1

    [/autoit][autoit][/autoit][autoit]

    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    For $x = 0 To $dx Step $ix
    _GDIPlus_GraphicsDrawImageRect($hGDI, $Pic, $x, 0, $ix, $height) ;copy to bitmap
    Next

    [/autoit][autoit][/autoit][autoit]

    Do
    Until Not Sleep(50) + GUIGetMsg() = -3

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GraphicsDispose ($hGDI)
    _GDIPlus_ShutDown ()

    [/autoit]

    Gruß,
    UEZ

  • GDI+ - ungewollter Farbverlauf beim Strecken von Bildern

    • UEZ
    • 4. November 2009 um 10:00

    Kannst du das Bild mal hochladen? Dein Code wäre auch nützlich!

    UEZ

  • GDI+ - ungewollter Farbverlauf beim Strecken von Bildern

    • UEZ
    • 4. November 2009 um 09:19

    Und das hier:

    [autoit]


    #include <GDIPlus.au3>
    _GDIPlus_Startup()

    [/autoit][autoit][/autoit][autoit]

    $Pic = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\auge.jpg") ;entsprechend abändern!
    $width = _GDIPlus_ImageGetWidth($Pic) * 2
    $height = _GDIPlus_ImageGetHeight($Pic) * 2
    $hGui = GUICreate("Test", $width, $height, -1, -1)
    $hGDI = _GDIPlus_GraphicsCreateFromHWND($hGui)

    [/autoit][autoit][/autoit][autoit]

    GUISetState()
    _GDIPlus_GraphicsDrawImageRect($hGDI, $Pic, 0, 0, $width, $height)

    [/autoit][autoit][/autoit][autoit]

    Do
    Until Not Sleep(50) + GUIGetMsg() = -3

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GraphicsDispose ($hGDI)
    _GDIPlus_ShutDown ()

    [/autoit][autoit][/autoit][autoit][/autoit]

    Gruß,
    UEZ

  • GDI+ Beispiel: Drehende Dreiecke + Drehende Quadrate

    • UEZ
    • 1. November 2009 um 22:41
    Zitat von Greek

    Komisch, bei mir hängts das alles extrem stark, hat keiner das Problem??

    Glaub das liegt hier dran

    [autoit]

    $brush = _GDIPlus_BrushCreateSolid(0x10000000); Erstellt ein vollfarbiges Pinselobjekt

    [/autoit]

    Wenn ich das 10 auf FF stelle läuts wieder flüssig...


    Schaue mal hier: [ gelöst ] Schlechte GDI+ Performance auf WinXP

    Liegt an der Kombination WinXP, Grafiktreiber und Alpha channel!

    Gruß,
    UEZ

  • GDI+ Beispiel: Drehende Dreiecke + Drehende Quadrate

    • UEZ
    • 1. November 2009 um 16:40

    Ein Tipp noch: ein Sleep() in der While ...WEnd Schleife verhindert die 100% CPU Auslastung!

    Gruß,
    UEZ

  • GDI+ Beispiel: Drehende Dreiecke + Drehende Quadrate

    • UEZ
    • 31. Oktober 2009 um 15:28

    Coole Idee mit den Dreiecken :thumbup:

    Du könntest ein paar Konstanten definieren, damit du nicht immer das gleiche berechnest:
    z.B. 2*$pi oder $p/2, etc.

    Ich glaube, der GDI+ Hype ist ausgebrochen! 8o :rock:

    Gruß,
    UEZ ;)

    Hier was für rotierende Quadrate! Musst es sehr wahrscheinlich für deine Bedürfnisse noch anpassen!

    [autoit]


    Func Square($xx1, $yy1, $i) ;coded by UEZ
    Local $degree = 45
    Local Const $pi_Div_180 = 4 * ATan(1) / 180
    $x1 = $xx1 * Cos(($i + $degree + 0) * $pi_Div_180) + $width / 2
    $y1 = $yy1 * Sin(($i + $degree + 0) * $pi_Div_180) + $height / 2
    $x2 = $xx1 * Cos(($i + $degree + 90) * $pi_Div_180) + $width / 2
    $y2 = $yy1 * Sin(($i + $degree + 90) * $pi_Div_180) + $height / 2
    $x3 = $xx1 * Cos(($i + $degree + 180) * $pi_Div_180) + $width / 2
    $y3 = $yy1 * Sin(($i + $degree + 180) * $pi_Div_180) + $height / 2
    $x4 = $xx1 * Cos(($i + $degree + 270) * $pi_Div_180) + $width / 2
    $y4 = $yy1 * Sin(($i + $degree + 270) * $pi_Div_180) + $height / 2
    _GDIPlus_GraphicsDrawLine($GDI_Buffer, $x1, $y1, $x2, $y2, $Pen)
    _GDIPlus_GraphicsDrawLine($GDI_Buffer, $x2, $y2, $x3, $y3, $Pen)
    _GDIPlus_GraphicsDrawLine($GDI_Buffer, $x3, $y3, $x4, $y4, $Pen)
    _GDIPlus_GraphicsDrawLine($GDI_Buffer, $x4, $y4, $x1, $y1, $Pen)
    EndFunc

    [/autoit]
  • GDI Plus Script Sammlung von Simon

    • UEZ
    • 31. Oktober 2009 um 12:46
    Zitat von simon

    Hi @all!

    Ich habe mal noch ein anderes mit Quadraten gemacht
    mit einer funktion von mir , die ich vor ein paar wochen gemacht habe

    ich hoffe es gefällt euch auch dieses

    gruss Simon

    Ich hatte auch was mal mit Quadraten gemacht, die sich drehen. ;)

    #03 Rotating Squares

    Gruß,
    UEZ

  • GDI Plus Script Sammlung von Simon

    • UEZ
    • 30. Oktober 2009 um 18:17

    Habe doch so was ähnliches gepostet => [ offen ] GDI Plus Problem!


    An den Farbverläufen kann man noch arbeiten!


    Gruß,

    UEZ

  • GDI Plus Script Sammlung von Simon

    • UEZ
    • 30. Oktober 2009 um 16:19

    Weiter so :thumbup:

    Gruß,
    UEZ

  • GDI Plus Problem

    • UEZ
    • 30. Oktober 2009 um 16:07
    Zitat von simon

    Ok danke

    Habs jetzt mal erweitert

    Spoiler anzeigen
    [autoit]


    ;coded by Simon
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global Const $width = 400
    Global Const $height = 400
    Global $graphics, $backbuffer, $bitmap, $Pen, $i = 10, $bool = 0
    Global $title = "GDI+ Beispiel"

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1, $WS_POPUP)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) ;erstelle GDI+ Objekt von der GUI (Grafik)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics) ;erstelle Bitmap von der Grafik
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap) ;erstelle Grafik Kontext von der Bitmap (dient für die Doppeltbufferung der Grafik, damit die Bewegungen flüssiger aussehen
    $pen = _GDIPlus_PenCreate(0, 3) ;erstelle Stift mit der Stärke 4 Pixels

    [/autoit] [autoit][/autoit] [autoit]

    Do
    _GDIPlus_GraphicsClear($backbuffer) ;lösche Buffer
    _GDIPlus_PenSetColor($Pen, 0xFFFFFFFF) ;setze Stiftfarbe ;# weis +++++++++++++++++++++++++
    _GDIPlus_GraphicsDrawLine($backbuffer, 10, 10, $i, 10, $Pen) ;ziehe 1. Linie
    _GDIPlus_GraphicsDrawLine($backbuffer, 10, 390, 10, 400 - $i, $Pen) ;ziehe 2. Linie
    _GDIPlus_GraphicsDrawLine($backbuffer,390,10,390,$i,$Pen);Ziehe 3. Linie
    _GDIPlus_PenSetColor($Pen, 0xFFF00000) ;setze Stiftfarbe für den 2. Strich ;# rot +++++++++++++++++++
    _GDIPlus_GraphicsDrawLine($backbuffer,$i,10,10,400-$i,$Pen)
    _GDIPlus_GraphicsDrawLine($backbuffer,10,400-$i,400-$i,390,$Pen)
    _GDIPlus_GraphicsDrawLine($backbuffer,390,$i,400 - $i,390,$Pen)
    _GDIPlus_GraphicsDrawLine($backbuffer,$i,10,390,$i,$Pen)
    _GDIPlus_PenSetColor($Pen,0xFFFFFFFF)
    ;_GDIPlus_GraphicsDrawLine($backbuffer,10,,$Pen)
    _GDIPlus_GraphicsDrawLine($backbuffer,400 - $i,390,390,390 ,$Pen) ;Ziehe Dritte Linie
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height) ;das Zeichnen hat im Buffer stattgefunden. Damit das Ganze sichtbar wird, kopiere den Buffer (Bitmap) in den sichtbaren Bereich
    If Not $bool And $i < 390 Then
    $i += 5
    Else
    $bool = 1
    EndIf
    If $bool And $i > 10 Then
    $i -= 5
    Else
    $bool = 0
    EndIf
    Sleep(30)
    Until False

    [/autoit] [autoit][/autoit] [autoit]

    Func close()
    _GDIPlus_PenDispose($pen)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc

    [/autoit]

    Wie kann man das jetz machen dass die linien des vierecks immer wieder die farbe wächseln???

    Alles anzeigen

    Zum Beispiel so:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global Const $width = 400
    Global Const $height = 400
    Global Const $pi_div_180 = 4 * ATan(1) / 180
    Global $graphics, $backbuffer, $bitmap, $Pen, $i = 10, $bool = 0
    Global $r, $g, $b
    Global $title = "GDI+ Beispiel"

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1, $WS_POPUP)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) ;erstelle GDI+ Objekt von der GUI (Grafik)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics) ;erstelle Bitmap von der Grafik
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap) ;erstelle Grafik Kontext von der Bitmap (dient für die Doppeltbufferung der Grafik, damit die Bewegungen flüssiger aussehen
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 2) ;Antialiasing
    $pen1 = _GDIPlus_PenCreate(0xFFFFFFFF, 3) ;erstelle Stift mit der Stärke 4 Pixels
    $pen2 = _GDIPlus_PenCreate(0, 3)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    _GDIPlus_GraphicsClear($backbuffer) ;lösche Buffer

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawLine($backbuffer, 10, 10, $i, 10, $Pen1) ;ziehe 1. Linie
    _GDIPlus_GraphicsDrawLine($backbuffer, 10, 390, 10, 400 - $i, $Pen1) ;ziehe 2. Linie
    _GDIPlus_GraphicsDrawLine($backbuffer,390,10,390,$i,$Pen1);Ziehe 3. Linie
    _GDIPlus_GraphicsDrawLine($backbuffer,400 - $i,390,390,390 ,$Pen1) ;Ziehe Dritte Linie

    [/autoit] [autoit][/autoit] [autoit]

    $r = (Sin($i / 96) + 1) * 256
    $g = (Sin($i / 64) + 1) * 256
    $b = (Sin($i / 32) + 1) * 256

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_PenSetColor($Pen2, "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2)) ;setze Stiftfarbe für den 2. Strich ;# rot +++++++++++++++++++

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawLine($backbuffer,$i,10,10,400-$i,$Pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer,10,400-$i,400-$i,390,$Pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer,390,$i,400 - $i,390,$Pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer,$i,10,390,$i,$Pen2)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height) ;das Zeichnen hat im Buffer stattgefunden. Damit das Ganze sichtbar wird, kopiere den Buffer (Bitmap) in den sichtbaren Bereich
    If Not $bool And $i < 390 Then
    $i += 5
    Else
    $bool = 1
    EndIf
    If $bool And $i > 10 Then
    $i -= 5
    Else
    $bool = 0
    EndIf
    Sleep(30)
    Until False

    [/autoit] [autoit][/autoit] [autoit]

    Func close()
    _GDIPlus_PenDispose($pen1)
    _GDIPlus_PenDispose($pen2)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc

    [/autoit]

    Gruß,
    UEZ

  • GDI Plus Problem

    • UEZ
    • 29. Oktober 2009 um 22:56

    Hier das ganze mit der doppelten Bufferung:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global Const $width = 400
    Global Const $height = 400
    Global $graphics, $backbuffer, $bitmap, $Pen, $i = 10, $bool = 0
    Global $title = "GDI+ Beispiel"

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1, $WS_POPUP)
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) ;erstelle GDI+ Objekt von der GUI (Grafik)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics) ;erstelle Bitmap von der Grafik
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap) ;erstelle Grafik Kontext von der Bitmap (dient für die Doppeltbufferung der Grafik, damit die Bewegungen flüssiger aussehen
    $pen = _GDIPlus_PenCreate(0, 4) ;erstelle Stift mit der Stärke 4 Pixels

    [/autoit] [autoit][/autoit] [autoit]

    Do
    _GDIPlus_GraphicsClear($backbuffer) ;lösche Buffer
    _GDIPlus_PenSetColor($Pen, 0xFFFFFFFF) ;setze Stiftfarbe
    _GDIPlus_GraphicsDrawLine($backbuffer, 10, 10, $i, 10, $Pen) ;ziehe 1. Linie
    _GDIPlus_PenSetColor($Pen, 0xFFF00000) ;setze Stiftfarbe für den 2. Strich
    _GDIPlus_GraphicsDrawLine($backbuffer, 10, 390, 10, 400 - $i, $Pen) ;ziehe 2. Linie
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height) ;das Zeichnen hat im Buffer stattgefunden. Damit das Ganze sichtbar wird, kopiere den Buffer (Bitmap) in den sichtbaren Bereich
    If Not $bool And $i < 390 Then
    $i += 5
    Else
    $bool = 1
    EndIf
    If $bool And $i > 10 Then
    $i -= 5
    Else
    $bool = 0
    EndIf
    Sleep(30)
    Until False

    [/autoit] [autoit][/autoit] [autoit]

    Func close()
    _GDIPlus_PenDispose($pen)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc

    [/autoit]

    Ich hoffe, dass du damit zurecht kommst! Ansonsten einfach fragen!

    Gruß,
    UEZ

  • Multiplayer-Game 'Kurven-Spiel'

    • UEZ
    • 29. Oktober 2009 um 09:29
    Zitat von funkey

    Hat jemand mein Kurven-Spiel bereits auf Windows7 getestet? Wenn ja mit welchem Ergebnis? Möchte jemand die neue Version testen, bevor sie veröffentlicht wird? Hier bitte melden.

    Habe es unter Win7 x64 (*)laufen lassen und es läuft sauber. Was mir nur aufgefallen ist, dass die Schriftgröße nicht immer zur Fenstergröße passt (Zeilenumbruch: Wählen Sie einen Player aus... und Runde x/10 y%)!

    (*) Win7 x64 ohne Aero und sonstige Effekte, da Win7 in einer VM läuft!

    Erinnert mich ein wenig an Tron ;)

    Nettes Spiel :thumbup:

    Gruß,
    UEZ

  • 3D Würfel mit Farbänderung hat Fehler

    • UEZ
    • 28. Oktober 2009 um 00:33
    Zitat von Raupi

    Die Version von UEZ ist besser als meine. ;)


    Nicht besser, übersichtlicher ;)

    UEZ

  • Drop in ein Image

    • UEZ
    • 28. Oktober 2009 um 00:31

    So was?

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $msg, $w, $h, $Input, $Radio1, $Radio2, $Radio3, $Button, $file
    $w = 640
    $h = 480
    GUICreate("Test", $w, $h, -1, -1, $WS_SIZEBOX + $WS_SYSMENU, $WS_EX_ACCEPTFILES)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreatePic(@SystemDir & "\oobe\msoobe.jpg", 0,0, $w, $h - 80)

    [/autoit] [autoit][/autoit] [autoit]

    $Input = GUICtrlCreateInput("", 8, 430, 517, 21, $ES_READONLY)
    $Radio1 = GUICtrlCreateRadio("C:\", 8, 408, 57, 17)
    $Radio2 = GUICtrlCreateRadio("D:\", 304, 408, 57, 17)
    $Radio3 = GUICtrlCreateRadio("E:\", 568, 408, 57, 17)
    $Button = GUICtrlCreateButton("OK", 560, 430, 57, 21)

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg(0x0233, "WM_DROPFILES") ;0x0233 = $WM_DROPFILES

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_DROPFILES($hwnd, $msg, $wParam, $lParam)
    Local $tBuffer = DllStructCreate("char[256]")
    Local $iString

    [/autoit] [autoit][/autoit] [autoit]

    ;Get dropped items count
    Local $aRet = DllCall("shell32.dll", "int", "DragQueryFile", "int", $wParam, "int", -1, "ptr", 0, "int", 0)

    [/autoit] [autoit][/autoit] [autoit]

    ;Getting name only from 1st dropped item
    DllCall("shell32.dll", "int", "DragQueryFile", "int", $wParam, "int", 0, "ptr", DllStructGetPtr($tBuffer), "int", DllStructGetSize($tBuffer))
    $iString = DllStructGetData($tBuffer, 1)
    DllCall("shell32.dll", "none", "DragFinish", "int", $wParam)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Input, $iString)
    If StringLeft($iString, 1) = "c" Then GUICtrlSetState($Radio1, $GUI_CHECKED)
    If StringLeft($iString, 1) = "d" Then GUICtrlSetState($Radio2, $GUI_CHECKED)
    If StringLeft($iString, 1) = "e" Then GUICtrlSetState($Radio3, $GUI_CHECKED)

    [/autoit] [autoit][/autoit] [autoit]

    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_DROPFILES

    [/autoit]

    Eventuell musst du noch den Pfad des Bildes anpassen!

    Gruß,
    UEZ

    Dateien

    Test.au3 1,74 kB – 235 Downloads
  • 3D Würfel mit Farbänderung hat Fehler

    • UEZ
    • 27. Oktober 2009 um 19:43
    Zitat von Kamui

    Hallo,
    Ich habe gerade mit 3D Programmirung in Autoit angefangen und wollte zu Anfang einen sich Rotirenden Würfel der seine Farben wechselt schreiben.
    Ich lasse die farben durch eine Schleiffe immer erhöhen,erst Rot ($R),dann Grün ($G) und dann Blau ($B). Wenn eine Farbe den Wert "1" angenommen hatt, soll sie stehn bleiben und die nächste Farbe weiter bis "1" laufen, nur genau hier ist mein Problem sobald Grün "1" ereicht hat bleibt es nicht stehn sonder läuft als weiter.
    Wäre schön wenn ihr auch das ganze mal anschaut.
    Ihr müsst auch das Rar archiv laden da ein paar dlls benötigt werden.

    Mfg Kamui
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Hier meine Version:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseAnsi=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstants.au3>
    #include "GlPluginUtils.au3"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    HotKeySet( "{ESC}", "End" )
    Opt( "GUIOnEventMode", 1 )

    [/autoit] [autoit][/autoit] [autoit]

    Func End( )
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $desktw = @DesktopWidth
    $deskth = @DesktopHeight

    [/autoit] [autoit][/autoit] [autoit]

    If MsgBox( 36, "Screen", "Run this demo in fullscreen mode?" ) = 6 Then
    DefineGlWindow( "würfel!!!" )
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $R = 0
    $G = 0
    $B = 0
    $hGUI = GUICreate( "Au3GlPlugin in a AutoIt GUI", 520, 400 )
    $Label = GUICtrlCreateLabel ( "Rotation: ", 20, 20, 80 )
    GUISetState( @SW_SHOW, $hGUI )
    $Label2 = GUICtrlCreateLabel ( "Rotation: ", 20, 40, 80 )
    GUISetState( @SW_SHOW, $hGUI )
    $Label3 = GUICtrlCreateLabel ( "Color: ", 20, 60, 80 )
    GUISetState( @SW_SHOW, $hGUI )
    $Label4 = GUICtrlCreateLabel ( "R: ", 20, 80, 80 )
    GUISetState( @SW_SHOW, $hGUI )
    $Label5 = GUICtrlCreateLabel ( "G: ", 20, 100, 80 )
    GUISetState( @SW_SHOW, $hGUI )
    $Label6 = GUICtrlCreateLabel ( "B ", 20, 120, 80 )
    GUISetState( @SW_SHOW, $hGUI )

    [/autoit] [autoit][/autoit] [autoit]

    EmbedGlWindow( $hGUI, 400, 300, 100, 20 )

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState( @SW_SHOW, $hGUI )

    [/autoit] [autoit][/autoit] [autoit]

    SetClearColor( 0.2, 0.2, 0.2 )
    CreateLight( 0, 40, 300, 300 )
    SetLightAmbient( 0, 0.2, 0, 0.2 )
    SetLightDiffuse( 0, 0.7, 0.7, 0.7 )
    SetLightSpecular( 0, 1.0, 1.0, 1.0 )

    [/autoit] [autoit][/autoit] [autoit]

    $CubeObj = ObjectCreate( )
    $Box = AddCube( $CubeObj, 70, 70, 70, $R, $G, $B, 1.0 )
    SetPrint( $CubeObj )

    [/autoit] [autoit][/autoit] [autoit]

    SetCamera( 0, 50, 250, 0, 0, 0 )
    GUISetOnEvent( $GUI_EVENT_CLOSE, "End" )

    [/autoit] [autoit][/autoit] [autoit]

    $R = 0
    $G = 0
    $B = 0 ;Zum blocken der Farben
    $block = 1
    $Y_Achse = 0
    $X_Achse = 0
    While 1
    SceneDraw( )
    sleep( 10 )

    [/autoit] [autoit][/autoit] [autoit]

    ;Farbe wechselen

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData( $Label4, "R: " & Round($R, 3))
    GUICtrlSetData( $Label5, "G: " & Round($G, 3))
    GUICtrlSetData( $Label6, "B: " & Round($B, 3))
    Select
    Case $block = 1
    $R += 0.001
    If $R >= 1 Then $block += 1
    Case $block = 2
    $G += 0.001
    If $G >= 1 Then $block += 1
    Case $block = 3
    $B += 0.001
    If $B >= 1 Then $block += 1
    EndSelect
    If $block = 4 Then
    $r = 0
    $g = 0
    $b = 0
    $block = 1
    EndIf
    ObjectHide( $CubeObj )
    $CubeObj = ObjectCreate( )
    $Box = AddCube( $CubeObj, 70, 70, 70, $R, $G, $B, 1)
    SetPrint( $CubeObj )

    [/autoit] [autoit][/autoit] [autoit]

    ;Rotation
    ObjectRotate( $CubeObj, $Y_Achse, $X_Achse, 0 )
    GUICtrlSetData( $Label, "Rotation: " & $Y_Achse )
    GUICtrlSetData( $Label2, "Rotation: " & $X_Achse )
    $X_Achse += 1
    $Y_Achse += 1
    If $Y_Achse < 0 Then $Y_Achse += 360
    If $Y_Achse > 360 Then $Y_Achse -= 360
    If $X_Achse < 0 Then $X_Achse += 360
    If $X_Achse > 360 Then $X_Achse -= 360
    WEnd

    [/autoit]

    Gruß,
    UEZ

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™