Hallo allerseits,
ich bräuchte mal die freundlcihe Unterstützung unserer GUI xperten. Ich habe eine transparente Eingabe GUI erstellt, die beim Verschieben die Position speichert. Soweit so gut. Bei ersten öffnen soll die GUI aber (also wenn noch keine INI Datei existiert relativ am unteren Bildschirmrand mittig sein, irgendwi3 klappt das noch nicht. Vielleicht sieht ja jemand den Fehler.
AutoIt
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WINAPI.au3>
#include <sendmessage.au3>
#include <GuiConstants.au3>
#NoTrayIcon
HotKeySet("ESC", "_Exit")
Global $ConfigFile = StringTrimRight(@ScriptFullPath, 3) & "ini"
;Create GUI
$GUI = GUICreate("Test", 400, 40, 600, 40, $WS_POPUP, $WS_EX_LAYERED)
if not FileExists($ConfigFile) Then ;kein configfile
_StandardPos()
endif
_GUIRestorePositions($GUI, $ConfigFile)
GUISetBkColor(0xABCDEF)
;Create Boxes
Local $cmb01 = GUICtrlCreateCombo('', 10, 10, 150, 20)
Local $cmb02 = GUICtrlCreateCombo('', 170, 10, 50, 20)
Local $cmb03 = GUICtrlCreateCombo('', 230, 10, 50, 20)
Local $cmb04 = GUICtrlCreateCombo('', 290, 10, 200, 20)
_WinAPI_SetLayeredWindowAttributes($GUI, 0xABCDEF, 250)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_GUISavePositions($GUI, $ConfigFile)
Exit
Case $GUI_EVENT_PRIMARYDOWN
_SendMessage($GUI, $WM_SYSCOMMAND, 0xF012, 0)
EndSwitch
WEnd
Func _Exit()
Exit
EndFunc
Func _GUISavePositions($hGUI, $sConfigFile, $sSectName="Window Positions")
Local $aGUI_Pos = WinGetPos($hGUI)
If @error Then Return 0
IniWrite($sConfigFile, $sSectName, "Left", $aGUI_Pos[0])
IniWrite($sConfigFile, $sSectName, "Top", $aGUI_Pos[1])
IniWrite($sConfigFile, $sSectName, "Width", $aGUI_Pos[2])
IniWrite($sConfigFile, $sSectName, "Height", $aGUI_Pos[3])
Return 1
EndFunc
Func _GUIRestorePositions($hGUI, $sConfigFile, $sSectName="Window Positions", $iDefWidth=700, $iDefHeight=40)
Local $iGUI_Left = IniRead($sConfigFile, $sSectName, "Left", -1)
Local $iGUI_Top = IniRead($sConfigFile, $sSectName, "Top", -1)
Local $iGUI_Width = IniRead($sConfigFile, $sSectName, "Width", $iDefWidth)
Local $iGUI_Height = IniRead($sConfigFile, $sSectName, "Height", $iDefHeight)
If $iGUI_Left = -1 Then $iGUI_Left = (@DesktopWidth / 2) - ($iGUI_Width / 2)
If $iGUI_Top = -1 Then $iGUI_Top = (@DesktopHeight / 2) - ($iGUI_Height / 2)
Return WinMove($hGUI, "", $iGUI_Left, $iGUI_Top, $iGUI_Width, $iGUI_Height)
EndFunc
Func _StandardPos()
; Get screen dimensions
Local $iScreenWidth = @DesktopWidth
Local $iScreenHeight = @DesktopHeight
;Calculate window position (centered horizontally, positioned from the bottom)
Local $iWindowWidth = 800
Local $iWindowHeight = 40
Local $iWindowX = ($iScreenWidth - $iWindowWidth) / 2
Local $iWindowY = $iScreenHeight - $iWindowHeight - 3; Adjust 50 to change the gap from the bottom
EndFunc
Alles anzeigen
Danjke schon mal
lg und ein frohes Fest