Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Баг обхода контролов на форме по клавише Tab [D7]


RWolf ©   (2011-07-19 10:34:00) 

На форме лежит набор контролов для редактирования опций программы и несколько радиокнопок, на выбор каждой из них повешен обработчик, разрешающий несколько одних контролов и запрещающий другие. Пытаемся пробежаться по оконным компонентам на форме клавишей Tab (если переместить табом фокус на радиокнопку, она включается, т.е. срабатывает логика разрешения/запрещения контролов). После первого круга порядок обхода (который задаётся свойством TabOrder) ломается — Tab уже не позволяет добраться до всех разрешённых в данный момент компонентов. Как побороть?


MonoLife   (2011-07-21 03:38:00) [1]

как вариант, вместо панели использовать bevel


MonoLife   (2011-07-20 14:16:00) [2]


> выбор одного варианта из нескольких принято делать радиокнопкой.

сорри, это я на тестовом примере с tabStop намудрил, думал так и было)


RWolf   (2011-07-20 13:39:00) [3]


> если в Form1 в tab order указать радиокнопки подряд

в этом дело.
хотелось бы добиться именно перехода Tab'ом с радиокнопки на соответствующий контрол,
а курсором, так и быть, переключаться между радиокнопками.
вот только не работает правильно ни то, ни другое.

вторая форма — это уже эксперименты на заданную тему.
чекбоксы, к сожалению, не подойдут — выбор одного варианта из нескольких принято делать радиокнопкой.


MonoLife   (2011-07-20 13:11:00) [4]

посоветовал бы использовать чекбоксы во второй форме, они, как бы, для этого случая (checked all) больше приспособлены


MonoLife   (2011-07-20 13:02:00) [5]

если в Form1 в tab order указать радиокнопки подряд, то при фокусе на одной из из р-кнпок курсором ходит нормально.
Со второй формой, беда..


RWolf   (2011-07-20 10:11:00) [6]


> MonoLife ©   (20.07.11 07:18) [4]
> курсором ходит

гляньте архив с примером выше.
стрелками ходит так же криво, как Tab'ом.


SQLEXPRESS   (2011-07-20 07:23:00) [7]


> курсором ходит


если все

> TCheckBox в одном TGroupBox
а все
> TRadioButton в другом TGroupBox

и
> не один TRadioButton не checked

и курсором не ходит тоже


MonoLife   (2011-07-20 07:18:00) [8]

курсором ходит


SQLEXPRESS   (2011-07-19 12:11:00) [9]

D7, XP SP3
подтверждаю проблему.

 TForm1 = class(TForm)
   btn2: TButton;
   grp1: TGroupBox;
   grp2: TGroupBox;
   chk1: TCheckBox;
   chk2: TCheckBox;
   chk3: TCheckBox;
   rb1: TRadioButton; // checked
   rb2: TRadioButton;

TCheckBox в одном TGroupBox
TRadioButton в другом TGroupBox

procedure TForm1.btn2Click(Sender: TObject);
begin
 chk2.Enabled := not(chk2.Enabled);
 rb1.Enabled := not(rb1.Enabled);
end;

как только задисейблим  rb1: TRadioButton;
Tab-ом на rb2: TRadioButton; не попасть никак.

более того, если не один TRadioButton не checked,
туда сразу никак не попасть ( одними кнопками пользуясь)


RWolf   (2011-07-19 12:00:00) [10]


> Юрий Зотов ©   (19.07.11 11:20) [1]


Похоже, проблема возникает, если в TabOrder радиокнопки чередуются с другими контролами (нужен именно такой порядок обхода).
Вот проект с парой форм, где это воспроизводится: http://bit.ly/nHbWpn


Юрий Зотов   (2011-07-19 11:20:00) [11]

Попытался воспроизвести Вашу ситуацию. Пробовал и с RadioCroup, и отдельными RadioButton. Описанный Вами эффект не наблюдается, все работает нормально  (D7, XP HE SP3).

Если Вы где-то обрабатываете нажатие Tab (ASCII 9), то проблема может быть в этом. Попробуйте отключить обработку и проверьте.


Наверх

Титульная страница Поиск, карта сайта Написать письмо