GUICtrlCreateInput - Transparenter Hintergrund / Hintergrundbild

  • Hi!
    Ich möchte mit GUICtrlCreateInput ein Eingabefeld mit einem transparentem Hintergrund, oder einem Hintergrundbild erstellen.
    Gibt es eine Möglichkeit dies zu realisieren?
    Vorab schon einmal vielen Dank für eure Hilfe!

  • Ich glaube Du hast mein Problem nicht richtig verstanden.
    Falls doch:
    Könntest Du mir ein Beispiel zeigen, wie ich es mit diesen Befehlen lösen soll?

  • Mein Code schaut momentan so aus:
    GUICtrlCreateInput("Text", 14, 129, 300, 35, default, $WS_EX_TRANSPARENT)
    Damit werden schone einmal die Ränder entfernt.

    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    Funktioniert jedoch nicht mit GUICtrlCreateInput.

    Ich möchte ganz einfach diesen (normalerweise weißen) Hintergrund entfernen.

  • Danke für deine Antwort Stilgar!
    Das war jedoch genau die Funktion, welche ich Dir gestern über ICQ geschickt habe.
    Damit wird nämlich auch die Schrift transparent, was in meinem Fall nicht gewünscht ist.

    Gibt es eine Möglichkeit das zu umgehen?

    • Offizieller Beitrag

    Meinst du sowas?

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    Global $aCtrl[2]

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

    $gui = GUICreate("", 150, 50, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
    $aCtrl[0] = GUICtrlCreateInput("", 0, 0, 150, 20)
    $aCtrl[1] = GUICtrlCreateButton('Ende', 100, 30, 50, 20)
    GUISetState(@SW_SHOW)

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

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

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $aCtrl[1]
    ExitLoop
    EndSwitch
    WEnd

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

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

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

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

    [/autoit]
  • :)
    BugFix :
    Leider nicht.
    Ich möchte den Hintergrund des Inputfeldes entfernen, oder zumindest ein Hintergrundbild festlegen können.

  • Ich hätte da eine Kompromiss-Lösung. Während des Eingebens ist das Eingabefeld zu sehen, danach nicht mehr.

    Spoiler anzeigen
    [autoit]

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

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

    GUICreate("Quasi-Transparentes Input-Control", 300, 300)
    GUISetOnEvent(-3, '_Ende')

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

    Global $hInput = GUICtrlCreateInput('', 20, 20, 260, 20, 0x200)
    GUICtrlSetOnEvent( -1, '_Copy')

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

    GUICtrlCreatePic(@DocumentsCommonDir&'\Eigene Bilder\Beispielbilder\Sonnenuntergang.jpg', 0, 0, 300, 300, 0)

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

    Global $hLabel = GUICtrlCreateLabel('', 20, 20, 260, 20, 0x200)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    GUISetState()

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

    While 1
    Sleep(10000)
    WEnd

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

    Func _Copy()
    GUICtrlSetData($hLabel, ' '&GUICtrlRead($hInput))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

    [/autoit]
  • Ai, das schaut doch schonmal sehr gut aus :)
    Obwohl ich das Skript noch ein wenig studieren muss :P

  • So sieht's besser aus

    Spoiler anzeigen
    [autoit]

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

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

    GUICreate("Quasi-Transparentes Input-Control", 300, 300)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, 'MY_WM_NOTIFY')

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

    Global $hInput = GUICtrlCreateInput('', 20, 20, 260, 20, 0x200)
    GUICtrlCreatePic(@DocumentsCommonDir&'\Eigene Bilder\Beispielbilder\Sonnenuntergang.jpg', 0, 0, 300, 300, 0)
    Global $hLabel = GUICtrlCreateLabel('', 20, 20, 260, 20, 0x200, 0x00000008)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    Global $hInput2 = GUICtrlCreateInput('', 20, 80, 260, 20, 0x200)
    GUISetState()

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

    While 1
    Sleep(10000)
    WEnd

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

    Func _Copy()
    GUICtrlSetData($hLabel, ' '&GUICtrlRead($hInput))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func MY_WM_NOTIFY($hWnd, $msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    If $nID = $hInput Then _Copy()
    EndFunc

    [/autoit]
  • Könntest Du mich vllt. einmal bei ICQ hinzufügen?
    Meine Nummer steht im Profil.
    Wäre Dir sehr dankbar.