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. Darter

Beiträge von Darter

  • GDI+ Zeichen + Scrollen

    • Darter
    • 8. Juni 2010 um 22:06

    Ok da ich immer noch keine Antwort erhalten habe, hab ich mich drangesetzt und versucht ne Funktion/Funktionen zu schreiben, welche man nur einmal Registriert und es dann immer Prüft ob die Maus drüber ist. Außerdem sollte man die Position neu setzten können(wir beim scollen benötigt).
    EDIT: Vorschläge zur Verbesserung oder auch ganz anderee Ansätze sind natürlich erwünscht


    Die Funktion
    [autoit]

    Func GUI_Register_Set_Pos($index, $iX, $iY, $Widh = -1, $Height = -1)
    Local $aold_Hover_pos_Infos = StringSplit($aGUI_Register_Hover_Info[$index], "|")
    If $Widh = -1 and $Height <> -1 Then $aGUI_Register_Hover_Info[$index] = $aold_Hover_pos_Infos[1] & "|" & $aold_Hover_pos_Infos[2] & "|" & $iX & "|" & $iY & "|" & $aold_Hover_pos_Infos[5] & "|" & $Height & "|" & $aold_Hover_pos_Infos[7] & "|" & $aold_Hover_pos_Infos[8]
    If $Widh <> -1 and $Height = -1 Then $aGUI_Register_Hover_Info[$index] = $aold_Hover_pos_Infos[1] & "|" & $aold_Hover_pos_Infos[2] & "|" & $iX & "|" & $iY & "|" & $Widh & "|" & $aold_Hover_pos_Infos[6] & "|" & $aold_Hover_pos_Infos[7] & "|" & $aold_Hover_pos_Infos[8]
    If $Widh = -1 and $Height = -1 Then $aGUI_Register_Hover_Info[$index] = $aold_Hover_pos_Infos[1] & "|" & $aold_Hover_pos_Infos[2] & "|" & $iX & "|" & $iY & "|" & $aold_Hover_pos_Infos[5] & "|" & $aold_Hover_pos_Infos[6] & "|" & $aold_Hover_pos_Infos[7] & "|" & $aold_Hover_pos_Infos[8]
    EndFunc

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

    Func GUI_Register_Hover($hWin,$iX,$iY,$Widh,$Height,$HoverFunc, $LeaveFunc = -1)
    If Not IsDeclared("anz") Then
    Global $aGUI_Register_Hover_Info[1]
    Global $anz = 1
    Global $Hover_one = 0
    $aGUI_Register_Hover_Info[0] = 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0
    EndIf
    If $anz <> 1 Then $anz += 1
    ;$aGUI_Register_Hover_Info[0] = UBound($aGUI_Register_Hover_Info)
    _ArrayAdd($aGUI_Register_Hover_Info,$hWin & "|" & $anz & "|" & $iX & "|" & $iY & "|" & $Widh & "|" & $Height & "|" & $HoverFunc & "|" & $LeaveFunc)
    ;_ArrayDisplay($aGUI_Register_Hover_Info)
    If $anz = 1 Then
    AdlibRegister("GUI_Register_Hover_check",10)
    EndIf
    Return $anz
    EndFunc

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

    Func GUI_Register_Hover_check()
    Local $aGUI_Register_Hover_Infos = StringSplit($aGUI_Register_Hover_Info[1],"|")
    ;_ArrayDisplay($aGUI_Register_Hover_Infos)
    Local $aWinInfo = WinGetPos(HWnd($aGUI_Register_Hover_Infos[1]))
    Local $aMouseinfo = MouseGetPos()
    If $aMouseinfo[0] > $aWinInfo[0] And $aMouseinfo[0] < $aWinInfo[0]+$aWinInfo[2] And $aMouseinfo[1] > $aWinInfo[1] And $aMouseinfo[1] < $aWinInfo[1]+$aWinInfo[3] Then
    For $i = 1 To UBound($aGUI_Register_Hover_Info)-1
    $aGUI_Register_Hover_Infos = StringSplit($aGUI_Register_Hover_Info[$i],"|")
    ;_ArrayDisplay($aGUI_Register_Hover_Infos)
    $aMouseinfo2 = GUIGetCursorInfo (HWnd($aGUI_Register_Hover_Infos[1]))
    ;ConsoleWrite($aMouseinfo2[0] & "x" & $aMouseinfo2[1] & "|" & $aGUI_Register_Hover_Infos[3] & "x" & $aGUI_Register_Hover_Infos[4] & " " & $aGUI_Register_Hover_Infos[5] & "x" & $aGUI_Register_Hover_Infos[6] & @CRLF)
    If $aMouseinfo2[0] > $aGUI_Register_Hover_Infos[3] And $aMouseinfo2[0] < $aGUI_Register_Hover_Infos[3]+$aGUI_Register_Hover_Infos[5] And $aMouseinfo2[1] > $aGUI_Register_Hover_Infos[4] And $aMouseinfo2[1] < $aGUI_Register_Hover_Infos[4]+$aGUI_Register_Hover_Infos[6] Then
    If $Hover_one <> $aGUI_Register_Hover_Infos[2] Then
    Call($aGUI_Register_Hover_Infos[7],$aGUI_Register_Hover_Infos[2])
    ;MsgBox(0,"","")
    $Hover_one = $aGUI_Register_Hover_Infos[2]
    ConsoleWrite("hover " & $aGUI_Register_Hover_Infos[2] & @CRLF)
    EndIf
    Else
    $aGUI_Register_Hover_Infoss = StringSplit($aGUI_Register_Hover_Info[$Hover_one],"|")
    ;_ArrayDisplay($aGUI_Register_Hover_Infoss)
    If $Hover_one = $aGUI_Register_Hover_Infoss[2] Then
    ;ConsoleWrite($aMouseinfo2[0] & "x" & $aMouseinfo2[1] & "|" & $aGUI_Register_Hover_Infoss[3] & "x" & $aGUI_Register_Hover_Infoss[4] & " " & $aGUI_Register_Hover_Infoss[5] & "x" & $aGUI_Register_Hover_Infoss[6] & @CRLF)
    If $aMouseinfo2[0] > $aGUI_Register_Hover_Infoss[3] And $aMouseinfo2[0] < $aGUI_Register_Hover_Infoss[3]+$aGUI_Register_Hover_Infoss[5] And $aMouseinfo2[1] > $aGUI_Register_Hover_Infoss[4] And $aMouseinfo2[1] < $aGUI_Register_Hover_Infoss[4]+$aGUI_Register_Hover_Infoss[6] Then

    Else
    $Hover_one = 0
    Call($aGUI_Register_Hover_Infoss[8])
    EndIf
    EndIf
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]
    Beispiel
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIScrollBars.au3>
    #include <ScrollBarConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>
    #include <MyHover.au3>
    #include <Array.au3>

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

    HotKeySet("{UP}","up")
    HotKeySet("{DOWN}","down")

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

    Global $GUI_Widh = 500
    Global $GUI_Height = 500
    Global $iYpos = 0
    Global $GUI, $hGUI, $Lab ;=>GUI Var
    Global $hGraphics, $hBitmap, $hBuffer, $hBack_Pic, $FR_Brush, $FR_Brush_H ;=>GDI+ Var
    Global $u = 1
    Opt("GUIOnEventMode",1)
    $GUI = GUICreate("Formel 1", $GUI_Widh, $GUI_Height)
    $hGUI = WinGetHandle($GUI)
    Global $aLab[2] =[200,200]
    ;$Lab = GUICtrlCreateLabel("",$aLab[0],$aLab[1],100,100)
    ;_GUICtrl_OnHoverRegister($Lab, "hover","leave")

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

    GUISetOnEvent(-3,"_exit")
    GUISetState()

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

    Draw()
    GUI_Register_Hover($hGUI,200,200,100,100,"hover", "leave")
    GUI_Register_Hover($hGUI,400,400,100,100,"hover2", -1)

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

    While 1
    Sleep(100)
    WEnd

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

    Func Draw()
    _GDIPlus_Startup()
    #Region Create Graphic Obj
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    #EndRegion

    #Region Buffer
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($GUI_Widh, $GUI_Height, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    #EndRegion

    #Region load bg picture
    $hBack_Pic = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "/Bilder/hintergrund2.bmp")
    #EndRegion

    #Region Create Pen/brush
    $FR_Brush = _GDIPlus_BrushCreateSolid("0x" & Hex(10170230230))
    $FR_Brush_H = _GDIPlus_BrushCreateSolid("0x" & Hex(25170240130))
    #EndRegion

    #Region Draw in Kontext
    _GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, 0, $iYpos)
    _GDIPlus_GraphicsFillRect($hBuffer,200,200+$iYpos,100,100,$FR_Brush)
    #EndRegion

    #Region Draw Kontext on Graphic
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    #EndRegion
    EndFunc

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

    Func up()
    $iYpos +=5
    redraw()
    EndFunc

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

    Func down()
    $iYpos -=5
    redraw()
    EndFunc

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

    Func redraw()
    #Region Draw in Kontext
    _GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, 0, 0)
    _GDIPlus_GraphicsFillRect($hBuffer,200,200+$iYpos,100,100,$FR_Brush)
    #EndRegion

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

    #Region ctrl Set
    ;__GUICtrl_SOH_ReleaseResources()
    ;GUICtrlDelete($Lab)
    ;GUICtrlSetPos($Lab,$aLab[0],$aLab[1]+$iYpos)
    ;GUICtrlSetState($Lab,$GUI_DISABLE)
    ;_GUICtrl_OnHoverRegister($Lab, "hover","leave")
    GUI_Register_Set_Pos(1, $aLab[0], $aLab[1]+$iYpos)
    #EndRegion

    #Region Draw Kontext on Graphic
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    #EndRegion
    EndFunc

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

    Func hover($nix)
    ;$u +=1
    ;ConsoleWrite("hover " & $u & @crlf)
    _GDIPlus_GraphicsFillRect($hGraphics,$aLab[0],$aLab[1]+$iYpos,100,100,$FR_Brush_H)
    EndFunc

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

    Func leave()
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    EndFunc
    Func _exit()
    _GDIPlus_BitmapDispose($hBack_Pic)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]
  • Icons Spielen verrückt

    • Darter
    • 8. Juni 2010 um 04:30

    Moin

    Total komisch. Ich hatte meine Normalen Icons auf meinem Desktop bei den Programmen als bis vor ein paar Stunden. Jetzt ge ich auf den Destop und hab für jede anwendung/ordner oder Datei ein andere Icon. Z.b. für Firefox hab ich jetzt Plötzlich ne Schwedische/Norwegische ka Flage was soln der scheiß??

    kuckst du hier
    ||
    ||
    \ /

    [Blockierte Grafik: http://s10.directupload.net/images/100608/by3jw5c8.jpg]

  • GDI+ Zeichen + Scrollen

    • Darter
    • 8. Juni 2010 um 02:53

    So ich habs jetzt auch noch nach der methode von name33 Probiert und ich habs jetzt erstmal soweit, dass wenn man pfeiltaste nach oben und unten benutzt der Vordergrund Scrollt.
    Außerdem hab ich eine hiver Funktion aus dem Englischen Forum mit drinne, sodas ich feststellen kann ob die maus über einem ctrl ist und eben wie in meinem bsp watt zeichnen^^. Funktioniert soweit auch nur ich hab alles Probiert mit den ctrls immer wenn die neue Position den ctrls gesetzt wird flackert das ding weiß durch und ich hab keine anhnung warum hat wer ne Idee.

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIScrollBars.au3>
    #include <ScrollBarConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>
    #include <GUICtrlOnHover.au3>
    #include <Array.au3>

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

    HotKeySet("{UP}","up")
    HotKeySet("{DOWN}","down")

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

    Global $GUI_Widh = 500
    Global $GUI_Height = 500
    Global $iYpos = 0
    Global $GUI, $hGUI, $Lab ;=>GUI Var
    Global $hGraphics, $hBitmap, $hBuffer, $hBack_Pic, $FR_Brush, $FR_Brush_H ;=>GDI+ Var
    Global $u = 1
    Opt("GUIOnEventMode",1)
    $GUI = GUICreate("Formel 1", $GUI_Widh, $GUI_Height)
    $hGUI = WinGetHandle($GUI)
    Global $aLab[2] =[200,200]
    $Lab = GUICtrlCreateLabel("",$aLab[0],$aLab[1],100,100)
    _GUICtrl_OnHoverRegister($Lab, "hover","leave")
    GUISetOnEvent(-3,"_exit")
    GUISetState()

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

    Draw()

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

    While 1
    Sleep(100)
    WEnd

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

    Func Draw()
    _GDIPlus_Startup()
    #Region Create Graphic Obj
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    #EndRegion

    #Region Buffer
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($GUI_Widh, $GUI_Height, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    #EndRegion

    #Region load bg picture
    $hBack_Pic = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "/Bilder/hintergrund2.bmp")
    #EndRegion

    #Region Create Pen/brush
    $FR_Brush = _GDIPlus_BrushCreateSolid("0x" & Hex(10170230230))
    $FR_Brush_H = _GDIPlus_BrushCreateSolid("0x" & Hex(25170240130))
    #EndRegion

    #Region Draw in Kontext
    _GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, 0, $iYpos)
    _GDIPlus_GraphicsFillRect($hBuffer,200,200+$iYpos,100,100,$FR_Brush)
    #EndRegion

    #Region Draw Kontext on Graphic
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    #EndRegion
    EndFunc

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

    Func up()
    $iYpos +=5
    redraw()
    EndFunc

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

    Func down()
    $iYpos -=5
    redraw()
    EndFunc

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

    Func redraw()
    #Region Draw in Kontext
    _GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, 0, 0)
    _GDIPlus_GraphicsFillRect($hBuffer,200,200+$iYpos,100,100,$FR_Brush)
    #EndRegion

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

    #Region ctrl Set
    ;__GUICtrl_SOH_ReleaseResources()
    ;GUICtrlDelete($Lab)
    GUICtrlSetPos($Lab,$aLab[0],$aLab[1]+$iYpos)
    ;GUICtrlSetState($Lab,$GUI_DISABLE)
    ;_GUICtrl_OnHoverRegister($Lab, "hover","leave")
    #EndRegion

    #Region Draw Kontext on Graphic
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    #EndRegion
    EndFunc

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

    Func hover($nix)
    $u +=1
    ConsoleWrite("hover " & $u & @crlf)
    _GDIPlus_GraphicsFillRect($hGraphics,$aLab[0],$aLab[1]+$iYpos,100,100,$FR_Brush_H)
    EndFunc

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

    Func leave()
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Dateien

    GUICtrlOnHover.au3 23,02 kB – 360 Downloads
  • MenüItems löschen

    • Darter
    • 7. Juni 2010 um 23:44

    und so hätte ich es gemacht ^^

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    $Gui=GUICreate("MenuItems löschen?",300,200,150,150)
    GUISetOnEvent(-3, '_Exit')
    $Menu1=GUICtrlCreateMenu("Menü1")
    GUICtrlCreateMenuItem("Item1",$Menu1)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    GUICtrlCreateMenuItem("Item2",$Menu1)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    GUICtrlCreateMenuItem("Item3",$Menu1)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    GUICtrlCreateMenuItem("Item4",$Menu1)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    GUICtrlCreateMenuItem("Item5",$Menu1)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    $Menu2=GUICtrlCreateMenu("Menü2")
    GUICtrlCreateMenuItem("Item6",$Menu2)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    GUICtrlCreateMenuItem("Item7",$Menu2)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    GUICtrlCreateMenuItem("Item8",$Menu2)
    GUICtrlSetOnEvent(-1, "_itemsloeschen")
    GUISetState(@SW_SHOW)

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

    While Sleep(100)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _itemsloeschen()
    GUICtrlDelete(@GUI_CtrlId)
    EndFunc

    [/autoit]
  • GDI+ Zeichen + Scrollen

    • Darter
    • 7. Juni 2010 um 23:31

    Das ist schon mal seht geil danke. Nur ich verwende Labels mit denen ich überprüfen kann ob die maus drüber ist. Dieses sollte ja dann auch mitscrollen und auch jedes mal alles Strings usw.(bei mir jede menge) wider in den Buffer ziechenen? geht das nicht einfacher? Deshalb hatte ich mir ja den 2 buffer gemacht

    EDIT: name22 finde ich nicht schlecht hab ich mir eben erst angekuckt ich werds auf jeden fall auch noch auf dem weg Probieren.

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIScrollBars.au3>
    #include <ScrollBarConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>

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

    Global $xPos = 0, $yPos = 0
    Global $Haupt_GUI_Width = 630
    Global $Haupt_GUI_Height = 510

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

    Opt("GUIOnEventMode",1)
    $Win = GUICreate("GDI* Test",$Haupt_GUI_Width,$Haupt_GUI_Height)
    $GUI_handle = WinGetHandle($Win)

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

    GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") ; Vertikales Scrollen
    GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") ; Horizontales Scrollen

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

    _GUIScrollBars_Init($Win)
    _GUIScrollBars_SetScrollInfoMax($GUI_handle, $SB_HORZ, 80)
    _GUIScrollBars_SetScrollInfoMax($GUI_handle, $SB_VERT, 200)
    $label = GUICtrlCreateLabel("",200,200,50,50)
    GUICtrlSetState(-1,$GUI_DISABLE)

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

    GUISetOnEvent(-3,"_exit")
    GUISetState()

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

    _GDIPlus_Startup()

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

    #Region Create Graphic Obj
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI_handle)
    #EndRegion

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

    #Region load bg picture
    Global $hBack_Pic = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "/Bilder/hintergrund2.bmp")
    $iX = _GDIPlus_ImageGetWidth($hBack_Pic)
    $iY = _GDIPlus_ImageGetHeight($hBack_Pic)
    #EndRegion

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

    #Region Buffer
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iX, $iY, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    ;$hBitmap_BG_Buffer = _GDIPlus_BitmapCreateFromGraphics($Haupt_GUI_Width, $Haupt_GUI_Height, $hGraphics)
    ;$hBuffer_BG = _GDIPlus_ImageGetGraphicsContext($hBitmap_BG_Buffer);;=> Hintergrund Buffer
    #EndRegion

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

    _GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, 0, 0)
    _GDIPlus_GraphicsDrawString($hBuffer, "Ich bin ein String", 50, 80)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    Sleep(2000)
    _GDIPlus_GraphicsDrawString($hGraphics, "Ich bin ein String", 50, 180)
    Sleep(2000)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)

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

    #cs
    _GDIPlus_GraphicsDrawImageRect($hBuffer_BG,$hBack_Pic, 0, 0, $Haupt_GUI_Width,$Haupt_GUI_Height);;=>In den Buffer Zeichen
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=> BG Buffer selber auf Graphicobj Zeichnen

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

    _GDIPlus_GraphicsFillRect($hBuffer, 50, 50, 100, 100) ;=>In den Buffer Zeichen
    Sleep(200)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=> Buffer selber über BG Buffer zeichnen
    Sleep(2000)
    _GDIPlus_GraphicsDrawRect($hGraphics, 140, 140, 100, 100);=>Direkt auf Graphicobj Zeichnen
    Sleep(2000)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height) ;;=> BG Buffer Refresh
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=> Buffer Refresh
    #ce
    ;GUIRegisterMsg(0x000F, "MY_PAINT");=>Redraw
    $onetimehover = 0
    While 1
    $mouse = GUIGetCursorInfo ($GUI_handle)
    If $Label <> $mouse[4] And $onetimehover = 1 Then
    ;MsgBox(0,"","")
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
    ;_WinAPI_RedrawWindow($hHaupt_GUI_Handle, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME))
    $onetimehover = 0
    EndIf
    ;ToolTip($mouse[4] & " " & $hoverctrlid )
    If $mouse[4] = $Label Then
    $hBrush_hover = _GDIPlus_BrushCreateSolid("0x" & Hex(10170230230))
    _GDIPlus_GraphicsFillRect($hGraphics, 200, 200, 50, 50,$hBrush_hover)
    $onetimehover = 1
    EndIf

    Sleep(10)
    WEnd

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

    #cs
    Func MY_PAINT2($hWnd, $msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, $yyPos, $xxPos, $Haupt_GUI_Width, $Haupt_GUI_Height, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
    _WinAPI_RedrawWindow($GUI_handle, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME))

    Return "GUI_RUNDEFMSG"
    EndFunc ;==>MY_PAINT
    #ce

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

    Func MY_PAINT($x, $y)
    _GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, $x, $y) ;-> nur der Font scrollt
    ;_GDIPlus_GraphicsDrawImage($hBuffer, $back, -$x, -$y) ;-> Bild und Font scrollt, wobei Bild schneller scrollt
    ;_GDIPlus_GraphicsDrawImage($hBuffer, $back, 0, 0) ;-> Bild und Font scrollt
    _GDIPlus_GraphicsDrawString($hBuffer, "Ich bin ein String", 50, 80)
    ;_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, -$x, -$y, $iX, $iY)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, -$x, -$y, $Haupt_GUI_Width, $Haupt_GUI_Height)
    GUICtrlSetPos($Label,200,200)
    EndFunc ;==>MY_PAINT

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

    ; Horizontales Scrollen
    Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)

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

    Local $index = -1, $xChar, $xPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

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

    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hWnd Then
    $index = $x
    $xChar = $aSB_WindowInfo[$index][2]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0

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

    ; Ermittelt alle Informationen der horizontalen Scrollbar
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $xPos = DllStructGetData($tSCROLLINFO, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    ; Speichert die x-Position für einen späteren Vergleich
    $Pos = $xPos
    DllStructsetData($tSCROLLINFO, "nMax",100000)
    #forceref $Min, $Max
    ; Auswertung der vom System gemeldeten Scroll-Nachricht
    Switch $nScrollCode
    Case $SB_LINELEFT ; Der Anwender klickte auf den linken Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
    MY_PAINT($Pos - 1, $yPos)
    Case $SB_LINERIGHT ; Der Anwender klickte auf den rechten Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
    MY_PAINT($Pos + 1, $yPos)
    Case $SB_PAGELEFT ; Der Anwender klickte links neben dem Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
    MY_PAINT($Pos - $Page, $yPos)
    Case $SB_PAGERIGHT ; Der Anwender klickte rechts neben dem Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
    MY_PAINT($Pos + $Page, $yPos)
    Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    MY_PAINT($TrackPos, $yPos)
    EndSwitch

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

    ;~ // Setzt die neue Position und ermittelt sie danach erneut.
    ;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.

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

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)

    _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)

    ; // Falls sich die x-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
    ;$xxPos = DllStructGetData($tSCROLLINFO, "nPos")
    ;If ($xxPos <> $xPos) Then
    ;_GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
    ;_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;= BG Buffer soll an der setelle bleiben
    ;_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, $xxPos, $yyPos, $Haupt_GUI_Width, $Haupt_GUI_Height, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=>Draw Buffer new pos
    ;EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_HSCROLL

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

    ; Vertikales Scrollen
    Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

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

    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hWnd Then
    $index = $x
    $yChar = $aSB_WindowInfo[$index][3]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0

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

    ; Ermittelt alle Informationen der vertikalen Scrollbar
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    ; Speichert die y-Position für einen späteren Vergleich
    $Pos = $yPos

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

    ; Auswertung der vom System gemeldeten Scroll-Nachricht
    Switch $nScrollCode
    Case $SB_LINEUP ; Der Anwender klickte auf den oberen Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
    MY_PAINT($xPos, $Pos - 1)
    Case $SB_LINEDOWN ; Der Anwender klickte auf den unteren Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
    MY_PAINT($xPos, $Pos + 1)
    Case $SB_PAGEUP ; Der Anwender klickte oberhalb des Scrollbalkens
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
    MY_PAINT($xPos, $Pos - $Page)
    Case $SB_PAGEDOWN ; Der Anwender klickte unterhalb des Scrollbalkens
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
    MY_PAINT($xPos, $Pos + $Page)
    Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    MY_PAINT($xPos, $TrackPos)
    EndSwitch

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

    ;~ // Setzt die neue Position und ermittelt sie danach erneut.
    ;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.

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

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    ; // Falls sich die y-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
    ; $yyPos = DllStructGetData($tSCROLLINFO, "nPos")
    ;If ($yyPos <> $yPos) Then
    ; ;_GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
    ; _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;= BG Buffer soll an der setelle bleiben
    ; _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, $xxPos,$yyPos, $Haupt_GUI_Width, $Haupt_GUI_Height, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height) ;;=>Draw Buffer new pos
    ; $yPos = $Pos
    ;EndIf

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

    Return $GUI_RUNDEFMSG

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

    EndFunc ;==>WM_VSCROLL

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • GDI+ Zeichen + Scrollen

    • Darter
    • 7. Juni 2010 um 18:56

    So hab was hinbekommen mit 2 Buffern einer Für den BG und einer für den Rest. hab das wichtigste kommentiert nur leider klar flacker es, da immer der bg buffer zuerst gezicnet wird und dann der rest. Einer ne IDee wich ich das umgehen könnte.

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIScrollBars.au3>
    #include <ScrollBarConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>

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

    $Haupt_GUI_Width = 300
    $Haupt_GUI_Height = 300
    Opt("GUIOnEventMode",1)
    $Win = GUICreate("GDI* Test",$Haupt_GUI_Width,$Haupt_GUI_Height)
    $GUI_handle = WinGetHandle($Win)
    ;$Graphic = GUICtrlCreateGraphic(0,0,$Haupt_GUI_Width,$Haupt_GUI_Height)
    ;$hGraphic = GUICtrlGetHandle($Graphic)
    GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") ; Vertikales Scrollen
    GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") ; Horizontales Scrollen

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

    _GUIScrollBars_Init($Win)
    GUISetOnEvent(-3,"_exit")
    GUISetState()

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

    Global $yyPos = 0
    Global $xxPos = 0
    _GDIPlus_Startup()

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

    #Region Create Graphic Obj
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI_handle)
    #EndRegion

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

    #Region Buffer
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Haupt_GUI_Width, $Haupt_GUI_Height, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap);;=>Buffer für den rest

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

    $hBitmap_BG_Buffer = _GDIPlus_BitmapCreateFromGraphics($Haupt_GUI_Width, $Haupt_GUI_Height, $hGraphics)
    $hBuffer_BG = _GDIPlus_ImageGetGraphicsContext($hBitmap_BG_Buffer);;=> Hintergrund Buffer
    #EndRegion

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

    $hBack_Pic = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "/Bilder/hintergrund.bmp")

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

    _GDIPlus_GraphicsDrawImageRect($hBuffer_BG,$hBack_Pic, 0, 0, $Haupt_GUI_Width,$Haupt_GUI_Height);;=>In den Buffer Zeichen
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=> BG Buffer selber auf Graphicobj Zeichnen

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

    _GDIPlus_GraphicsFillRect($hBuffer, 50, 50, 100, 100) ;=>In den Buffer Zeichen
    Sleep(200)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=> Buffer selber über BG Buffer zeichnen
    Sleep(2000)
    _GDIPlus_GraphicsDrawRect($hGraphics, 140, 140, 100, 100);=>Direkt auf Graphicobj Zeichnen
    Sleep(2000)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height) ;;=> BG Buffer Refresh
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=> Buffer Refresh

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

    GUIRegisterMsg(0x000F, "MY_PAINT");=>Redraw

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

    While 1
    Sleep(100)
    WEnd

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

    Func MY_PAINT($hWnd, $msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, $yyPos, $xxPos, $Haupt_GUI_Width, $Haupt_GUI_Height, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
    _WinAPI_RedrawWindow($GUI_handle, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME))
    Return "GUI_RUNDEFMSG"
    EndFunc ;==>MY_PAINT

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

    ; Horizontales Scrollen
    Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)

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

    Local $index = -1, $xChar, $xPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

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

    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hWnd Then
    $index = $x
    $xChar = $aSB_WindowInfo[$index][2]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0

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

    ; Ermittelt alle Informationen der horizontalen Scrollbar
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $xPos = DllStructGetData($tSCROLLINFO, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    ; Speichert die x-Position für einen späteren Vergleich
    $Pos = $xPos
    #forceref $Min, $Max
    ; Auswertung der vom System gemeldeten Scroll-Nachricht
    Switch $nScrollCode
    Case $SB_LINELEFT ; Der Anwender klickte auf den linken Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)

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

    Case $SB_LINERIGHT ; Der Anwender klickte auf den rechten Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)

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

    Case $SB_PAGELEFT ; Der Anwender klickte links neben dem Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)

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

    Case $SB_PAGERIGHT ; Der Anwender klickte rechts neben dem Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)

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

    Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

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

    ;~ // Setzt die neue Position und ermittelt sie danach erneut.
    ;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.

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

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    ; // Falls sich die x-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
    $xxPos = DllStructGetData($tSCROLLINFO, "nPos")
    If ($xxPos <> $xPos) Then
    ;_GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;= BG Buffer soll an der setelle bleiben
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, $xxPos, $yyPos, $Haupt_GUI_Width, $Haupt_GUI_Height, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;=>Draw Buffer new pos
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_HSCROLL

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

    ; Vertikales Scrollen
    Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

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

    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hWnd Then
    $index = $x
    $yChar = $aSB_WindowInfo[$index][3]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0

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

    ; Ermittelt alle Informationen der vertikalen Scrollbar
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    ; Speichert die y-Position für einen späteren Vergleich
    $Pos = $yPos

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

    ; Auswertung der vom System gemeldeten Scroll-Nachricht
    Switch $nScrollCode
    Case $SB_TOP ; Der Anwender klickte auf die "Pos1"-Taste
    DllStructSetData($tSCROLLINFO, "nPos", $Min)

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

    Case $SB_BOTTOM ; Der Anwender klickte auf die "Ende"-Taste
    DllStructSetData($tSCROLLINFO, "nPos", $Max)

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

    Case $SB_LINEUP ; Der Anwender klickte auf den oberen Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)

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

    Case $SB_LINEDOWN ; Der Anwender klickte auf den unteren Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)

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

    Case $SB_PAGEUP ; Der Anwender klickte oberhalb des Scrollbalkens
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)

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

    Case $SB_PAGEDOWN ; Der Anwender klickte unterhalb des Scrollbalkens
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)

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

    Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

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

    ;~ // Setzt die neue Position und ermittelt sie danach erneut.
    ;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.

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

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    ; // Falls sich die y-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
    $yyPos = DllStructGetData($tSCROLLINFO, "nPos")
    If ($yyPos <> $yPos) Then
    ;_GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap_BG_Buffer, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height);;= BG Buffer soll an der setelle bleiben
    _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, $xxPos,$yyPos, $Haupt_GUI_Width, $Haupt_GUI_Height, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height) ;;=>Draw Buffer new pos
    $yPos = $Pos
    EndIf

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

    Return $GUI_RUNDEFMSG

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

    EndFunc ;==>WM_VSCROLL

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    EDIT hier noch das bild. Musste es leder extern hochladen war zu groß und deshalb ist es auch ein JPG und kein BMP

    EDIT EDIT: Ich könnte natürlich das ganze mit einem Buffer machen und den hintergrund so groß erstellen, wie die gui nacher scrollbar sein soll und dieser dann mitscrollt aber, wie mach ich es, wenn dieser bleiben soll wie er ist?
    Ich vermerke ein reges Desinteresse an diesem Thread :D

    [Blockierte Grafik: http://s10.directupload.net/images/100607/nsy46g2w.jpg]

  • GDI+ Zeichen + Scrollen

    • Darter
    • 7. Juni 2010 um 18:28

    naja war vllt falsch ausgedrückt. Anhnung hab ich ja schon etwas nur ich frag ich ersten warum mein Script oben nicht so funz wie es soll und ob jemand nen Anstubser hat wie ich das am besten zum Scrollen bring

  • GDI+ Zeichen + Scrollen

    • Darter
    • 7. Juni 2010 um 18:17

    Versteh ich nicht ganz?? Wiso soll das hier was für die Jobbörse sein? Ich sagte doch nicht, dass mir das einer machen soll sondern ich habs Probiert und bin auch hindernisse gestoßen und frage jetzt nach hilfe.
    Deinen Letzten Satzt versteh ich nicht. Wer schreibt was mal eben schnell? und wenn es so leicht wäre, was du denke ich mal mit dem Satzt ausdrücken willst, dann hätte hier schon jemand ne Sachliche Antwort geben können. Und das *PUSH* war nur, damit der thread nicht der Neuesten Beuträgeliste runterhupft, denn sost würde warscheinlich nie jemand Antworten.

  • GDI+ Zeichen + Scrollen

    • Darter
    • 7. Juni 2010 um 16:49

    *PUSH*

  • GDI+ Zeichen + Scrollen

    • Darter
    • 7. Juni 2010 um 10:23

    Moin
    Also ich wolle, das was ich mit GDI+ auf ne Gui gezeichnet hab gerne Scrollen nur leider denke ich wird es für mich unmöglich sein, da ich die kentnisse dazu noch nicht hab. Deshalb hab ich Probiert mit GUIcrtlcreateGraphic() ein ctrl zu erstellen, auf welches ich dan zeichne, da dieses ja automatisch mitgescrollt wird. Nur, wenn ich einen Buffer auf dieses Handle erstelle und dann zeichne dieht alles etwas komisch aus und Funtioniert wohl auch nciht so richtig aber seht selbst hier mal mein bsp.

    Spoiler anzeigen
    [autoit]

    #Include <GDIPlus.au3>
    #include <GUIScrollBars.au3>
    #include <ScrollBarConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>

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

    $Haupt_GUI_Width = 200
    $Haupt_GUI_Height = 200
    Opt("GUIOnEventMode",1)
    $Win = GUICreate("GDI* Test",$Haupt_GUI_Width,$Haupt_GUI_Height)
    $hWin = WinGetHandle($Win)
    $Graphic = GUICtrlCreateGraphic(0,0,$Haupt_GUI_Width,$Haupt_GUI_Height)
    $hGraphic = GUICtrlGetHandle($Graphic)
    GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL") ; Vertikales Scrollen
    GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") ; Horizontales Scrollen

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

    _GUIScrollBars_Init($Win)

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

    GUISetOnEvent(-3,"_exit")

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

    GUISetState()

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

    _GDIPlus_Startup()

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

    #Region Create Graphic Obj
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGraphic)
    #EndRegion

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

    #Region Buffer
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Haupt_GUI_Width, $Haupt_GUI_Height, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    #EndRegion

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

    _GDIPlus_GraphicsDrawString($hBuffer, "Ich bin ein String", 50, 50)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
    Sleep(2000)
    _GDIPlus_GraphicsDrawString($hGraphics, "Ich bin ein String", 80, 80)
    Sleep(2000)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height) ;;=> Buffer Funktioniert dann ledier auch nicht mehr

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

    GUIRegisterMsg(0x000F, "MY_PAINT");=>Redraw

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

    While 1
    Sleep(100)
    WEnd

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

    Func MY_PAINT($hWnd, $msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Haupt_GUI_Width, $Haupt_GUI_Height)
    ;_WinAPI_RedrawWindow($hWin, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME))
    Return "GUI_RUNDEFMSG"
    EndFunc ;==>MY_PAINT

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

    ; Horizontales Scrollen
    Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)

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

    Local $index = -1, $xChar, $xPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

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

    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hWnd Then
    $index = $x
    $xChar = $aSB_WindowInfo[$index][2]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0

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

    ; Ermittelt alle Informationen der horizontalen Scrollbar
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $xPos = DllStructGetData($tSCROLLINFO, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    ; Speichert die x-Position für einen späteren Vergleich
    $Pos = $xPos
    #forceref $Min, $Max
    ; Auswertung der vom System gemeldeten Scroll-Nachricht
    Switch $nScrollCode
    Case $SB_LINELEFT ; Der Anwender klickte auf den linken Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)

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

    Case $SB_LINERIGHT ; Der Anwender klickte auf den rechten Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)

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

    Case $SB_PAGELEFT ; Der Anwender klickte links neben dem Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)

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

    Case $SB_PAGERIGHT ; Der Anwender klickte rechts neben dem Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)

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

    Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

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

    ;~ // Setzt die neue Position und ermittelt sie danach erneut.
    ;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.

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

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
    ; // Falls sich die x-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")
    If ($Pos <> $xPos) Then _GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_HSCROLL

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

    ; Vertikales Scrollen
    Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

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

    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hWnd Then
    $index = $x
    $yChar = $aSB_WindowInfo[$index][3]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0

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

    ; Ermittelt alle Informationen der vertikalen Scrollbar
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    ; Speichert die y-Position für einen späteren Vergleich
    $Pos = $yPos

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

    ; Auswertung der vom System gemeldeten Scroll-Nachricht
    Switch $nScrollCode
    Case $SB_TOP ; Der Anwender klickte auf die "Pos1"-Taste
    DllStructSetData($tSCROLLINFO, "nPos", $Min)

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

    Case $SB_BOTTOM ; Der Anwender klickte auf die "Ende"-Taste
    DllStructSetData($tSCROLLINFO, "nPos", $Max)

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

    Case $SB_LINEUP ; Der Anwender klickte auf den oberen Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)

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

    Case $SB_LINEDOWN ; Der Anwender klickte auf den unteren Pfeil
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)

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

    Case $SB_PAGEUP ; Der Anwender klickte oberhalb des Scrollbalkens
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)

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

    Case $SB_PAGEDOWN ; Der Anwender klickte unterhalb des Scrollbalkens
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)

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

    Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

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

    ;~ // Setzt die neue Position und ermittelt sie danach erneut.
    ;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.

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

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    ; // Falls sich die y-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")
    If ($Pos <> $yPos) Then
    _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
    $yPos = $Pos
    EndIf

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

    Return $GUI_RUNDEFMSG

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

    EndFunc ;==>WM_VSCROLL

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • "Binärbild" mit GDI laden!

    • Darter
    • 7. Juni 2010 um 02:11
    Zitat von UEZ

    Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]


    ;coded by UEZ 2010
    #include <GDIPlus.au3>
    #include <Memory.au3>
    #Include <WindowsConstants.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GUIOnEventMode", 1)

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

    #region GDI+ ini
    _GDIPlus_Startup()

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

    Local $sData
    $sData &= "0x89504E470D0A1A0A0000000D49484452000000BD000000680806000000A424F1AC0000002574455874417574686F7200416C616E20486F726E6520287777772E616C616E686F726E652E636F6D2940C00F520000001774455874436F707972696768740057697A6574202F204E65786F6E3EF7BB7A0000200049444154789CED7DAF7E233D93EE33BB4B022BF0850AFCA0062EECC0033B97E0C0039D4B882F21A687C574599A7E2CA2CB223A6C8A86E500A9A4925ADD6E274EE2CCA4E697B1AD56EBEFA35255A924FDC03761D55307C010601800189E816137B0FFE4A27DD33BD08FCF2EC047D2EDDA1000308300BE03A3E33A1203559867C6D6791EE2F7D12BDFF4B5E88F077D043A01B06074007A0668846EA2F081329899C18CF8C73B666C3CC37D5805BEE9E8F447837EBDA20E400FD08AAA6753EC9AA6E24416EF1CC3795C00F8167DBE28FDD76717E098B45E1101B805D0830BFC964C1D19DC299C190081EBD1919EE5970DE1C933CE313D76BEE984E9CB827EBD220B6005A0634614D651CA278C24B624628029835EA207059653988A0E66C07BD6D8BFC237E0BF2C7D55F1860CE1B731004060661813657205E811E08124A610283D8E161B888E2A03C17B868B420CC5E49CC78FBE2303E02E06EF76036FDEA18EDFF44EF455404F000C80C7C9089481690C1578272A79B78F4036949FB1FA2F003EC8EF08E95E7BC6B6EFA8A300762323230C13F600FDDC0DFCCDFDBF007D05D05B2205F609588964038AC0A7007C6620CC0801C43EBE4F04D83838F4A0E060CF0433E03CC318720458E81924225E449F387B38665C3AFF2DF69C3A9D3AE83B223C00186BA23571FE48E00712F03DE7DF0278C46735F00BDD801A612208A93C7DC8C03B878B37D7FA9BDE95FEF3B30B304316C0FF3D3BC3BF96021E009EE5EF19C019E07F85CF7FFE01FE6508D69EE19F7FCE52C43300FC1CDE3C3B3B8B8930F8F919CF78C6F3F333CE9E43E414A6326366E0EC0C8C6780813380F819C3311BE29B8E4BA7CAE909C08A08B78BDF9831BC5B4389B3278575B4EC9AF58122CEC4200B524D5CB80AA10E8C1D80ADFF5EB53D693A5593655841C578857492D1B7569504F0B6FD8E801608E20D33C09EA3A84309F8222E81831F822F97A50606AE99BF17ABBE0A9D2AA7CFB23C5080583E0E61A57D47D91E1F81CB3ECBF3200C04B035D4FB68FE0C8380731C148A3013B021C2600C4C8C71A7B2F4CCFC7370DF1CFF14E914414F00D604AC81C05C01380003C2770152873038BA25897696D202535242C3EAEA45D719EB3DDF1345851462FD09C01785379A30777149A04354974539D6146610BEDA0DD8BDA12DBEE91DE814C51B06B08BD814907B63F0D48C8931D71FB9180018064EA6CB18E966D51BC7CC4F50DC9C280C0E0F8E767C6DE10188A80FF1D43B136560500FF037E84F8C4E91D30341147F9CF6FE6A07B7E4FD1447E9AED6E0A731F428ABB85A7115595F522C068ACE436681A9B251E2F697BBE1DB9A734A748AA02743F8DD329CB4003EC2DB8C158719E83BBA3644779200331703222593E4F968F9C11E934CE5F7937C7908BBDD80ABB957BFE963E914C51B6A816BCA7A985E927801DC57502E34310146706578D080175F7941AB2C52854F06E236AA24E6E8CC907CD4722155A4B820D6B01D7DD367D229823EBA919544D50FB5383A8A47847B1D47596ECE83DB40885B031EC06874E5E754E43992E3D596AAB0C9303DAD04A46FFA6C3A45D0CF31740015779D8C84E4429C64FA80CBAD675EB51C3093F31947D3244B4A71A755B4E5473367B006F909BD42F9EAF41D99EFFDB6A743A70DFAC2933152049D67DC987D2BB611F8052367DE32D34A14D42CB6846C2BBF79D65F98192629B0A4BD3519C040841DC2FA96F3BE9E3EBEE954E8D414D9E47E401AF091D71200CFB800D059833BE502303D3D5012636E006C00C01A3C00E88C72BE978D22F19D2DC21AD6AD35D18C1933D333842FB93C13E0E3E62B09761446539814FCB7CDFE14E8D4387D122A92EC1D107403C696837C6C8DC1DD48A4A069E0C7B8C96CE8191B023A260621DAE539BD7F09A023E0D6DA2CC71322F051D9EE731E4480155D36BED8EB7210E1E2DB5DE1F3E9D4400F209E34C019EC087E60BF0134915DDBE175B489CD539E11CC44DECB4E2AEC006C1878EC4CF6C5F729514E6129039561AD68CB27973FFB387624C818837554BE4BABA79ADD06872BE495E96F7A239D9A7803446E8E0042188397A60C5349CC1C06070300517061D0C43C3AC1E00E618F2D0C25503D7696549AACDF2F3E0B906A64D78382A61F1555AA0395BD5F5BA100C079FCC4F70078359D22E881C0D9C76E0742158A92A930D8E71D949814A90346ABA216C01D1176043863E8C11A24DF1C013C57832B7D69F91E54656C895B541BFA1728B9D9B45AD4F5B251A777216B4381DD1FE240778AA03714014F2D16A969DABC5E0C0C3F0110139CD58C3174670C9288C45CEE8C2ABECE747BFD48C416AD30EF2756E508E255329356C0075ECFF1571DBD1416D9A565DB13573FDD0E7C8AF83A4999BEE48535E02706C01E25B6C5E9E5B53B8EB64D863257F20443A7F2990E9755B500766AEA1393A4741206E094EB33A98A5403ABC301A0EF2C5E10CBA607378147F52C8B2E0B1E2156B30BF406FBF86CD5D18B8EB8DD9DC6203845D08FA9EA11CFB83684BB59116319031B00307B10DBB1DC2EC9348B44199019DC34725368147F94B0D21CE07D569E455F2816BC4A85DDC6BF59E01BC20B03185CDC24EFB9283F37DA8AAB5F944EC1128B56E98B44920895EFEB01BBEAE9C5393EFFECCDF32731F22AB244784CE0D11C30D8DA"
    $sData &= "BD35B8DF2B6E28FB3B33AE016C5BD18CC13D337A6B72FC7D498BCB7191DD045B97F4C44A542BA813E56D5747CD762ACA15D0B4FF1B029E9A0B7CF12114F0F711D54A4A3D2DEC6132547DF94CF09F22E83B223CD4A63B66FC4430F1DD179CB33127EBB68F0B4893674F5A03F28CDF89EBE9878D8E1C037E2CC6048086955BEF392F62B54594D1BBAF4042DD8F16336704A5BC9AB3D55CFC43E4B58934D27F9F07FC9305BDFC108B4CB2E6D4DC869017B2D473AD0230CFD7D3101E399E0AA2169646E98D7DEB298BBB1226BDCA715B22E753D2961E05D500FE0DF2861A5DDBFA135808F8941749DDAAC1CB5A7AAF4B561DA62509251D61FFC0D613C7E68365FDD3047D74FF8DB6754AE24E83C4CA81000A8F30D573FC2EED3F2FF31A74ECF14002EAAAC784236AC62F16193DB888A8ECF096134F5D7E0EBBBA64F0160B6087D10F847587BB39D0D5ED18CADDE6F68505ABACAB330418A2EC364D59D61F51ADF83718D3472AB9A7087A02D02334ECE3A106359D48DAD0EDF7D793C28A6F76A35769D6222B2388395D1746093327C0D7E52852E231900060BBE3228F57CEF71B60BC28A7B269A65BCF527A0BA4F3D89030100AE221011CABBAB6867A9D1045CEB0E4049442048DCAFA4799384F11F40082C56171E4862C9F00C4C9496DD6E7C5505068C56DB8A5FCE93CFA9E40505B068B13D26ADBC7C40F0A5CBEB0D6CC157201D56B1B69B0B658BCFA6A4D0039A2BB43F4B14BB18C0996CDAEA3272054311E1194D22253CE744129AF66BB96924E481EAC1F01FC533559D2248757D37F7A2EB2BD0A93C6AFA3CED08E819E627A2D6B873E2393749205DEB9E8EC869E1DBF1376C3CCE0685002AF9E29B8FAC9753E8DC41BCA79746D10C640CC30AB9E1EC72F855949004E207804931333834C58D6762E64480438CF579AFDEB2FF1BB056000FE10D78A53057D9384533063181DFDA1800F44F106E9F712063AD432ADA1A0E0190D6A9D65E17D168FF65687C4CE913587F3F411A76C71CDEA4B73F6500680B837E107A2CFD3AAA787F01E8D5905C714A97C6E12F0431B04C6C0181C5F231C6CBB0FCC1FBA71FE5441DFEC270062736FCAAE6F21CF600ADB5A0D11D02BB7E2119354AB8F7AA0389FF7D34E894739EE382C197E265ED4A24B334A43411C2990D5ACA82C5BDC7701F046AFAE72B5080555F798081902F928EA7168486B0C0CF11D434E8C9BA6FAE9CDD6BFAB8873B2323D69993EB3EB4BA34F3E1BBD547C847758A6D8FD7535843503B7AB4E757A238BB08CAF4D12A1C37743B1EBAA6DFB9ED215165A6DB47C5EEB30B3EFA0601C42B5EF8EE93B7AA2A494E605B53CC0EB55E7EC86CDB27792C2820A1A225EB3C0BA3E9163DC6CDE0FF8270B7A004FC89BAA07009B04F8D69CDD0082A685A027067ECF825E4C734A814D33826C328971196DC039A7CEB60FF91622D1210A6D5A51AD064D01CCC4D6A1F34D3BC92ACAC0977294521CC6C097BA65EE1464FE90C2A4223FAA0CF2ACC08CCDCE9FF31253D08174CAA05F03E8A227E4B41542D1A893622021006B70388F8F271B72D54727A92A923E012D815E8E0B49F9CE28A6090F718556291B23B04ED092DE4F1695467AD16D5AD633E6EECDEAFA8E1EEAB4427A540CA6C2490FC5B8009149C21097291434D5B79BAD7B979D66A70C7A2060EC77D1161373FA58EE56969CDAD052FCCE3FBC3A0541A67351628D582BA287E29878B23C020E42108B9C06FD0265B4CE6694BE2233316AD4E01A1038FC9CF2480056AB9E6E490509C0F5DE64C96F707C05009DA5FBB4D641541E7D8E86823C9A45D42306B65B77BE473D3A984E1DF46B00B7A9236B59A122A27CC34822D5E093D37FA47C5B09159C3D8F02A423BD473243455353BA576E0975995A55CC002A8AD1CE074ADCA9E3642E3F00B81E9778441D806EDDD35A7CFAA34BC59680810C06EFC17D47A4569289998DB594F4AED09659F69A426F59278AFF87C582EDEEB8F2FDA95A6F840608CFD0DC593C22E36FEFE0104DE8191C5CE0513394296382D8E00BEB854A272D1E28A7FB452C488B03F14F44875A81ADD3E3BA028D387BF3CE807798F0366DD000C00E8E6581EF8642986300EC81BE0B0D652DFD2E322C184D3EEF1F04B067B9AAA81CE0B1522145D5BE32411C91DB9F2CE8951E75652D3D68852D914CF5261E9DA738524D46C9DFE5EB4ADA8C80AFC15E44A8B82D73E936DC94A7290F36392BE7A8F37545C56CC0293342765C5B4ADE796C11C4A162F9A1EF888C89604F20D76D9C719A819FD632AE8930584B9CDC3708D12B1514C528E2EC9DF1678B37B10DA8B7F424AB7EF961FC14705526350DF6D1CEA55A2ED0E9082AD454ACB98FE42D1DE463273273E14670603D539594BC9D64E4D7A429542CA6E5B17B83E55C3E15130DC0AD572629FBEDD94EBB238486CF66D0B09E0170EA236DB111729E2F00F07B5C537A12A0A7689AEC7B319551C1264303E6BA734489064BE1F44522DB66DB41E17E1CE3E4F4022C6ADF91F8722E24E56D7602FAA0947291E4A8970A997EAC68EB325557FBCCDAEFF5CC97BE6B398ED3E0F1C0DB6F3D4C60073263A84A44AADF32A757FD41E377A7649714CE7C54F7E34F136F08A0AE0BD36313049CBF14626D027BD96CE20FCE0CEC06DE5A8395B502FC6837210550260598702C59F811E34E0C105D402242672722E8D9220190E12716E4454E6E24334992BE6EBF748C2117EF1ECAE15BA40EF24459B7F858CFAEF5D9FD1C95A2B1C1B2E8EA2294450F3842E1357D0AE8FB0E2FC2D1464AA5C8874D13844CD7F9EC78718795C62402FA0EABDD8E77CCDC5B13383888D23E4E8EFFC06517D4CBE5B5F3560A94F24C28C405"
    $sData &= "55A24623B8A8DFD2E474F434E3552252FC2926CA37D366C797EB1E0F69412E8926EA702CCFC9E94E286DBE61126107A30A2BE61088526054830D1FA68F4CD287829EC2EAF493F7F1EA4A309833580B6AB489FE4C808F814CB9810C11BA0EFD30F006E03531606D1C1D11ECC20E4530D11D259D27F9C90150753968C132BB36978EB876431CD9474BC6861A8F1E4702BC64ED3CC26D8D4471B93C30111FC53CA9A7F77CC5C1459999D1594BF79177430FF9C4680ACD5B7E53EC2E02C0064702FD87C9F4119F0F50BA9BFAEEFB8E56A4B7E395B363F96382C352F15F308D0D037E92C1A335F92A9D9685475649F3A0CAD95893152E3F256F8C06E9387D7DE06B3259C6E23607C52B49E98503E6575E5F43ABBEA33B1B77968763CDE335A30478C7575C6D545FAFCC4B9AC1511A18964C968CC0847647F2B57F774E1FB163C2576C3A8BFBB47C4FB9D3B5A021FCB3961B8B7D1A3A931827CBB8917F13C15A7E740E3F3DF831C8FE48DC86D5C8920523F19B179017D6853D15ADA15507D5DF6BE67628E9528D920801DBD6A337D2B01BF8DAACE88EBD8763C039DE228851030263367D679EC6CD966777E97BAF18D09C1A15A31C85DBBF1BE809206BC329031966C80A6BFC4F3D0E14919B009FA22A2B4E0B492A4C74544210A39C63E33D2E88F8491ABC788780CEE64E10B09B6A4DBF259D14CF447A4A61D2C9631324377482A59E9645DEC210AA36E100C0F7381ADC03A0C1319CE34DC82D0CAE551FAC3B0461146ABE23A8337B62E565199708C3E0CF55F1014E55D2BCE32803F85DC41B028CB578CA9547D1C1658795525EA870BEEF35AD90AA08F56A6B9E3AD58CA13E9C6738879F0803F1C1DA282BAAF7C019F0C654DC5D5B2D142AB5DC5F0CBAAA3DEADB4A1AD54FBF97DAE76BD0D7197390E56F96A5761011C21EE60E210FB75E9997A4F4EF9914C58543D644F405D59BAD3FC791803D474707BD28ABF57119E1D918F9C2C50365302BCFDD6C7F579444204E3F0A39BA766C0A2B81380FB30F25995ADF22A8F31BD99215E8B3952203FEB53D4531CF72002F7BAFFC82FAC51B3E9E125B533CF9135CD8EEEB7254332A171128CFA40DBB7D9D1CE1789B4BFEE318890811B036060D596EEEA552501F013E3E08E72E2663639A1FC4AD23FE524995E889A0B5CEE167721BA8DED1366671B22A45294E1F72FC1EBF01F0B1CA254666DA8ED45F331E15DFDFF382377D737B20CE7FE9AB6A9F711B71B582AEEA5626977EDFAECC4B73901D4847033D01B764701B4403150AA94CC9E545F4C9CA5C5E6115EE1735F6ED76CB3B17F79FB297B89AAB4375781BF8444017B6C379493BBD510148567CE7E07CD439784F624DA0CF49B9A5C4F8AEB4DDFA0B112F33D8B3D857CE9665D17213C71A168E7EA846CFF1DAFC288A6CE4F06BA32EC324FDB456D880A4980A25C0A7BA13AC05ACC10A6173F17670EC1C736F0CBAA06866C0121014D8AA71189C565F635CE31C2E8CC113737B8510B17C5545121903AC0C4131AA3458B5495373BB39CA33D7F47300ED0B76A7D3FA98AB3CA9ED900034EAC4393C89A73184E2F3BAEFF42F021D05F96F969148CE9E24752828EA8D16D32BA8A55C3D96DFB5A21969B3DDF180A03BDC8995A55484EB06CB323E33300C7C0E6065E2CC248B65C9D23492E74B39BFD043AAB8DA17088887C74C28B245F92ABDB91947FEAB65E63679E6B7FBDB2C2143E83A4B0F933EDB000AC1BEA848E9AF53AE9F70A3AEC1D2E3A746DA023A06E8D7000C19AC9A62660C1C5CC86BD5D38BF657D72BA126CA359A138C280479003FB73B068095B5B8D5CAA9C46B019F010C03FF64C059A3369F1703518B4562BE44EA03017DBDDC2E9689FC3DCBFD4B282BD7E367B3F8AE14C6243D04D01F55126B913530C66467C19AE169273A178E05B15D472B61320D27CBF4AED6EF32D19B36961CCD7A534B164A2F2100BEEFE9B7C8F18092FD74A514A79538555D75173280CBCD8E1D05AE7D2767D4CC011F88DCDE1575EF4CB86633CD38DEE7AB7CD63DFD96BCA54C5974E122DD9AA6405F5625876112000708E979101C7DABDD6496845567E92ED9E759B50F11BCE34B22B87834BE5DF5E6BEDE42D8AA731041919ECB40790BE8DF24D32B695DCA65005067C301ACDA6C3852C4EA44AA15A3969E56C9B404E071DDD3CD66C71BEFE1017E20F1B62CA2EDED77F63EED191DE2F2BD5BCB26F13AF2C2B0B9DCA7C264ECCF3DD70C7D561F904DB91F43CE7B8028F79F777C03C2967DF2F433EBDE3CE641190708A6EBD07259888CE6D5ABB307833E6274656DBEAD9B52EB972BACE38A545C3E8690A8F51CD495A29F540F4F88B2B7EB9ECC66C7D7DEE312E087249FD7D38F24C9A3471E6155514E0AE011E0A7E4EC28E65493D42CCD0D43B50ED67EDE48ABFDE3638919DE31EF623106107651DA230268B532ED8BF344242C985E29DB730E86320959BC12F4074F1104F4C6E05E9456FD6404F8C6F31AF0C54049BA0E671D66A697AB3EDE6D767C45515449C0D7224E4CD3B9E969BFC5DD3527D26D1F1CC8625967C07EC82EA87D83A72EC7E841499771D6FA284AE22C00B3EACD538D83520752F3B11AE93ECA4083E3CB1C39FD2FCCEAD5E75E1E047A0AB7753FD68027F97F047852CF038D412FEF5011277C696CDB2B33ADBF0AF0D744B8954D247A1055B27CA2752FB7EDE534B56E20D513597E37B0CC0A4E7D263E44C01A841E487B3D17D3B462D7888BB279F2AC0B00B8627E17FF9B595AF7E6A5EEF424AECE544AAF7AC7234586497BE81B68B17843C144F84815E0C3C309611D0AD8DC003C92A811FCE119D548081B3FD2AEA6C8B509400AA482EBF5EB9E569B1D6FC020"
    $sData &= "E7B0B6361FAEC48CE4D454135788E72ABCAEA13530CE4F9B0419B889C9DC565E16FB6956501F479DA18FB1D557244C260DC8AA90BAAD4BE8848A1301BDA57B900C84DC705AC47DED16C2452F4526D7070B890EA751E7682E4F2A3069F29C7F3BC71B22D8F8861591A49812ABCA6A71A539C384A83F373BF604DC13A1E7704AD68667B6CDF55D166B5A9CB6B6A3EB85B492B9AA78C0E814E3A5DCFB10FD6026E086F9DDFC6F268908A6B3C18459D7613408148444DC9D1CCA0DA5EE3537982CE5F4561682429E63B0EB7251AC995C5921937E0114028CA1B5AA1FEF1C3B425C6D259A54E84A7D265FF7280BAF00EE005C327065082FCCB8E63D277AA58DE5559EFAF88A5441548320FEC7FA5D1D4F0A1BEBFDD615DA3A2E0E88FF1114994CBB9E7598AA6C54618B78CDA652B32F110C1F78F4DFE1264BCEA2C878614673BF70463947594173E7427ECF3614EA2D59CFD879CFF0E09E9840266B47222CE7ED7E52A4BC441D819FCEAE5F72706BB39A3233A97A8BD893DC17543104F839A878D743891A4B807F08D1E8CBE7535CEB28EADA6262F50017C63809F68AD974969E0EDD51B508F4C6043703C9483A97083BC40D041486A8897F3D031D45B62FCA5F5ACE2F304B4806780619424F967CF4B5610BAC5B5C7F6C828EF9F80915E3009A126B74B1834F0FE2FECDD828894F712DBF7B545E8F3393F8A80C535488812746CEF1B921FADD628CE977FC8F1156BC99F583063544E9283A1E64B35F0AFA0BC90319D8725BF56D7C56766A5DC0A494A0A1D09510A070B9C5AAB7B4DD39DE30F1BA38A33246D7C09781E51CAE71F8CD164DE88C4E4790B26B6EA4CD6E631E2FBF07020C1846D7A1B58670647AE7E4A7C979301BFE698826AFF764E69FCCB0BD35771439294FB4490A57D38642CD4136FB45A0DF0DF07D9764E55E3FD33B952ADDB3F891A7605978E03C5D356A198357AB8EB6DB81AFE0F9BED8D1D4027EF870FCCA458B7A9A950AC849C589B3AAA237AA5A8685C0E07F5EBFF04AE01FC0DC3F751EA0E8C6AD8D1700E03C6F29DCF185BE3341578C226B0B0EC16E4FF09E375154149B9E30E2E3CAF47D078B00F67467683E49AC25A49545CE524C797A6DE2F6733D4E09F8181C5F0C03EE8CE14EAFB8CAFBCE01CCB8E2D72D5A04C31205F148DC83B3FF0DFBBEA39737F2CD01AA0D0FA1F634F4A6B27C0885DBC0F95CCEBC64063CF3D6106D88C036855798A828AE7A5F13E0B8BAF55047C342FE310B7A4358817127F652CDAD132D583D2094E6CB11875F00FCCE92D97ABEF61E3D33DF1A23C7ECB1007EC7AFDF084D0CA41BF13CE306F112E6BECB27F28E8BD99CDB0A52E6CA2D38DE95A527ABC55D95A3D1E8C7247D8A9D5E93F360638061E01B100666B8AEB8F882F7EA2F6186377745A05AB814E342BC74636F6BCE5F1F6FF022672491C917054B8153FE68B4BDC20345AD7764D1AB0A5E27DCD8E47DBDD9F196E2CAB092B1771CCE77792D59223CC6D5CB6DDFD1C31C16F551D34573345E88BAC635802D111EA1674CF54AA13CCFE43DD9CE1345E50FF2A9DF431671062ECEC0D1FD5E33C2D23E3056DAAB7677CCF07EFF7DC1C00CA727D1CB0C20C6E691192FC56DA8D555F94800AE397D7ADEEE626D8A8C1F77AB9EFC76C7830FF79E76080DFAD65DFF8E199700FCAAA3A7A871CC13177B64B50B0223FC96306D59B801E77BB366549AFDB44CBC39FAD535AF240784D3155B1C3AD0782350AAE294DE93C259CCDA76893E3727DE244FB06281251665519B2B708B9C9CAA568836D35D5F031FE194B41F9C81752C1A80F68E3C8EBD50384505C03BF5AE2E8F1E37A91338DC7F7B05E0BECEA3B6DDD74C8D1ACC6201BD4D0B392E596BE921CE7C40FACC15CAE171279DA174EC4211A1450490C13D2F589799DB189ED099CC45719AC92392A356511EEA33228623109CC3CEC59B28A63AB845F9C0D5F07BD5D3EDFC1BAF262B77A1CA5FB23401C5F728B159225843581BC23D119E8CC1138219F72EFE156565C64E0F89BA1B5B6D41AD87CBE07C2A9C1E04F8C1F1A604FC98E2C50C37CCB82E1D1BE72BACF49CBD7ACC3CA7E7CCE584D2798CD5DC4CC4B0FAC261353D11C13280AEA38E199B6160670CDFC767E9DE9C7D2AB1DAE4BDC6FB1C6414EA3B370A958C19818FDA2DC310AF06870D82E83556AE091B342E809E1DFCA7C4B35F410C78036C9973BD65E294CBEDBCE76B000303BCEA8DB2EC2CAB3C1160094FFB56E1E7383D4B81E4F05197EFC68567FCF01E3FACC54F6B7135E568298B52D1FA434458F73DAD4038F71E97CCE104B2D99309C6748CF3D65F45AD31C150B302A773EBD7083A476BA16C83565FCE54BF9849693EAEA293E1F400E019DE7BBE0CFE4C314C6E8DF07CC9C09601BFEAE9779030B294310DFBB23138074ED21CA7F7920A8702FF880B5416C17AF280609309D71218C5F88B12661D80B3E0DA59438FD6E072B7E373003D1BDC1133C69B5350228D70194F43780FF2B2DA9ACA3C11B1067FA1A2F0BC198E832FDE0046F70A39FD103A29D00380670C045CC3F31D03608F2D88B751470BF7F8D64AAE7C50DD54D52F825C6C316B1F98043D03DC595C20ACC05A1B6EF02E2039DA039BDFAD64FFB298F1B701F0D0F774B5DDF1161E9E0C1E7C3554F540721E17CCADFB3A8E4B875855A630BB208D2D28827E01BDDFB8F87862C6D607605B0AEECF2C97566B6536FD5686940CFC16BA968938930F88603B8B91DF44CBED40675D7B5B4E9A9B4ADA6C777C1393BC2783CE54D60CEFC34561CB927B351180B53558D7FEF3757DF5E06C8976A2FB30CFB6F16FC4D379A9D598158DE2EDA78FDE2E7808259E50DFD25E007EEAE589761071C8"
    $sData &= "FBE985AAA64C4F4189EDEA4CA7FC6C92AE115972E2F273082D1FAC573DAD63F42BF6D8CA6E27EFB1F31E571C36817C843A57187000A4D5E87AC63A02394C5D40DE2065A1584A2727DE28E2E2DB42C0D7CC759C58EA9B492B4E930B5138BCE989A0EE0B2A9E6BC5815358FA4E3431F9B402A01174BEDD25EB6D8F50B78FE6546BA82D7ED61006C73F3A8BB487969007459AD12A0AB70E620070397E1AD3217400EE47DC7E1FB0178EB8B959E6C4286CE64F4672CCB681D6BB8401B706C994883365BD099E9E53D952BADC00000534494441545388FA1722532A8CF4C89CC6AD0FFBACA683A71C07BB4F003C10BDF698E198713338CEFB6A1B954A33DD2B280E8AED88DB4F817AB9D5E6ABD1E03D2E6576DF5B452A048BB9F66F72FBE39C5A4C190B690A2E441E4DDACEC1E9FF38ADD1AAA7CF769262044BC20671834CDA3F4B0AE402C0B70B5C1B1C2CAAFF913430E3DA7379ADD7AC60C013108B644D32BE1434057A5F64A864DCF1A8A2E4931330104AED7CF81B2F388DBB37A7CDD8EEDEDF3AB3871C90BC2CA9EFF0A29B555B930ADD53AC0E655A323C2629BAA2F859EE5E64FCE7120726F3335E659545178CABAE819FF58166B25D1DF09FAD58CFC0339EF12F3CE35FBF7E01FFCBC0AFF8F7CCC0F3B396ABCE92F2714669CAC6AF5FD89C9DA10B53D633CECECE70F62CE93FE78AAA82FECFBF4F42067D466CE3DED26FFF2B97F50CA1EECF0C9CFD13623EC7BFB333E0F92CBC797616DBEA19FF0BE0DFD803D7B333FC03E0BFC131939459FC94B067F57D3FF1F3F3C79F84F0567A7EC6F31961F7EB17FCD933FECFD9596E0AF94BCD210F903F9FCFCA38FF10FA5F8CFF07D50773E24D583E0F43ED0A8C9F609C7BC60FE7F123007ECC7E88D011C1588B9531D8F8A84C3937E6FC02F8C1E1C7D4214C9F493BC797C9EFA822E51CA802AB67E1E912716D83E35B5A3E7BC67C35C5D96FCBC085F3D86A691268737EAEBE54CF0B6E3FB738B503E33C4E1D1CA679A1D2C726737D117008142EBB5DF71D0C80CB618007F02471E5BDD79E56F041E43CE3C6306E0B3B3D95168416FE63FB2C027D5CA1F54BE21E405F5E18628627C28DF760435817A6F246ED922C19BF48146B7017767105463EC9E909E14ACCAEC3EF12F05ACEAA2E53904F14F27F0F60DD75B0CCB888408773B8F23327849D0831809DF7D814767B1521E9B36DA15336D12FA1E4F651A451FFFECB2872FD1B062EBCC775A157AAF618354DD51FD6E01E91E34F2E4EE53B60C74F0387D707E6EBE54B094B8546CCCC32E09D0F8E6AD124F915A6608F683A2DF0476A55B6ACAB8EE7117C9596007FB768A1EACBF3EFD711870DE15BCFB8F06127DA88D1B4E0AAC3ACC14367F132C5E9C396366DB1491D9ABDDFEA6984238AF5805022D0C895F60B918B9BC413D5EB48232B439801E5C8C2253C5A4CA5F3C0FE0BB97D4502FE1FCCB8940100342CE582DFF85C98D348A6A7C0953A492486253956876719ABED5528F6ECB9A3B1BF083102F0AFAD41DAA02CBA49713283AAA592EBD31ED1C90C188E085B102C0E3CE578A6CC7F3A0D00E0195B6340E074161380D4009E188E018E727D5391ED8CA9B8F2587A298933C0B51DFBC495D443498EE34E542855AAEE1562E560AC2596F6A1994423D105F457CD093E007A00305853D65DC02E3402A55C3EB6E0489B44DA8AE11D2EBE88ACFE5AB2564E62105253E2A88DC214E7005C63C19E5E223C468E550E93C321BC637ED309117F2C15323D0146CBE7F59FA6BA6F9DC3B973F8F187031E009C0B27318CBD1EB981CD106011AC584BA03B808ED2867F8378F32AAAC59BBE564E47A4A65AEFBFBCACFE5A72D15FDB5883C7FA7A9D91A531CC0062BEDCC7ED370056AF93680AFA1BFB651125F186D425C8C084F13F9C0DE3FE52A0B7880050B87D1C63D95BCBFA1CB69F2D59794E228E36111D3E023EE5EA9DAF403F0024FFF9141AC4996BA8DBF6BE813E4B8470E9F8A3E7B63E2491FC1E1FF7B8B6F78478CC8E18055E01FA0B3EF0B282BF85FE8BE2C2110188A786F15F20971F9B8249331CA147CCE808C175E1E084824BC20D80BBB90134CA5D289B90BE99D4145100FC5F65DEFA0092B58E5B22BC10E1C5105E70C0A9C591E3BF0078A1F829DF09214DF99367C6A47C9A973E7F53A0FF0F493ACA89D56BC8F50000000049454E44AE426082"

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

    Local $hImage = Load_BMP_From_Mem($sData)
    Local $Width = _GDIPlus_ImageGetWidth($hImage)
    Local $Height = _GDIPlus_ImageGetHeight($hImage)

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

    Local $hwnd = GUICreate("Display image from memory", $Width, $Height)
    GUISetState()

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

    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $hGraphics)
    Local $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    _GDIPlus_GraphicsDrawImage($hBackbuffer, $hImage, 0, 0)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Width, $Height)
    #endregion

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

    GUISetOnEvent(-3, "Close")
    GUIRegisterMsg(0x000F, "MY_PAINT")

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

    Do
    Until Not Sleep(5000000)

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

    Func MY_PAINT($hWnd, $msg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $Width, $Height)
    _WinAPI_RedrawWindow($hwnd, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_FRAME))
    Return "GUI_RUNDEFMSG"
    EndFunc ;==>MY_PAINT

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

    Func Close()
    GUIRegisterMsg(0x000F, "")
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hBackbuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>Close

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

    Func Load_BMP_From_Mem($pic) ;coded by UEZ. Thanks to ProgAndy for mem allocation lines
    Local $memBitmap, $len, $tMem, $hImage, $hData, $pData, $hStream, $hBitmapFromStream
    $memBitmap = Binary($pic) ;load image saved in variable (memory) and convert it to binary
    $len = BinaryLen($memBitmap) ;get length of image

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

    $hData = _MemGlobalAlloc($len, 0x0002) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002)
    $pData = _MemGlobalLock($hData) ;translate the handle into a pointer
    $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct
    DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data
    _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE

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

    $hStream = _WinAPI_CreateStreamOnHGlobal($pData) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents
    $hBitmapFromStream = _GDIPlus_BitmapCreateFromStream($hStream) ;Creates a Bitmap object based on an IStream COM interface
    $tMem = ""
    Return $hBitmapFromStream
    EndFunc

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

    Func _WinAPI_CreateStreamOnHGlobal($hGlobal = 0, $fDeleteOnRelease = True)
    Local $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "hwnd", $hGlobal, "int", $fDeleteOnRelease, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[3]
    EndFunc ;==>_WinAPI_CreateStreamOnHGlobal

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

    Func _GDIPlus_BitmapCreateFromStream($pStream)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[2]
    EndFunc ;==>_GDIPlus_BitmapCreateFromStream

    [/autoit]

    Gruß,
    UEZ

    Alles anzeigen


    Bin hier aus zufall draufgestoßen und bin begeistert.
    Unglaublich klasse die Funltion, nur wie sieht es aus, wenn ich png oder gif bilder nach diesem Verfahren zeichnen will(eben wegen dem Alpha Kanal)?

  • GDI+ Draw Strichpunkt

    • Darter
    • 7. Juni 2010 um 01:39

    Moin also dank der Hilfe von einigen hier habe ich die Funktion auf die reihe gebracht und wie der Titel schon sagt soll die Funktion eine Gestrichelte Linie zeichen, was die auch macht aber kucks euch am besten mal an. Horizontale und Vertikale Linien Funktioniert natürlich einwandfrei nur sobald es in eine Neigung geht wird das ding Krumm und Schief und ich weiß nicht warum :-(. Ich hab es auch schon auf nem anderen Weg Probiert und zwar das ganze für jeden Strich neu berechnet aber dann wirds noch unangenehmer. Vllt fällt euch dazu ja was ein.

    Spoiler anzeigen
    [autoit]

    Func Draw_it()
    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hHaupt_GUI_Handle)
    Draw_Strichpunkt(20, 20, 200, 100,10,3,1)
    EndFunc

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

    Func Draw_Strichpunkt($x1, $y1, $x2, $y2, $Abstand = 5, $Laenge = 5, $Dicke = 1, $Farbe = 0xFF000000)
    Local $hPen = _GDIPlus_PenCreate($Farbe, $Dicke)
    Local $iGes = (sqrt(($x2-$x1)^2+($y2-$y1)^2))
    Local $round = 0
    Do
    $iX1 = $x1+(($x2-$x1)/$iGes)*($round*($Abstand+$Laenge))
    $iY1 = $y1+(($y2-$y1)/$iGes)*($round*($Abstand+$Laenge))
    $iX2 = $x1+(($x2-$x1)/$iGes)*((($Laenge+$Abstand)*$round)+$Laenge)
    $iY2 = $y1+(($y2-$y1)/$iGes)*((($Laenge+$Abstand)*$round)+$Laenge)
    $round += 1
    _GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $iX2, $iY2,$hPen)
    MsgBox(0,"","Anfang : " & $iX1 & "|" & $iY1 & " Ende : " & $iX2 & "|" & $iY2)
    Until Round($iX2) >= $x2 And Round($iY2) >= $y2
    MsgBox(0,"","Fertig")
    EndFunc ;==> Draw_Strichpunkt

    [/autoit]
  • Menüitems neu einlesen ohne neustart des scripts?

    • Darter
    • 6. Juni 2010 um 23:13

    geht bei mir wunderbar

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode",1)

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

    $anz = 1
    GUICreate("Menü test",200,200)
    GUISetOnEvent(-3,"_exit")
    Global $Menu1 = GUICtrlCreateMenu("Menü1")
    GUICtrlCreateMenuItem("Menüitem1",$Menu1)
    GUICtrlCreateButton("Menüitem Hinzufügen",45,90)
    GUICtrlSetOnEvent(-1,"Menuitem_add")
    GUICtrlCreateButton("Menü Hinzufügen",55,130)
    GUICtrlSetOnEvent(-1,"Menu_add")
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func Menu_add()
    $Menu2 = GUICtrlCreateMenu("hinz menü")
    EndFunc

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

    Func Menuitem_add()
    $anz += 1
    GUICtrlCreateMenuItem("Menüitem" & $anz,$Menu1)
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • Menüitems neu einlesen ohne neustart des scripts?

    • Darter
    • 6. Juni 2010 um 23:01

    ich mach mich jetzt nicht komplett in das Script verwurschtelt aber hast du es mal mit GUIctrlsetstate() Probiert?

  • Coordinate errechnen

    • Darter
    • 6. Juni 2010 um 22:54

    naja klar zeichnerisch könnte man das schnell lösen aber wie ich geschrieben hab soll das ganze rechnerisch gelöst werden. Von diesem zu errechnenden Punkt habe ich weder x noch y. Was ich alerding habe ist die strecke vom anfangspunkt zu dem zu findenden Punkt. mit der Steigung komme ich ja nur insofren weiter, wenn ich eine Coordinate(x oder y) des zu findenen Punktes habe.

    Um es nochmal klar zu stellen. DIe Strecke von dem Anfangspunkt bis zu dem zu findenen Punkt auf der Gerade ist mir bekannt

  • Splash Ladebildschirm (ähnlich wie bei Office 2010)

    • Darter
    • 6. Juni 2010 um 22:49

    klasse sache habs direkt mal archiviert

  • Coordinate errechnen

    • Darter
    • 6. Juni 2010 um 22:29

    keiner ne idee?

  • Coordinate errechnen

    • Darter
    • 6. Juni 2010 um 19:07

    so jetzt war ich denk ganzen Tag weg und habs jetzt nochmal Probiert. Also klar ist mir jetzt das ich erstmal die Steigung brauch und damit zu jedem x das passende y oder umgekehrt errechnen kann. Aber wie ist es jetzt wenn ich X und Y von einem Punkt auf der Gerade errechnen will.
    Also wissen tu ich immer noch deinen Anfangspunkt, ein Endpunkt und die Strecke von dem Anfangspunkt zu meinem zu bestimmenden Punkt.

    hier nochmal mein schönes Bild ^^


    [Blockierte Grafik: http://s3.directupload.net/images/100606/b2a2uoif.jpg]

  • Coordinate errechnen

    • Darter
    • 6. Juni 2010 um 08:47

    ah klasse. Jetzt kommt solangsam wieder die errinerung an die schöne schülzeit ^^

  • Coordinate errechnen

    • Darter
    • 6. Juni 2010 um 08:22

    omg. die schule ist schon lange her ich versteh grad nur bahnhof. können wir das mal an einem konkreten bsp. auflösen?

    also sagen wir x1 = 0, y1 = 0 und x2 = 50, y2 = 20

    m = (0-20) / (0-50)
    m = -20/-50
    m = -0,4 ??? EDit muss ja Positiv sein, da die steigung ins positive geht oder? also 0,4

    und wie gehts dann jetzt weiter ?

    und bei dem Punkt den ich berechnen will hab ich da keine Coordinate weder x noch y

    EDIT. Was hier noch bekannt ist ist die stecke von punkt 1(anfangspunkt) zu dem zu findenden punkt

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™