Hallo zusammen,
ich wünsche erst mal einen schönen Sonntag mit Garten, Sonne und einem erfrischendem Getränk
Manch einer bevorzugt ja vielleicht doch die kühleren Räume eines Hauses und liest das hier....
Ich schreibe also eine Anwendung, die ein Hauptfenster (immer dargestellt) hat und, wenn notwendig wird ein GUI (kleiner) drübergeblendet. Alles kein Ding, läuft auch. Bei den ersten Anwendungstest zeigte sich aber, daß die Sichtbarkeit der aktiven Felder schlecht ist. So hab ich nachgebessert ... und stolperte nun über dieses Problem:
Ich mache also ein "Eingabefenster" über dem Hauptfenster auf. Dieses hat mehrere Eingabefelder und Button. Das erste Eingabefeld ist im Focus und in der Version 1 (V1) TABen die Felder so durch, wie sie erzeugt wurden. So weit alles prima. Nun hab ich nach einigem Studieren im Forum einen roten Rahmen um (genauer hinter) das aktive Feld gelegt. Auswertung und Änderung über $WM_COMMAND. Das funktioniert auch alles. Die notwendigen Zeilen hab ich in der entsprechenden Sektion den Control's zugeordnet. Immer bevor das eigentliche Eingabefeld erzeugt wird. Das hat nicht gereicht, so daß ich dem Eingabefeld den Status "OnTOP" zugeordnet habe. Das "DurchTABn" der roten Rahmen funktioniert super, nur die TAB-Reihenfolge hat sich total geändert.
Ich habe also nur ein paar Zeilen dazu geschrieben und allles ist anders ...
Hier die Version V1 ohne Rahmen:
Spoiler anzeigen
#include-once
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <Date.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <FontConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <IE.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <SendMessage.au3>
#include <StaticConstants.au3>
#include <StringConstants.au3>
#include <StaticConstants.au3>
#include <WinAPIHObj.au3>
#include <WinAPIIcons.au3>
#include <WinAPIInternals.au3>
#include <WinAPISysInternals.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
Global $idZulaufNameWert ; Rückgabewert Zulauf Name
Global $idZulaufEANWert ; Rückgabewert Zulauf EAN
Global $idZulaufFachWert ; Rückgabewert Zulauf Lagerfach
Global $idZulauflfdNrWert ; Rückgabewert Zulauf LfdNr
Global $idReedRahmen_23 ; roter Rahmen ZulaufName
Global $idReedRahmen_24 ; roter Rahmen ZulaufEAN
Global $idReedRahmen_25 ; roter Rahmen ZulaufLagerfach
; ---- Main ----------------
$hGuiZulaufPakete = GUICreate("Zulauf Pakete:",550,430)
; ---------- Name
$idZulaufName = GUICtrlCreateLabel("Name: ",70,20,100,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulaufNameWert = GUICtrlCreateInput("",180,20,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; --------- EAN-Code
$idZulaufEAN = GUICtrlCreateLabel("EAN-Code: ",20,60,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulaufEANWert = GUICtrlCreateInput("",180,60,250,35,$ES_NUMBER)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; --------- lfdNr - Info
$idZulauflfdNr = GUICtrlCreateLabel("lfd Nr.: ",20,100,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulauflfdNrWert = GUICtrlCreateLabel("Info",180,100,50,35,$SS_CENTER)
GUICtrlSetColor($idZulauflfdNrWert, 0xC91E0C)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlCreateLabel("( wichtige ! )",230,100,300,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetColor(-1, 0xC91E0C)
; --------- Fach
$idZulaufFach = GUICtrlCreateLabel("Lagerfach: ",20,140,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulaufFachWert = GUICtrlCreateInput("",180,140,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; ----------------- Fußzeile
$hGuiZulaufPaketeEintragen = GUICtrlCreateButton("Aktion ausführen", 180 , 180, 350, 60)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$hGuiZulaufPaketeESC = GUICtrlCreateButton("Beenden (ESC)", 20 , 203, 140, 35)
GUISetBkColor(0xFFCC01, $hGuiZulaufPakete) ; Postgelb
GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
GUISetBkColor(0xFFCC01, $hGuiZulaufPakete) ; Postgelb
; ------------------ Info zu Lagerfächern
GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
; ----------------- Fußzeile
GUISetState(@SW_SHOW, $hGuiZulaufPakete)
$cSchalter = 0
while $cSchalter = 0
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $hGuiZulaufPaketeESC
$cSchalter = 1
Exit
EndSwitch
WEnd
und hir die Version V2 mit den roten Rahmen:
Spoiler anzeigen
#include-once
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ColorConstants.au3>
#include <Date.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <FontConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <IE.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <SendMessage.au3>
#include <StaticConstants.au3>
#include <StringConstants.au3>
#include <StaticConstants.au3>
#include <WinAPIHObj.au3>
#include <WinAPIIcons.au3>
#include <WinAPIInternals.au3>
#include <WinAPISysInternals.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
Global $idZulaufNameWert ; Rückgabewert Zulauf Name
Global $idZulaufEANWert ; Rückgabewert Zulauf EAN
Global $idZulaufFachWert ; Rückgabewert Zulauf Lagerfach
Global $idZulauflfdNrWert ; Rückgabewert Zulauf LfdNr
Global $idReedRahmen_23 ; roter Rahmen ZulaufName
Global $idReedRahmen_24 ; roter Rahmen ZulaufEAN
Global $idReedRahmen_25 ; roter Rahmen ZulaufLagerfach
; ---- Main ----------------
$hGuiZulaufPakete = GUICreate("Zulauf Pakete:",550,430)
; ---------- Name
$idZulaufName = GUICtrlCreateLabel("Name: ",70,20,100,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; Rahmen
$idReedRahmen_23 = GUICtrlCreateGraphic(178,18,256,40)
GUICtrlSetBkColor($idReedRahmen_23,$COLOR_RED)
;~ GUICtrlSetState($idReedRahmen_23, $GUI_HIDE)
$idZulaufNameWert = GUICtrlCreateInput("",180,20,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP+$GUI_FOCUS)
; --------- EAN-Code
$idZulaufEAN = GUICtrlCreateLabel("EAN-Code: ",20,60,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
; Rahmen
$idReedRahmen_24 = GUICtrlCreateGraphic(178,58,256,40)
GUICtrlSetBkColor($idReedRahmen_24,$COLOR_RED)
GUICtrlSetState($idReedRahmen_24, $GUI_HIDE)
$idZulaufEANWert = GUICtrlCreateInput("",180,60,250,35,$ES_NUMBER)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP)
; --------- lfdNr - Info
$idZulauflfdNr = GUICtrlCreateLabel("lfd Nr.: ",20,100,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
$idZulauflfdNrWert = GUICtrlCreateLabel("Info - Bereich",180,100,50,35,$SS_CENTER)
GUICtrlSetColor($idZulauflfdNrWert, 0xC91E0C)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlCreateLabel("( wichtige ! )",230,100,300,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetColor(-1, 0xC91E0C)
; --------- Fach
$idZulaufFach = GUICtrlCreateLabel("Lagerfach: ",20,140,150,35,$SS_RIGHT)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
;Rahmen
$idReedRahmen_25 = GUICtrlCreateGraphic(178,138,256,40)
GUICtrlSetBkColor($idReedRahmen_25,$COLOR_RED)
GUICtrlSetState($idReedRahmen_25, $GUI_HIDE)
$idZulaufFachWert = GUICtrlCreateInput("",180,140,250,35)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP)
; ----------------- Fußzeile
$hGuiZulaufPaketeEintragen = GUICtrlCreateButton("Aktion ausführen", 180 , 180, 350, 60)
GUICtrlSetFont(-1,20, $FW_BOLD ,0)
GUICtrlSetState(-1,$GUI_ONTOP)
$hGuiZulaufPaketeESC = GUICtrlCreateButton("Beenden (ESC)", 20 , 203, 140, 35)
GUICtrlSetState(-1,$GUI_ONTOP)
GUISetBkColor(0xFFCC01, $hGuiZulaufPakete) ; Postgelb
; ------------------ Info zu Lagerfächern
GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen
; ----------------- Fußzeile
GUISetState(@SW_SHOW, $hGuiZulaufPakete)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
$cSchalter = 0
while $cSchalter = 0
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $hGuiZulaufPaketeESC
$cSchalter = 1
Exit
EndSwitch
WEnd
Func _Set_ReedRahmen($ControlID)
ConsoleWrite("SET Rahmen startet"&@lf)
Switch $ControlID
Case $idZulaufNameWert
GUICtrlSetState($idReedRahmen_23, $GUI_SHOW)
GUICtrlSetState($idReedRahmen_24, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_25, $GUI_HIDE)
Case $idZulaufEANWert
GUICtrlSetState($idReedRahmen_23, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_24, $GUI_SHOW)
GUICtrlSetState($idReedRahmen_25, $GUI_HIDE)
Case $idZulaufFachWert
GUICtrlSetState($idReedRahmen_23, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_24, $GUI_HIDE)
GUICtrlSetState($idReedRahmen_25, $GUI_SHOW)
EndSwitch
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Switch _WinAPI_LoWord($wParam) ;ControlId
Case $idZulaufNameWert
If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then
_Set_ReedRahmen($idZulaufNameWert)
EndIf
Case $idZulaufEANWert
If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then
_Set_ReedRahmen($idZulaufEANWert)
EndIf
Case $idZulaufFachWert
If _WinAPI_HiWord($wParam) = $EN_SETFOCUS Then
_Set_ReedRahmen($idZulaufFachWert)
EndIf
EndSwitch
EndFunc
Beide sollten laufen ... ich hab mir aber nicht die Mühe gemacht die "#include" auszusortieren.
Warum ändert sich die TAB-Folge nach diesen paar zusätzlichen Zeilen. Der Status der Erzeugung der Controls bleibt doch der selbe ??? Oder hab ich da wieder ein Verdreher im Hirn
... und ja die "GUISetAccelerators" hab ich gelesen.
Dennoch verstehe ich das unterschiedliche Verhalten nicht. Wo ist da der springende Punkt
Schon mal vielen Dank