Hallo zusammen,
ich möchte ein kleines Programm mit GUI erstellen und möchte darin eine Menü- & Statusleiste einbauen.
Wenn ich das Beispiel 1 aus der Hilfe (_GUICtrlStatusBar_SetText) verwende, dann wird die Statusleiste korrekt anzeigt (siehe Bild1).
Spoiler anzeigen
#include <GuiConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$Debug_SB = False ; Prüft den Klassennamen (ClassName), der an die StatusBar-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.
[/autoit] [autoit][/autoit] [autoit]Global $iMemo
[/autoit] [autoit][/autoit] [autoit]Beispiel1()
[/autoit] [autoit][/autoit] [autoit]Func Beispiel1()
[/autoit] [autoit][/autoit] [autoit]Local $hGUI, $hIcons[2], $hStatus
Local $aParts[4] = [75, 150, 300, 400]
; Erstellt eine GUI
$hGUI = GUICreate("StatusBar: Text setzen (Beispiel 1)", 400, 300)
$hStatus = _GUICtrlStatusBar_Create($hGUI)
; Erstellt ein Memo Control
$iMemo = GUICtrlCreateEdit("", 2, 2, 396, 274, $WS_VSCROLL)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUISetState()
; Setzt die Abschnitte
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
_GUICtrlStatusBar_SetText($hStatus, "Abschnitt 1")
_GUICtrlStatusBar_SetText($hStatus, "Abschnitt 2", 1)
; Setzt die Icons
$hIcons[0] = _WinAPI_LoadShell32Icon(23)
$hIcons[1] = _WinAPI_LoadShell32Icon(40)
_GUICtrlStatusBar_SetIcon($hStatus, 0, $hIcons[0])
_GUICtrlStatusBar_SetIcon($hStatus, 1, $hIcons[1])
; Zeigt den Text der Abschnitte
MemoWrite("Text von Abschnitt 1 ........: " & _GUICtrlStatusBar_GetText($hStatus, 0))
MemoWrite("Text von Abschnitt 2 ........: " & _GUICtrlStatusBar_GetText($hStatus, 1))
; Zeigt die Handles der Icons
MemoWrite("Iconhandle Abschnitt 1 .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 0)))
MemoWrite("Iconhandle Abschnitt 2 .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 1)))
; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Icons löschen
_WinAPI_DestroyIcon($hIcons[0])
_WinAPI_DestroyIcon($hIcons[1])
GUIDelete()
EndFunc ;==>Beispiel1
; Schreibt eine Nachricht in das Memo
Func MemoWrite($sMessage = "")
GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc ;==>MemoWrite
Wenn ich dann aber ein Menü einfüge, dann verschwindet die Statusleiste (siehe Bild 2). Warum passiert das und wie kann diese wieder normal anzeigen lassen?
Code mit Menü:
Spoiler anzeigen
#include <GuiMenu.au3>
#include <GuiConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$Debug_SB = False ; Prüft den Klassennamen (ClassName), der an die StatusBar-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.
[/autoit] [autoit][/autoit] [autoit]Global $iMemo
[/autoit] [autoit][/autoit] [autoit]Beispiel1()
[/autoit] [autoit][/autoit] [autoit]Func Beispiel1()
[/autoit] [autoit][/autoit] [autoit]Local $hGUI, $hIcons[2], $hStatus
Local $aParts[4] = [75, 150, 300, 400]
; Erstellt eine GUI
$hGUI = GUICreate("StatusBar: Text setzen (Beispiel 1)", 400, 300)
$hStatus = _GUICtrlStatusBar_Create($hGUI)
; Erstellt ein Memo Control
$iMemo = GUICtrlCreateEdit("", 2, 2, 396, 274, $WS_VSCROLL)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUISetState()
; Setzt die Abschnitte
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
_GUICtrlStatusBar_SetText($hStatus, "Abschnitt 1")
_GUICtrlStatusBar_SetText($hStatus, "Abschnitt 2", 1)
; Setzt die Icons
$hIcons[0] = _WinAPI_LoadShell32Icon(23)
$hIcons[1] = _WinAPI_LoadShell32Icon(40)
_GUICtrlStatusBar_SetIcon($hStatus, 0, $hIcons[0])
_GUICtrlStatusBar_SetIcon($hStatus, 1, $hIcons[1])
; Zeigt den Text der Abschnitte
MemoWrite("Text von Abschnitt 1 ........: " & _GUICtrlStatusBar_GetText($hStatus, 0))
MemoWrite("Text von Abschnitt 2 ........: " & _GUICtrlStatusBar_GetText($hStatus, 1))
; Zeigt die Handles der Icons
MemoWrite("Iconhandle Abschnitt 1 .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 0)))
MemoWrite("Iconhandle Abschnitt 2 .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 1)))
; Menü aus der Hilfe
$hFile = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hFile, 0, "Neu")
$hMain = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hMain, 0, "Datei", 0, $hFile)
_GUICtrlMenu_SetMenu($hGUI, $hMain)
[/autoit] [autoit][/autoit] [autoit]; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Icons löschen
_WinAPI_DestroyIcon($hIcons[0])
_WinAPI_DestroyIcon($hIcons[1])
GUIDelete()
EndFunc ;==>Beispiel1
; Schreibt eine Nachricht in das Memo
Func MemoWrite($sMessage = "")
GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc ;==>MemoWrite