Hey Leute,
ich habe vor die Oberfläche eines kleinen Programms, das ich geschrieben habe, hübscher zu gestalten.
Nun habe ich mit dem Entwurf für schwebende Buttons gespielt und mir Buttons auf eine halb-transparente Oberfläche gezaubert.
Der gleiche Trick funktioniert jedoch nicht mit Labels, wenigstens nicht wie erhofft. Hier sieht man das Label mit Hintergrund und nicht nur die Schrift, was die Labels recht hässlich macht.
Der Stil $GUI_BKCOLOR_TRANSPARENT hilft da nicht.
Unter den Buttons will ich eine Labels und Bilder anzeigen. Da die Labels so hässlich sind, habe ich das jetzt auf einer schwarzen Hintergrundfläche gemacht.
Gerne würde ich das aber halbtransparent haben.
Ich habe hier einen ausführbaren Ausschnitt mit einigen Pseudo-Inhalten erstellt.
Das Fenster wird eingeblendet, wenn man an den Mauscursor an den rechten Rand bewegt.
Meine Probleme:
Ich würde die Logos und Labels gerne direkt auf den "transparenten" Untergrund bekommen, ohne dass sie natürlich auch transparent werden. Wie geht das?
Warum werden die Labels erst nach dem Einblenden angezeigt? Hier funktioniert das @SW_LOCK nicht wie gedacht. Warum?
Hier der Code:
Spoiler anzeigen
#include <GUIConstants.au3>
#include <WinAPI.au3>
Local $gui_Umschalter_4, $iReactPosOld, $iReactPosOld, $hBouquetsGUI, $hGUI
Global $Bouquetsliste[37][2] = [["", "Eintrag 1"], _
["", "Eintrag 2"], _
["", "Eintrag 3"], _
["", "Eintrag 4"], _
["", "Eintrag 5"], _
["", "Eintrag 6"], _
["", "Eintrag 7"], _
["", "Eintrag 8"], _
["", "Eintrag 9"], _
["", "Eintrag 10"], _
["", "Eintrag 11"], _
["", "Eintrag 12"], _
["", "Eintrag 13"], _
["", "Eintrag 14"], _
["", "Eintrag 15"], _
["", "Eintrag 16"], _
["", "Eintrag 17"], _
["", "Eintrag 18"], _
["", "Eintrag 19"], _
["", "Eintrag 20"], _
["", "Eintrag 21"], _
["", "Eintrag 22"], _
["", "Eintrag 23"], _
["", "Eintrag 24"], _
["", "Eintrag 25"], _
["", "Eintrag 26"], _
["", "Eintrag 27"], _
["", "Eintrag 28"], _
["", "Eintrag 29"], _
["", "Eintrag 30"], _
["", "Eintrag 31"], _
["", "Eintrag 32"], _
["", "Eintrag 33"], _
["", "Eintrag 34"], _
["", "Eintrag 35"], _
["", "Eintrag 36"]]
Local $iBouquets = UBound($Bouquetsliste)
_Umschalter_4()
Func _Umschalter_4()
Global $aButton[$iBouquets + 1], $aLabel[16]
Local $Exist = "", $iLastButton = ""
$hBouquetsGUI = GUICreate("", 475, @DesktopHeight - 100, @DesktopWidth - 480, 20, $WS_POPUP, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
GUISetBkColor(0x252525, $hBouquetsGUI)
WinSetTrans($hBouquetsGUI, "", 100)
$gui_Umschalter_4 = GUICreate("", 455, @DesktopHeight - 310, 15, 200, $WS_POPUP, $WS_EX_MDICHILD + $WS_EX_TOPMOST, $hBouquetsGUI)
GUISetBkColor(0x252525)
For $i = 0 To 15
$aLabel[$i] = GUICtrlCreateLabel($Bouquetsliste[$i][1], 5, 15 * $i, 250, 12)
GUICtrlSetBkColor($aLabel[$i], 0x464646)
Next
$hGUI = GUICreate("", 460, 250, 10, 10, $WS_POPUP, $WS_EX_MDICHILD + $WS_EX_TOPMOST, $hBouquetsGUI)
$iButtonPosition = 0
$sPosResetOld = 0
If $iBouquets >= 15 Then
$iLastButton = 15
Else
$iLastButton = $iBouquets
EndIf
For $i = 0 To $iLastButton - 2 Step 3
$sPosReset = StringLeft($i / 12, 1)
$aButton[$i] = GUICtrlCreateButton($Bouquetsliste[$i][1], 5, $iButtonPosition + 20, 145, 20)
If $i + 1 < $iBouquets Then $aButton[$i + 1] = GUICtrlCreateButton($Bouquetsliste[$i + 1][1], 160, $iButtonPosition + 20, 145, 20)
If $i + 2 < $iBouquets Then $aButton[$i + 2] = GUICtrlCreateButton($Bouquetsliste[$i + 2][1], 315, $iButtonPosition + 20, 145, 20)
If $sPosReset = $sPosResetOld Then
$iButtonPosition += 25
Else
$iButtonPosition = 0
$sPosResetOld = $sPosReset
EndIf
Next
If $iBouquets > 14 Then
For $i = 0 To $iBouquets - 2
GUICtrlSetState($aButton[$i], $GUI_HIDE)
Next
For $i = 0 To 14
GUICtrlSetState($aButton[$i], $GUI_SHOW)
Next
$aButton[$iBouquets] = GUICtrlCreateButton("Weitere", 215, 160, 200)
EndIf
$aButton[$iBouquets - 1] = GUICtrlCreateButton("Beenden", 5, 160, 200)
GUISetState(@SW_SHOW, $gui_Umschalter_4)
GUISetState(@SW_SHOWNA, $hBouquetsGUI)
GUISetState(@SW_SHOW, $hGUI)
_GuiHole($hGUI, 0, 0, 0, 0)
GUISetState(@SW_LOCK, $hGUI)
GUISetState(@SW_LOCK, $gui_Umschalter_4)
WinMove($hBouquetsGUI, "", @DesktopWidth, 20, 680, @DesktopHeight - 100, 1)
GUISetState(@SW_LOCK, $gui_Umschalter_4)
GUISetState(@SW_UNLOCK, $hGUI)
$iBouquetsPosMax = ($iBouquets - 2) / 15
If Number(StringReplace($iBouquetsPosMax, ".", ",")) < $iBouquetsPosMax Then
$iBouquetsPosMax = Round($iBouquetsPosMax + 1)
Else
$iBouquetsPosMax = Round($iBouquetsPosMax)
EndIf
$pos = WinGetPos($hGUI)
$iBouquetsPos = 0
While Sleep(10)
$msg = GUIGetMsg()
Pos()
Switch $msg
Case $aButton[$iBouquets - 1]
Exit
Case $aButton[$iBouquets]
If $iBouquetsPos < $iBouquetsPosMax Then
$iBouquetsPos += 1
Else
$iBouquetsPos = 1
EndIf
For $i = 0 To $iBouquets - 2
GUICtrlSetData($aButton[$i], "")
Next
If $iBouquetsPos < $iBouquetsPosMax - 1 Then
For $i = 0 To 14 Step 3
GUICtrlSetData($aButton[$i], $Bouquetsliste[$iBouquetsPos * 15 + $i][1])
If $iBouquetsPos * 15 + $i + 1 < $iBouquets - 2 Then GUICtrlSetData($aButton[$i + 1], $Bouquetsliste[$iBouquetsPos * 15 + $i + 1][1])
If $iBouquetsPos * 15 + $i + 1 < $iBouquets - 2 Then GUICtrlSetData($aButton[$i + 2], $Bouquetsliste[$iBouquetsPos * 15 + $i + 2][1])
Next
EndIf
If $iBouquetsPos = $iBouquetsPosMax - 1 Then
For $i = 0 To 14 Step 3
GUICtrlSetData($aButton[$i], $Bouquetsliste[$iBouquets - 16 + $i][1])
GUICtrlSetData($aButton[$i + 1], $Bouquetsliste[$iBouquets - 16 + $i + 1][1])
GUICtrlSetData($aButton[$i + 2], $Bouquetsliste[$iBouquets - 16 + $i + 2][1])
Next
EndIf
If $iBouquetsPos = $iBouquetsPosMax Then
For $i = 0 To 14 Step 3
GUICtrlSetData($aButton[$i], $Bouquetsliste[$i][1])
GUICtrlSetData($aButton[$i + 1], $Bouquetsliste[$i + 1][1])
GUICtrlSetData($aButton[$i + 2], $Bouquetsliste[$i + 2][1])
Next
EndIf
Case $aButton[0] To $aButton[$iBouquets - 2]
If $Exist = 1 Then WinGetHandle($gui_Umschalter_4)
$Exist = 1
$gui_Umschalter_4 = GUICreate("", 455, @DesktopHeight - 500, 13, (@DesktopHeight - (@DesktopHeight - 500)) / 2, $WS_POPUP, $WS_EX_MDICHILD, $hBouquetsGUI)
GUISetBkColor(0x252525, $gui_Umschalter_4)
GUICtrlSetDefColor(0x252525, $gui_Umschalter_4)
GUICtrlCreateLabel(GUICtrlRead($msg) & ' geklickt', 10, 10, 435, 30)
GUICtrlSetColor(-1, 0xFFFFFF)
GUISetState(@SW_SHOWNA, $gui_Umschalter_4)
EndSwitch
WEnd
EndFunc ;==>_Umschalter_4
Func Pos()
Local $aPos = MouseGetPos()
$iReactPos = @DesktopWidth - $aPos[0]
If $iReactPos < 5 And $iReactPosOld > 5 Then
GUISetState(@SW_LOCK, $hGUI)
GUISetState(@SW_LOCK, $gui_Umschalter_4)
WinMove($hBouquetsGUI, "", @DesktopWidth - 480, 20, 475, @DesktopHeight - 100, 2)
$iReactPosOld = $iReactPos
GUISetState(@SW_UNLOCK, $hGUI)
GUISetState(@SW_UNLOCK, $gui_Umschalter_4)
EndIf
If $iReactPosOld < 5 And $iReactPos > 480 Then
GUISetState(@SW_LOCK, $hGUI)
GUISetState(@SW_LOCK, $gui_Umschalter_4)
WinMove($hBouquetsGUI, "", @DesktopWidth, 20, 480, @DesktopHeight - 100, 2)
$iReactPosOld = $iReactPos
GUISetState(@SW_UNLOCK, $hGUI)
GUISetState(@SW_UNLOCK, $gui_Umschalter_4)
EndIf
EndFunc ;==>Pos
Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
Local $outer_rgn, $inner_rgn, $combined_rgn
$combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_DeleteObject($outer_rgn)
_WinAPI_DeleteObject($inner_rgn)
_AddCtrlRegion($combined_rgn, $aButton)
_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc ;==>_GuiHole
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($hGUI, "", $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($hGUI, "", $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
Alles anzeigen
Ich bin euch wie immer für jede Hilfe und Kritik dankbar