MouseOver UDF

  • ich habe im Forum ein Script
    gefunden mit dem man Bilder wechseln kann!
    Aber ich brauche eure Hilfe.

    Hier die UDF

    Spoiler anzeigen


    #include-Once

    ; #INDEX# ===========================================================================================================
    ; Name ...........: Mouse Over
    ; Sprache ........: Deutsch
    ; Beschreibung ...: Funktion zum ändern des Bildes eines Controls(Mouse over).
    ; Author .........: cinema
    ; ====================================================================================================================

    Func _mover($control, $bild1, $bild2)

    $mpos = GUIGetCursorInfo()
    If (IsArray($mpos)) Then
    If ($mpos[4] = $control) Then
    GUICtrlSetImage($control, $bild2)
    Else
    GUICtrlSetImage($control, $bild1)
    EndIf
    EndIf

    EndFunc

    und hier das Beispielscript

    Spoiler anzeigen


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include "_mover.au3"

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 445, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 192, 128, 80, 57, BitOR($BS_BITMAP,$WS_GROUP))
    GUICtrlSetImage(-1, "ok_nact.bmp", -1)
    GUICtrlSetFont(-1, 7, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    Sleep(100)
    _mover($Button1, "ok_nact.bmp","ok_act.bmp")
    WEnd

    ich habe aber kein Button, sondern ein Bild
    Pic1 = bt1.jpg

    Ich möchte, wenn ich den Cursor auf PIC 1 bewege daß
    sich das Bild in bt2.jpg ändert. Welche Pfadangaben muß ich ändern?
    bt2.jpg und bt3.jpg sind im @Script Verzeichnis!
    Und wenn man KLICKT daß dann das Bild bt3.jpg kommt und der Befehl ausgeführt wird!

    Hier mal mein Rohbau:

    [autoit]


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

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

    $Form2 = GUICreate("Form2", 549, 421, 285, 182)
    $Pic1 = GUICtrlCreatePic("C:\bt1.jpg", 58, 34, 153, 149)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Pic1
    EndSwitch
    WEnd

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

    Welches Bild erhält den Case Befehl...?
    Ich bin irgendwie total durcheinander
    und weiß nicht wie ich meine Bilder ansprechen kann
    ...kann nicht mehr klar denken... ?(


    Grüße
    Ilse

  • Hi!


    Zitat

    ...kann nicht mehr klar denken... ?(

    Dann mach eine Kleine Pause!

    Ansprechen:

    $sPic = 'Path+Datei'
    $sPic1 = 'Path+Datei'
    $Pic1 = GUICtrlCreatePic($sPic1, 58, 34, 153, 149)

    Durch die Variablen! ;)

    Lg Kleiner

  • ich habe ein Problem
    mit dem anpassen der udf
    auf meine Bildpfade...
    Wo müssen überhaupt Pfade geändert werden damit diese
    udf funktioniert?

    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\bt1.jpg", -1, 0, 0, 468, 60)

    Ilse ;)

    P.S. du hast Recht, ich mach mal ne Pause! :sleeping:

  • Hallo Ilse,

    du kannst das ganze so lösen:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include "_mover.au3"

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Bild1 = @ScriptDir & "\1.bmp"
    $Bild2 = @ScriptDir & "\2.bmp"
    $Bild3 = @ScriptDir & "\3.bmp"
    $Form1 = GUICreate("Form1", 625, 445, 192, 124)
    $Pic1 = GUICtrlCreatePic($Bild1, 192, 128, 80, 57)
    GUISetOnEvent($GUI_EVENT_CLOSE,"_MyExit")
    GUICtrlSetOnEvent(-1,"_MyClick")
    GUICtrlSetImage(-1, "ok_nact.bmp", -1)
    GUICtrlSetFont(-1, 7, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    _mover($Pic1, $Bild1,$Bild2)
    WEnd

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

    Func _MyClick()
    GUICtrlSetImage($Pic1, $bild3)
    Sleep(1000)
    EndFunc

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

    func _MyExit()
    Exit
    EndFunc

    [/autoit]

    mfg autoBert

  • Hallo autoBert,

    erstmal Danke für dein Beispiel.
    Hab's zum laufen gekriegt.

    Sobald das Form aber den Focus hat
    zittern/flackern meine Bilder.
    Sieht nicht gut aus!
    Hab auch schon einiges im Forum gelesen.
    Bei mehreren Bildern beginnt das große flackern!

    Ich habe dieUDF nun angepasst,
    Jetzt flattert es außerhalb nicht mehr! Nur beim Fokus auf den Button!

    Spoiler anzeigen


    #include-Once

    ; #INDEX# ===========================================================================================================
    ; Name ...........: Mouse Over
    ; Sprache ........: Deutsch
    ; Beschreibung ...: Funktion zum ändern des Bildes eines Controls(Mouse over).
    ; Author .........: cinema
    ; ====================================================================================================================
    $hover = 0
    Func _mover($control, $bild1, $bild2)

    $mpos = GUIGetCursorInfo()
    If (IsArray($mpos)) Then
    If ($mpos[4] = $control) Then
    GUICtrlSetImage($control, $bild2)
    $hover = 1
    Elseif ($mpos[4] <> $control and $hover = 1) Then
    GUICtrlSetImage($control, $bild1)
    $hover = 0
    EndIf
    EndIf

    EndFunc


    Liebe Grüße
    Ilse ;)

    2 Mal editiert, zuletzt von Ilse (11. November 2010 um 17:11)

  • Du könntest die Bilder mit GDI+ oder Quickdraw auf deine GUI zeichnen lassen damit sollte auch das Problem mit dem flackern gelöst werden.

    GDI+ Tutorial: Hier
    Qucikdraw Tutorial: Hier

  • Hallo Ilse,

    ich hätte da mal eine etwas andere Idee:

    Spoiler anzeigen
    [autoit]

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

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

    $PicDir = @ProgramFilesDir & "\AutoIt3\Examples\GUI"
    $Bild1 = $PicDir & "\msoobe.jpg"
    $Bild2 = $PicDir & "\logo4.gif"

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

    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate("Form1", 600, 400, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
    $Pic1 = GUICtrlCreatePic($Bild1, 0, 0, 600, 400) ; das ist das Hintergrundbild!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Pic2 = GUICtrlCreatePic($Bild2, 188, 110, 169, 68) ; das ist das Bild auf das der Cursor reagiert!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    GUISetState(@SW_SHOW)

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

    GUISetOnEvent($GUI_EVENT_RESTORE, "_GUI_Resized")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "_GUI_Resized")
    GUISetOnEvent($GUI_EVENT_RESIZED, "_GUI_Resized")
    GUISetOnEvent($GUI_EVENT_MOUSEMOVE, "_GUI_MouseMoved")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Close")
    Global $GUI_Resized = True

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

    While True
    Sleep(10)
    WEnd

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

    Func _GUI_Close()
    Exit
    EndFunc

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

    Func _GUI_Resized()
    $GUI_Resized = True
    EndFunc

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

    Func _GUI_MouseMoved()
    Static $Hidden = False
    Static $X1 = 0, $Y1 = 0, $X2 = 0, $Y2 = 0
    Local $aCursor = GUIGetCursorInfo()
    Local $X = $aCursor[0], $Y = $aCursor[1]
    If $GUI_Resized Then
    Local $aPic = ControlGetPos($Form1, "", $Pic2)
    $X1 = $aPic[0]
    $Y1 = $aPic[1]
    $X2 = $X1 + $aPic[2] - 1
    $Y2 = $Y1 + $aPic[3] - 1
    $GUI_Resized = False
    EndIf
    If $X >= $X1 And $X <= $X2 And $Y >= $Y1 And $Y <= $Y2 Then
    If Not $Hidden Then
    $Hidden = True
    GUICtrlSetState($Pic2, $GUI_HIDE)
    EndIf
    Else
    If $Hidden Then
    $Hidden = False
    GUICtrlSetState($Pic2, $GUI_SHOW)
    EndIf
    EndIf
    EndFunc

    [/autoit]
  • Hallo Großvater,

    ohhh das sieht toll aus! Nichts flattert!
    Leider blicke ich da noch nicht so ganz durch.

    Was mir noch unklar ist, wie kann man das z.B. mit 3 Buttons machen?
    Und wie kann ich per (Case $Bild?) auf den 3. Button per Klick reagieren?

    1. Button 1 reagiert auf Cursor, verschwindet
    2. dann wird Button 2 sichbar, Bei KLICK auf Button 2...
    3. wird Code von Button 3 ausgeführt

    [autoit]


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

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

    $PicDir = @ProgramFilesDir & "\AutoIt3\Examples\GUI"
    $Bild1 = $PicDir & "\msoobe.jpg"
    $Bild2 = $PicDir & "\logo4.gif"

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

    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate("Form1", 600, 400, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
    $Pic1 = GUICtrlCreatePic($Bild1, 0, 0, 600, 400) ; das ist das Hintergrundbild!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Pic2 = GUICtrlCreatePic($Bild2, 188, 110, 169, 68) ; das ist das Bild auf das der Cursor reagiert!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    GUISetState(@SW_SHOW)

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

    GUISetOnEvent($GUI_EVENT_RESTORE, "_GUI_Resized")
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, "_GUI_Resized")
    GUISetOnEvent($GUI_EVENT_RESIZED, "_GUI_Resized")
    GUISetOnEvent($GUI_EVENT_MOUSEMOVE, "_GUI_MouseMoved")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Close")
    Global $GUI_Resized = True

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

    While True
    Sleep(10)
    WEnd

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

    Func _GUI_Close()
    Exit
    EndFunc

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

    Func _GUI_Resized()
    $GUI_Resized = True
    EndFunc

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

    Func _GUI_MouseMoved()
    Static $Hidden = False
    Static $X1 = 0, $Y1 = 0, $X2 = 0, $Y2 = 0
    Local $aCursor = GUIGetCursorInfo()
    Local $X = $aCursor[0], $Y = $aCursor[1]
    If $GUI_Resized Then
    Local $aPic = ControlGetPos($Form1, "", $Pic2)
    $X1 = $aPic[0]
    $Y1 = $aPic[1]
    $X2 = $X1 + $aPic[2] - 1
    $Y2 = $Y1 + $aPic[3] - 1
    $GUI_Resized = False
    EndIf
    If $X >= $X1 And $X <= $X2 And $Y >= $Y1 And $Y <= $Y2 Then
    If Not $Hidden Then
    $Hidden = True
    GUICtrlSetState($Pic2, $GUI_HIDE)
    EndIf
    Else
    If $Hidden Then
    $Hidden = False
    GUICtrlSetState($Pic2, $GUI_SHOW)
    EndIf
    EndIf
    EndFunc

    [/autoit]


    Viele Grüße
    Ilse ;)

  • Hallo,

    es läßt mir einfach keine Ruhe...
    Ich habe nun mal eine ganz ganz einfache Variante
    (leider noch mit einem kleinen Fehler) am Schluß verschwindet alles....upps

    [autoit]


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

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

    Global $Hoverbild

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

    $Form1 = GUICreate("Form1", 615, 440, 192, 124, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
    $Pic1 = GUICtrlCreatePic("C:\Bild1.jpg", 24, 14, 567, 403)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Pic2 = GUICtrlCreatePic("C:\bt1.jpg", 188, 110, 209, 133)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Pic3 = GUICtrlCreatePic("C:\bt2.jpg", 188, 110, 209, 133)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    GUISetState(@SW_SHOW)

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

    AdlibRegister("_Hover_Label")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Global $Hoverbild = False

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

    Func _Hover_Label()

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

    $pos = GUIGetCursorInfo()
    If $pos[4] = $Pic3 And $Hoverbild = false Then
    GUICtrlSetImage($Pic3, "")
    $Hoverbild = true

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

    ElseIf $pos[4] <> $Pic3 And $Hoverbild = true then
    GUICtrlSetImage($Pic2, "")
    $Hoverbild = False
    endif

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

    EndFunc

    [/autoit]

    Nichts flattert, aber leider bekomme ich das erste Bild nicht wieder....

    Liebe Grüße
    Ilse ;)

  • Hi Ilse,

    probier mal dieses Skript, da dürfte nichts flattern! ;)
    Ausserdem wusste ich nicht ob nach dem anklicken, das 3. Bild dauerhaft bleiben sollte. Habs mal so eingebaut :D

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Opt("GUIOnEventMode", 1)
    Local $Form1 = GUICreate("Form1", 625, 445, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_MyExit")

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

    Local $a_BilderSet1[3] = [ @ScriptDir & "\1.bmp", _
    @ScriptDir & "\2.bmp", _
    @ScriptDir & "\3.bmp"]
    Local $a_BilderSet2[3] = [ @ScriptDir & "\4.bmp", _
    @ScriptDir & "\5.bmp", _
    @ScriptDir & "\6.bmp"]
    Global $a_Picture[1] = [0]
    _ArrayAdd($a_Picture, _CreatePic($a_BilderSet1, 0, 0, 80, 57))
    _ArrayAdd($a_Picture, _CreatePic($a_BilderSet2, 90, 0, 80, 57))
    _ArrayAdd($a_Picture, _CreatePic($a_BilderSet1, 180, 0, 80, 57))
    _ArrayDelete($a_Picture, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    For $i = 0 To UBound($a_Picture) - 1
    $a_Picture[$i] = _MyMouseOver($a_Picture[$i])
    Next
    WEnd

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

    Func _CreatePic($a_PicData, $x, $y, $w, $h)
    _ArrayInsert($a_PicData, 0, 0) ; Reserviert einen Platz für die GUI_CTRLID
    $a_PicData[0] = GUICtrlCreatePic($a_PicData[1], $x, $y, $w, $h)
    _ArrayAdd($a_PicData, 1) ; Speichert die aktuelle Bildnummer
    GUICtrlSetOnEvent($a_PicData[0], "_MyClick")
    GUICtrlSetFont($a_PicData[0], 7, 400, 0, "MS Sans Serif")
    Return $a_PicData
    EndFunc

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

    Func _UpdatePic($a_PicData, $BildNr) ; BildNr beginnt mit 1 für 1. Bild
    If Not ($a_PicData[UBound($a_PicData)-1] = $BildNr) Then
    GUICtrlSetImage($a_PicData[0], $a_PicData[$BildNr])
    $a_PicData[UBound($a_PicData)-1] = $BildNr
    EndIf
    Return $a_PicData
    EndFunc

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

    Func _MyMouseOver($a_PicData)
    Local $mpos = GUIGetCursorInfo()
    If IsArray($mpos) And ($a_PicData[UBound($a_PicData)-1] = 1 Or $a_PicData[UBound($a_PicData)-1] = 2) Then
    If $mpos[4] = $a_PicData[0] Then
    Return _UpdatePic($a_PicData, 2)
    Else
    Return _UpdatePic($a_PicData, 1)
    EndIf
    EndIf
    Return $a_PicData
    EndFunc

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

    Func _MyClick()
    For $i = 0 To UBound($a_Picture) - 1
    $a_temp = $a_Picture[$i]
    If $a_temp[0] = @GUI_CTRLID Then $a_Picture[$i] = _UpdatePic($a_Picture[$i], 3)
    Next
    EndFunc

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

    Func _MyExit()
    Exit
    EndFunc

    [/autoit]
  • Hallo Ilse,

    da bin ich wohl versehentlich im falschen Thread gelandet. Das Skript oben war mehr für diesen bestimmt.

    Für diesen hatte ich mir etwas anderes überlegt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    Dim Const $IMAGE_BITMAP = 0
    Dim Const $STM_SETIMAGE = 0x172

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

    OnAutoItExitRegister("_GUI_Closed")

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

    Dim $PicDir = @ProgramFilesDir & "\AutoIt3\Examples\GUI\Advanced\Images"
    Dim $Pic1 = $PicDir & "\Blue.bmp"
    Dim $Pic2 = $PicDir & "\Red.bmp"
    Dim $Pic3 = $PicDir & "\Green.bmp"
    Dim $hPic1 = _LoadImage($Pic1, 100, 20)
    Dim $hPic2 = _LoadImage($Pic2, 100, 20)
    Dim $hPic3 = _LoadImage($Pic3, 100, 20)

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

    Opt("GUIOnEventMode", 1)

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

    Dim $hGUI = GUICreate("Test", 400, 300)
    GUICtrlCreatePic(@ProgramFilesDir & "\AutoIt3\Examples\GUI\msoobe.jpg", 0, 0, 400, 300)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Dim $idPic = GUICtrlCreatePic("", 20, 20, 100, 20)
    GUICtrlSendMsg(-1, $STM_SETIMAGE, $IMAGE_BITMAP, $hPic1)
    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Closed")
    GUISetOnEvent($GUI_EVENT_MOUSEMOVE, "_GUI_MouseMoved")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_GUI_Clicked")
    GUISetOnEvent($GUI_EVENT_PRIMARYUP, "_GUI_Clicked")

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

    While True
    Sleep(10)
    WEnd

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

    Func KillTooltip()
    AdlibUnRegister("KillTooltip")
    ToolTip("")
    EndFunc ;==>KillTooltip

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

    Func _Btn1_Clicked($ID)
    ToolTip("Aktion nach Klick auf Ctrl ID: " & $ID)
    AdlibRegister("KillTooltip", 1000)
    EndFunc

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

    Func _GUI_Clicked()
    Static $Clicked = False
    Local $aCursor = GUIGetCursorInfo($hGUI)
    If $aCursor[4] <> $idPic Then
    $Clicked = False
    Else
    Switch @GUI_CtrlId
    Case $GUI_EVENT_PRIMARYDOWN
    GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hPic3)
    $Clicked = True
    Case Else
    If $Clicked Then
    GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hPic2)
    _Btn1_Clicked($aCursor[4])
    EndIf
    $Clicked = False
    EndSwitch
    EndIf
    EndFunc ;==>_GUI_Clicked

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

    Func _GUI_MouseMoved()
    Static $Ctrl = 0
    Local $aCursor = GUIGetCursorInfo($hGUI)
    If $aCursor[4] <> $Ctrl Then
    Switch $aCursor[4]
    Case $idPic
    GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hPic2)
    Case Else
    If $Ctrl = $idPic Then
    GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hPic1)
    EndIf
    EndSwitch
    $Ctrl = $aCursor[4]
    EndIf
    EndFunc ;==>_GUI_MouseMoved

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

    Func _GUI_Closed()
    DllCall("Gdi32.dll", "Bool", "DeleteObject", "Handle", $hPic1)
    DllCall("Gdi32.dll", "Bool", "DeleteObject", "Handle", $hPic2)
    DllCall("Gdi32.dll", "Bool", "DeleteObject", "Handle", $hPic3)
    Exit
    EndFunc ;==>_GUI_Closed

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _LoadImage
    ; Description ...: Lädt Bilddateien mit Hilfe von GDIPlus, passt ggf. die Größe an und returniert ein HBITMAP-Handle.
    ; Syntax.........: _LoadImage($PicPath[, $Width = 0[, $Height = 0]]
    ; Parameters ....: $PicPath - Vollständiger Pfad zur Bilddatei
    ; $Width - Gewünschte Breite in Pixeln
    ; |Default - 0 = Originalbreite
    ; $Height - Gewünschte Höhe in Pixeln
    ; |Default - 0 = Originalhöhe
    ; Return values .: Im Erfolgsfall: HBITMAP-Handle
    ; Im Fehlerfall: False, @error wird gesetzt und @extended enthält ggf. zusätzliche Informationen
    ; Author ........: Großvater / http://www.autoit.de
    ; Modified.......:
    ; Remarks .......: Es gehört zum guten Ton, die HBIMAP-Handles vor Beendigung des Programms per DllCall DeleteObject
    ; zu löschen. Ob es wirklich erforderlich ist, ist mir bis heute nicht klar.
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ; ===============================================================================================================================
    Func _LoadImage($PicPath, $Width = 0, $Height = 0)
    Local Const $IMAGE_BITMAP = 0
    Local Const $LR_COPYDELETEORG = 0x00000008
    Local Const $LR_COPYRETURNORG = 0x00000004
    Local $aResult, $hBitmap, $hImage
    Local $hGDIPDll = DllOpen("GDIPlus.dll")
    If $hGDIPDll = -1 Then Return SetError(1, 0, False)
    Local $tInput = DllStructCreate("uint Version;ptr Callback;bool NoThread;bool NoCodecs")
    Local $pInput = DllStructGetPtr($tInput)
    Local $tToken = DllStructCreate("ulong_ptr Data")
    Local $pToken = DllStructGetPtr($tToken)
    DllStructSetData($tInput, "Version", 1)
    $aResult = DllCall($hGDIPDll, "Int", "GdiplusStartup", "Ptr", $pToken, "Ptr", $pInput, "Ptr", 0)
    If @error Then Return SetError(@error, @extended, False)
    GUISetState(@SW_LOCK)
    $aResult = DllCall($hGDIPDll, "Int", "GdipLoadImageFromFile", "WStr", $PicPath, "Ptr*", 0)
    If @error Then
    Local $Error = @error, $Extended = @extended
    DllCall($hGDIPDll, "None", "GdiplusShutdown", "Ptr", DllStructGetData($tToken, "Data"))
    DllClose($hGDIPDll)
    Return SetError($Error, $Extended, False)
    EndIf
    $hImage = $aResult[2]
    $aResult = DllCall($hGDIPDll, "Int", "GdipCreateHBITMAPFromBitmap", "Handle", $hImage, "Ptr*", 0, "DWORD", 0xFF000000)
    $hBitmap = $aResult[2]
    DllCall($hGDIPDll, "Int", "GdipDisposeImage", "Handle", $hImage)
    DllCall($hGDIPDll, "None", "GdiplusShutdown", "Ptr", DllStructGetData($tToken, "Data"))
    DllClose($hGDIPDll)
    If $Width > 0 And $Height > 0 Then
    $aResult = DllCall("User32.dll", "Handle", "CopyImage", _
    "Handle", $hBitmap, "UInt", $IMAGE_BITMAP, "Int", $Width, "Int", $Height, "UInt", $LR_COPYDELETEORG + $LR_COPYRETURNORG)
    $hBitmap = $aResult[0]
    EndIf
    Return $hBitmap
    EndFunc ;==>_LoadImage

    [/autoit]


    Wenn die "Buttons" auch rechteckig sein dürfen, solltest Du Dir das mal anschauen. Die Funktionen nehmen auch Bilddateien entgegen.

    2 Mal editiert, zuletzt von Großvater (12. November 2010 um 13:20)

  • Hallo zusammen,

    also nochmals meinen herzlichen Dank .
    Ich brauche jetzt etwas Zeit um alles mal durchzugehen,
    probieren und verstehen.

    melde mich wieder...

    Liebe Grüße
    Ilse ;)