Autor Beitrag
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 24.05.07 06:50 
Folgende Situation:
In meinem Programm gibt es auf dem Formular mehrere Editfenster, mehrere Buttons und zwei Radiogroups. Grade eben habe ich versucht, dass man mit Tab "sinnvoll" zwischen den Editfenstern wechseln kann. Hierbei stieß ich zunächst auf die TabOrder-Liste, dann auf die Attribute TabOrder und TabStop der einzelnen Komponenten.

Mit diesen gelang es mir auch, die Reihenfolge so festzulegen wie ich wollte, mit einer Ausnahme:
Ich will, dass man mit Tab nur Editfenster erreichen kann, also habe ich bei den buttons und Radiogroups TabStop auf false gesetzt. Bei den buttons klappt das auch, aber die Radiogroups kann ich mit der Tab-Taste trotzdem erreichen.

Ich habe ein bisschen rumprobiert und rausgefunden, dass man die Radiogroups (wenn tabstop auf false) nur erreichen kann, wenn ein Item selektiert wurde (also itemindex>-1), folglich liegt der Schluss nahe, dass ich irgendwie bei den einzelnen Items in der Radiogroup TabStop deaktivieren muss, diese gebe ich ja aber nur als String bei Items ein.

Also, kurz und gut, wie kann ich es hinkriegen, dass ich mit Tab nicht in Radiogroups komme?
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 24.05.07 09:22 
Hallo,

da wurde das Problem schon mal durchgekaut und zwei Workarouds gefunden:
[VCL Win32] TAB-Stop in RadioGroup nicht deaktivierbar
Zwischenzeitlich habe ich eine andere Lösung gefunden.

user profile iconJann1k hat folgendes geschrieben:
Ich habe ein bisschen rumprobiert und rausgefunden, dass man die Radiogroups (wenn tabstop auf false) nur erreichen kann, wenn ein Item selektiert wurde (also itemindex>-1), folglich liegt der Schluss nahe, dass ich irgendwie bei den einzelnen Items in der Radiogroup TabStop deaktivieren muss, diese gebe ich ja aber nur als String bei Items ein.
Das hast Du richtig erkannt.

Die Items werden intern als TGroupButton in der Eigenschaft TRadiogroup.Controls verwaltet.
Grob gesagt, durch das Selectieren eines Items wird bei diesem GroupButton Tabstop auf True gesetzt.
Also in OnClick -da wird ja selectiert- Tabstop bei dem selectierten Item auf False setzen.

Diese zwei Zeilen in alle OnClick-Eventhandler der RadioGroups einbinden:
ausblenden Delphi-Quelltext
1:
2:
  whit TRadiogroup do
    TRadioButton(Controls[ItemIndex]).TabStop := False;

Ist der ItemIndex der RadioGroups im OI auf ein Item gesetzt, so ist es noch erforderlich in OnCreate der Form für alle RadioGroups den Code einzubauen:
ausblenden Delphi-Quelltext
1:
2:
  whit RadioGroupX do
    TRadioButton(Controls[ItemIndex]).TabStop := False;

Setzt man zur Laufzeit den Itemindex einer RadioGroup wird automatisch OnClick ausgelöst und die volle Funktionalität ist gegeben.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Jann1k Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 24.05.07 13:48 
okay, komm grad aus der Schule und habs ausprobiert, funktioniert wunderbar

Vielen Dank