TAB-Reihenfolge ... schon x-mal diskutiert, dennoch eine Frage

  • Hallo zusammen,

    ich wünsche erst mal einen schönen Sonntag mit Garten, Sonne und einem erfrischendem Getränk8):)

    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 ...:huh:

    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

    Wenn Du's eilig hast - geh langsam...

  • Guten Morgen De Rand Ere

    Ja, also dein Problem ist deine Verwendung von GUICtrlSetState(-1, $GUI_ONTOP).

    Damit setzt du einzelne Controls an die Spitze und änderst damit auch die Z-Reihenfolge der Controls. Das hat so wie ich das sehe nichts mit der Sichtbarkeit zu tun, ändert aber sehr wohl die Tab-Reihenfolge, Da du bei einigen Tab-Controls $GUI_ONTOP gesetzt hast, und bei anderen nicht, kommt das heraus.

    Ich glaube wirklich du hast das missverstanden und brauchst das hier überhaupt nicht.

    Grüße autoiter

  • Jaaaa ... das wars,

    ich hatte das "On_Top" in der grafischen Benutzung verstanden. Das Control soll also immer oben sein .... Ohne diesem Eintrag läuft die Sache. Vielen Dank ... ich bin wieder ein Stück weiter gekommen, auch wenn der Weg noch weit ist, bis ich mit dem getippten zu frieden bin.

    Wenn Du's eilig hast - geh langsam...