o:tabStop ...

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

o:tabStop ...

Beitrag von AUGE_OHR »

hi,

ich frage mich wie das Verhalten von o:tabStop ist bzw. "sein sollte" ...
Help File :tabStop
Die Instanzvariable :tabStop enthält standardmäßig den Wert .F. (falsch) ...
ok ... und warum setzt der Formdesigner dann (fast) überall o:tabStop := .T. ?
Hinweis: Wenn in einem Dialog logische Gruppen durch :group definiert sind, wird :tabStop üblicherweise beim ersten Dialogelement innerhalb der Gruppe auf .T. (wahr) gesetzt. Dadurch wird immer das erste Dialogelement einer Gruppe durch die Tab-Taste aktiviert.
ok ... wenn ich nun beim "letzten" XbPart in einer o:group angekommen bin wo lande ich beim nächsten xbeK_TAB ?

es gibt aber auch die andere Methode wenn man eine XbpGroupbox() als Parent nimmt. und auch hier die selbe Frage :
wenn ich nun beim "letzten" XbPart in einer XbpGroupbox() angekommen bin wo lande ich beim nächsten xbeK_TAB ?

nun könnte die Antwort lauten : probiere es mit (Xbase++) aus ... aber ich bin mir nicht sicher das Xbase++ tatsächlich das "richtige" Verhalten zeigt ... deshalb die Fragen.
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: o:tabStop ...

Beitrag von georg »

Guten Morgen, Jimmy -


ich bin mir nicht sicher, ob es da überhaupt ein "richtiges" Verhalten gibt.

Wenn die Gruppe aus zwei Radiobuttons besteht, kannst Du sicher jeden mit :tabStop := .T. versehen, wenn die Gruppe aber aus zehn Radiobuttons besteht, würde ich nur den ersten mit :tabStop := .T. versehen, damit die Navigation "einfach" bleibt, d.h. der Anwender nicht alle Elemente durchgehen muss, um zum nächsten Control zu gelangen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: o:tabStop ...

Beitrag von AUGE_OHR »

georg hat geschrieben:Wenn die Gruppe aus zwei Radiobuttons besteht, kannst Du sicher jeden mit :tabStop := .T. versehen, wenn die Gruppe aber aus zehn Radiobuttons besteht, würde ich nur den ersten mit :tabStop := .T. versehen, damit die Navigation "einfach" bleibt, d.h. der Anwender nicht alle Elemente durchgehen muss, um zum nächsten Control zu gelangen.
gutes Beispiel aber wie ist es dann mit Keyboard "only" bei 10 Radiobuttons ...
ich könnte zwar den 1st von den 10 anspringen aber keinen weiteren von den 10 ( wenn kein o:TabStop )

anderseits wenn ich nun 10 x XbpGroupbox() mit je 10 Radiobutton hätte möchte ich nicht 99 x "tab" betätigen um von 1 auf 100 zu kommen( ok Shift-Tab wäre rückwärts nur 1 x) ...

hm ... wie ist das mit ScManage.PRG und "Hotkey" ... geht das auch bei Buttons ? gibt es da was ähnliches ?

Frage : ist ein Ctrl-Tab oder ein Ctrl-Shift-Tab für "irgendwas" definiert ?
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: o:tabStop ...

Beitrag von georg »

Hallo, Jimmy -


Ctrl-Tab ist z.B. bei Firefox oder anderen Browsern dafür "reserviert" von einem Tab zum nächsten zu wechseln, und ... rate mal? Ctrl-Shift wechselt die Reiter in der umgekehrten Reihenfolge.

In HTML-Formularen bewegst Du Dich bei Radiobuttons mit den Pfeiltasten durch die Liste, bei Xbase scheint das nicht so zu funktionieren. Es bleibt Dir aber offen, mittels des :keyboard Slots da Einfluss zu nehmen.

Die Dokumentation sagt gar nichts zum Thema "Tastatur" im Zusammenhang mit Radiobuttons.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: o:tabStop ...

Beitrag von AUGE_OHR »

georg hat geschrieben:Ctrl-Tab ist z.B. bei Firefox oder anderen Browsern dafür "reserviert" von einem Tab zum nächsten zu wechseln, und ... rate mal? Ctrl-Shift wechselt die Reiter in der umgekehrten Reihenfolge.
JA ... jetzt fällt mir das auch ein.
georg hat geschrieben:In HTML-Formularen bewegst Du Dich bei Radiobuttons mit den Pfeiltasten durch die Liste, bei Xbase scheint das nicht so zu funktionieren. Es bleibt Dir aber offen, mittels des :keyboard Slots da Einfluss zu nehmen.
hm ... Cursor Taste ... :-k
georg hat geschrieben:Die Dokumentation sagt gar nichts zum Thema "Tastatur" im Zusammenhang mit Radiobuttons.
Windows ist nicht für "Tastatur" ausgelegt ... deshalb mein Problem was ich mit meinen native Button Control habe.

es gibt, für WC_BUTTON, kein Notify Event "OnKeyDown" oder ähnliches und WS_TAPSTOP "wirkt" nicht so wie gewohnt.

ich habe es nun so versucht :

Code: Alles auswählen

   ot4xb_subclasswindow(::hButton,Self,,"BUTTON_wndproc")
   ...
INLINE METHOD BUTTON_wndproc(hWnd,nMsg,wp,lp,ctx)
IF (nMsg >= WM_KEYFIRST) .and.(nMsg <= WM_KEYLAST )
   IF nMsg == 256
      DO CASE
         CASE wp == xbeK_TAB
            // und hier geht es los ...
            IF APPKEY_DOWN = AppKeyState( xbeK_SHIFT )
                PostAppEvent(xbeP_Keyboard, xbeK_SH_TAB, NIL, ??? )
            ELSE
                PostAppEvent( xbeP_Keyboard, xbeK_TAB, NIL, ??? )
            ENDIF
die Frage ist : "was" schicke ich an "wen" ?

self macht keinen Sinn, self:SetParent() führt mich (immer) zum 1st Child Part des Parent :banghead:

dann hab ich noch das versucht

Code: Alles auswählen

   aChild := ::oParent:Childlist()
   iMax := LEN(aChild)
   i := ASCAN(aChild,{|o| o = self })
   IF i > 0
      IF APPKEY_DOWN = AppKeyState( xbeK_SHIFT )
         IF i-1 < 1
            SetAppFocus(aChild[iMax])
         ELSE
            SetAppFocus(aChild[i-1])
         ENDIF
      ELSE
         IF i+1 > iMax
            SetAppFocus(aChild[1])
         ELSE
            SetAppFocus(aChild[i+1])
         ENDIF
      ENDIF
   ENDIF
wenn ich nun eine XbpGroupbox() als Parent habe komme ich mit "tab" da nicht raus zu einem anderen XbPart :angry4:

Die Idee die Cursor-Tasten in einer XbpGroupbox() zu verwenden könnte die Lösung sein ... mal sehen wie ich das implementieren kann.
gruss by OHR
Jimmy
Antworten