Weisses Quadrat beim STOP Symbol in der Messagebox entfernen

  • Hallo zusammen

    gibt es eine Möglichkeit das "weisse Quadrat beim STOP Symbol zu entfernen?


    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Gui = GUICreate("Test", 200, 200, -1, -1, -1)
    $icon = GUICtrlCreateIcon("ieframe.dll", 36871, 60, 140, 32, 32)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $button = GUICtrlCreateButton(" " & " STOP", 50, 130, 140, 50,$WS_CLIPSIBLINGS)
    GUICtrlSetFont(-1, 12, 400)
    GUISetState(@SW_SHOW, $Gui)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button
    EndSelect
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von johny1099 (25. Juni 2011 um 17:25)

  • Ich habe versuchsweise mal das Icon ohne den Button eingefügt. Hierbei wird kein weisses Quadrat angezeigt.

    Gibt es nicht eine Möglichkeit ohne Photoshop bzw. Gimpp, da ich das Icon aus einer DLL auftrufe.

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Gui = GUICreate("Test", 200, 200, -1, -1, -1)
    $icon = GUICtrlCreateIcon("ieframe.dll", 36871, 60, 140, 32, 32)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $button = GUICtrlCreateButton(" " & " STOP", 50, 130, 140, 50,$WS_CLIPSIBLINGS)
    $icon = GUICtrlCreateIcon("ieframe.dll",36871,50,30,40,40)
    GUICtrlSetFont(-1, 12, 400)
    GUISetState(@SW_SHOW, $Gui)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button
    EndSelect
    WEnd

    [/autoit]

    MfG
    johny1099

  • AutoIt GUI Controls unterstützen soweit ich weiß, Transparenz nur bedingt bzw. im Fall des Buttons gar nicht. Es gibt die Möglichkeit den Button in eine transparente ChildGUI zu packen und diese über dem Button zu platzieren. Das ist allerdings nicht so einfach. Vielleicht kennt ja jemand noch eine einfachere Methode ;).

  • Hatte mal das gleiche Problem, mir hat es damals genügt den Button einfach weiß zu machen:

    [autoit]

    GUICtrlSetBkColor($button, 0xFFFFFF)

    [/autoit]

    Weiß natürlich nicht wie das in deine GUI passt.

  • Auf welchen Betriebssystem en soll das ganze denn laufen? Ist es OK, wenn auf Windows 2000 das Icon nicht angezeigt wird? Dann kannst du das machen:

    Spoiler anzeigen
    [autoit]

    #include<GUIImageList.au3>
    #include<GUIButton.au3>
    #include<GUIConstantsEx.au3>
    Global $hBtnImages
    OnAutoItExitRegister("_GarbageCollect")

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

    $hBtnImages = _GUIImageList_Create(32, 32, 5, 3, 6)
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36869, True) ; 1 = normal
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36870, True) ; 2 = hot
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36871, True) ; 3 = pressed
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36872, True) ; 4 = disabled
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36884, True) ; 5 = defaultet
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36885, True) ; 6 = stylus hot
    ; Win XP: Markierter Button: 6
    ; Win 7: Markierter Button: Fade zwischen 5 und 6

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

    Opt("GUIOnEventMode", 1)
    $hGUI = GUICreate("test")
    GUISetOnEvent(-3, "_Exit")

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

    ; normal
    $btnStop = GUICtrlCreateButton("STOP", 10, 20, 100, 40)
    _GUICtrlButton_SetImageList($btnStop, $hBtnImages)
    GUICtrlSetTip(-1, "Normal")

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

    ; deaktiviert
    GUICtrlCreateButton("STOP", 10, 70, 100, 40)
    GUICtrlSetState(-1, $GUI_DISABLE)
    _GUICtrlButton_SetImageList(-1, $hBtnImages)
    GUICtrlSetTip(-1, "Disabled")

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

    ; deaktiviert + aktiv
    GUICtrlCreateButton("STOP", 10, 120, 100, 40)
    GUICtrlSendMsg(-1, $BM_SETSTATE, 1, 0)
    GUICtrlSetState(-1, $GUI_DISABLE)
    _GUICtrlButton_SetImageList(-1, $hBtnImages)

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

    ; aktiv
    GUICtrlCreateButton("STOP", 10, 170, 100, 40)
    GUICtrlSendMsg(-1, $BM_SETSTATE, 1, 0)
    _GUICtrlButton_SetImageList(-1, $hBtnImages)

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

    GUISetState()

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

    While Sleep(100)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _GarbageCollect()
    _GUIImageList_Destroy($hBtnImages)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (25. Juni 2011 um 12:23)

  • Guten Morgen progandy

    Ich benötige dieses Script für Windows 7 (Build 7601) 32bit.

    Das ist genau das, was ich gerne haben möchte.

    Wenn ich die Maus auf den 1.Button (von oben) bewege, so ändert das Symbol vom "Aufrufezeichen" zu einem "Fragezeichen". Ebenso habe ich festgestellt wenn ich das Script ausführe (F5) und danach zu einem anderen Programm in der Taskliste wechsle und anschliessend zurück in die GUI wechsle so ändern sich die Symbole von Button 1von alleine.

    Klicke ich auf Button 2 (disabled) passiert nichts. (wahrscheinlich weil der Button disabled ist)

    Klicke ich auf Button 3 passiert ebenfalls nichts.(warum ist mir nicht ganz klar)

    Klicke ich auf Button 4 und verlasse den Button mit dem Mauszeiger, wechseln ebenfalls die Icon's in dem Button.

    Wo wird das Verhalten des "Wechseln der Buttons) gesteuert?

    MfG
    johny1099

  • Button 2 und 3 sind deaktiviert, daher passiert da nichts.
    Die Icons werden durch die Imagelist festgelegt, Ich habe sogar dazugeschrieben, wann sie angezeigt werden.
    Bei Win7 wechselt ein Fokussierter Button zwischen "defaultet" und "stylus hot", bei XP hat ein fokussierter Button den Zustand "stylus hot".

  • Hier noch eine Alternative:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    $Gui = GUICreate("Test", 200, 200, -1, -1, -1)
    $hBmp = _WinAPI_CreateBitmapFromIcon(@SystemDir & "\ieframe.dll", 61, 32, 32)
    $button = GUICtrlCreateButton(" " & " STOP", 50, 130, 140, 50,$WS_CLIPSIBLINGS)
    GUICtrlSetFont(-1, 12, 400)
    GUISetState(@SW_SHOW, $Gui)
    _WinAPI_DeleteObject(GUICtrlSendMsg($button, $BM_SETIMAGE, $IMAGE_BITMAP, $hBmp))
    _WinAPI_DeleteObject($hBmp)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button
    EndSelect
    WEnd

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

    Func _WinAPI_CreateBitmapFromIcon($file, $iIndex = 0, $iW = 16, $iH = 16)
    If FileExists($file) Then
    Local $aRet, $hIcon, $hBitmap
    Local $hDC, $hBackDC, $hBackObj

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

    $aRet = DllCall("shell32", "long", "ExtractAssociatedIcon", "int", 0, "str", $file, "word*", $iIndex)
    If @error Then Return SetError(@error, @extended, 0)
    $hIcon = $aRet[0]

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

    $hDC = _WinAPI_GetDC(0)
    $hBackDC = _WinAPI_CreateCompatibleDC($hDC)
    $hBitmap = _WinAPI_CreateSolidBitmap(0, _WinAPI_GetSysColor($COLOR_MENU), $iW, $iH)
    $hBackObj = _WinAPI_SelectObject($hBackDC, $hBitmap)
    _WinAPI_DrawIconEx($hBackDC, 0, 0, $hIcon, $iW, $iH, 0, 0, 3)
    _WinAPI_DestroyIcon($hIcon)

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

    _WinAPI_SelectObject($hBackDC, $hBackObj)
    _WinAPI_ReleaseDC(0, $hDC)
    _WinAPI_DeleteDC($hBackDC)
    Return $hBitmap
    Else
    Return SetError(1, 0, 0)
    EndIf
    EndFunc ;==>_WinAPI_CreateBitmapFromIcon

    [/autoit]

    Getestet auf Win7 x64 + Aero.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hallo progandy

    $hBtnImages = _GUIImageList_Create(32, 32, 5, 3, 6)

    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36869, True) ; 1 = normal
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36870, True) ; 2 = hot
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36871, True) ; 3 = pressed
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36872, True) ; 4 = disabled
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36884, True) ; 5 = defaultet
    _GUIImageList_AddIcon($hBtnImages, "ieframe.dll", -36885, True) ; 6 = stylus hot

    Frage:

    1. steht die 2=hot für die Aktion wenn man mit der Maus auf den Button fährt?
    2. defaultet ==> wann kommt das zum Zug und was bedeutet dies?
    3. stylus hot ==> Was bedeutet das?

    Sorry aber ich verstehe folgenden Text nicht:

    Bei Win7 wechselt ein Fokussierter Button zwischen "defaultet" und "stylus hot", bei XP hat ein fokussierter Button den Zustand "stylus hot".


    MfG
    johny1099

  • 1. steht die 2=hot für die Aktion wenn man mit der Maus auf den Button fährt?

    Richtig.

    2. defaultet ==> wann kommt das zum Zug und was bedeutet dies?

    Wenn man den Button mit BS_DEFBUSHPUTTON erstellt (Ein Druck auf Enter irgendwo auf der GUI wird an diesen Button gesendet)

    3. stylus hot ==> Was bedeutet das?

    Das ist anscheinend für Tablet-PCs mit Stifteingabe gedacht. Aber bei normalen PCs wird es auf jeden Fall für den Zustand "ausgewählt" verwendet. Das heißt, der Button ist z.B: per Pfeiltasten/Tab asugewählt, sodass er Tastatureingaben wie Leertaste oder Enter erhält.

    Bei Win7 wechselt ein Fokussierter Button zwischen "defaultet" und "stylus hot", bei XP hat ein fokussierter Button den Zustand "stylus hot".

    Bei Win7 ist dieser "ausgewählte" Zustand nicht mehr nur ein Bild, sondern wechselt periodisch zwischen den zwei genannten Bildern.

  • vielen Dank für die Geduld und detaillierte Beantwortung meiner Fragen

    Ich werde wohl noch ein bischen weiter "experimentieren" müssen, um das alles richtig verstehen zu können :thumbup:

    MfG
    johny1099