Guten tag zusammen
könnte mir jemand sagen wie ich ein GUI unsichtbar mache, jedoch die Button noch sichtbar. Bzw die GUI nur einem bestimmten Prozentsatz sichtbar?
danke
GUI unsichtbar button sochtbar
-
- [ offen ]
-
moritz1243 -
20. Januar 2009 um 15:19 -
Geschlossen -
Erledigt
-
-
Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>Global $aButton[5]
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-170, -1, $WS_POPUP, $WS_EX_TOPMOST)
[/autoit] [autoit][/autoit] [autoit]
$aButton[0] = GUICtrlCreateButton("Button 1", 0, 0, 150)
$aButton[1] = GUICtrlCreateButton("Button 2", 0, 30, 150)
$aButton[2] = GUICtrlCreateButton("Button 3", 0, 60, 150)
$aButton[3] = GUICtrlCreateButton("Button 4", 0, 90, 150)
$aButton[4] = GUICtrlCreateButton("Exit", 0, 120, 150)
GUISetState(@SW_SHOW)$pos = WinGetPos($gui)
[/autoit] [autoit][/autoit] [autoit]
_GuiHole($gui, 0, 0, 150, 150)While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Switch $msg
Case $aButton[4]
ExitLoop
Case $aButton[0]
MsgBox(0, '', 'Button1 geklickt')
Case $aButton[1]
MsgBox(0, '', 'Button2 geklickt')
Case $aButton[2]
MsgBox(0, '', 'Button3 geklickt')
Case $aButton[3]
MsgBox(0, '', 'Button4 geklickt')
EndSwitch
WEndFunc _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_GuiHoleFunc _AddCtrlRegion($full_rgn, $ctrl_id)
[/autoit]
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 ;==>_AddCtrlRegionSo? Hat Bugfix mal gemacht.
-
Danke
kannst du mir auch noch eben die Zeilen nenne die dafür sorgen ein unsichbare GUI zu erstellen -
Ich denke das ist die Funktion die in Zeile 15 aufgerufen wird.
[autoit]_GuiHole($gui, 0, 0, 150, 150)
[/autoit] -
Jep und in der Funktion sind das die wichtigen Sachen (den Rest kannste raushauen)
[autoit]
[/autoit]
Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
Local $combined_rgn
$combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0) ; Hier erstellst du eine 'region' mit 0 Pixel² Größe'
_AddCtrlRegion($combined_rgn, $aButton) ; um die Controls (Buttons) hinzuzufügen
_WinAPI_SetWindowRgn($h_win, $combined_rgn) ;und hier weist du der Gui diese Region zu
EndFunc ;==>_GuiHole -
Was mache ich falsch?
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>Global $hGUI, $hImage, $hGraphic, $hImage1
[/autoit] [autoit][/autoit] [autoit]; Create GUI
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("Show PNG", 1000, 800)
GUISetState() ;Muss vor den Ladevorgang; Load PNG image
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile("C:\Dokumente und Einstellungen\Hendrik\Favoriten\Eigene Dateien\AutoIt\INC\Pic\Neu\MAIN.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImage ($hGraphic, $hImage, 100, 100)
_GDIPlus_ShutDown()
_GuiHole($hGUI, 0, 0, 150, 150,$hGraphic)do
[/autoit] [autoit][/autoit] [autoit]
until GUIGetMsg() = $GUI_EVENT_CLOSEFunc _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh,$hObjekt)
[/autoit] [autoit][/autoit] [autoit]
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, $hObjekt)
_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc ;==>_GuiHoleFunc _AddCtrlRegion($full_rgn, $ctrl_id)
[/autoit]
Local $ctrl_pos, $ctrl_rgn
If IsArray($ctrl_id) Then
For $i = 0 To UBound($ctrl_id) -1
$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)
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 -
Also ich weiß jetzt das Pprolem, ud zwas ist
_GDIPlus_GraphicsCreateFromHWND($hGUI)
kein normales Objekt, und damit hat er probleme, wie soll ich das jetzt machen? -
- Offizieller Beitrag
Du willst nur die Button? - Das Bsp. ist doch (fast so) in der Hilfe:
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <WinAPI.au3>; get height of window title and width of window frame - may be different when XP theme is ON/OFF
[/autoit] [autoit][/autoit] [autoit]
Global $htit = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
Global $frame = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME)$gui = GUICreate("Test Windows regions", 350, 210)
[/autoit] [autoit][/autoit] [autoit]
$btn_1 = GUICtrlCreateButton("Button 1", 100, 30, 150)
$btn_2 = GUICtrlCreateButton("Button 2", 100, 60, 150)
$btn_3 = GUICtrlCreateButton("Button 3", 100, 90, 150)
$btn_4 = GUICtrlCreateButton("Button 4", 100, 120, 150)
$btn_exit = GUICtrlCreateButton("Exit", 100, 150, 150)
GUISetState(@SW_SHOW)_GuiHole($gui, 0, 0, 350, 210)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit
ExitLoop
Case $msg = $btn_1
MsgBox(0, 'Klick', 'Button 1')
Case $msg = $btn_2
MsgBox(0, 'Klick', 'Button 2')
Case $msg = $btn_3
MsgBox(0, 'Klick', 'Button 3')
Case $msg = $btn_4
MsgBox(0, 'Klick', 'Button 4')
EndSelect
WEndFunc _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
[/autoit] [autoit][/autoit] [autoit]
Local $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_AddCtrlRegion($combined_rgn, $btn_1)
_AddCtrlRegion($combined_rgn, $btn_2)
_AddCtrlRegion($combined_rgn, $btn_3)
_AddCtrlRegion($combined_rgn, $btn_4)
_AddCtrlRegion($combined_rgn, $btn_exit)
_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc ;==>_GuiHoleFunc _AddCtrlRegion($full_rgn, $ctrl_id)
[/autoit]
Local $ctrl_pos, $ctrl_rgn
$ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0] + $frame, $ctrl_pos[1] + $htit + $frame, _
$ctrl_pos[0] + $ctrl_pos[2] + $frame, $ctrl_pos[1] + $ctrl_pos[3] + $htit + $frame)
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
EndFunc ;==>_AddCtrlRegion -
Danke, ich hab das Problem schon gelöst^^ ich hab anstat ControlGetPos einfach die pos hingeschreiben^^