Страница 1 из 1

Проблема с TabOrder под Linux

СообщениеДобавлено: 19.02.2015 22:51:51
ya_vanka
Добрый день.

Столкнулся с проблемой некорректной отработки свойства TabOrder под Linux (в Windows работает корректно).

Во вложении - проект с формой. На форме ряд контролов. Примерно половина из них (левя часть c Lat. и до выпадающего списка включительно) переключается по Tab, а остальные контролы (checkbox, 3 edit (head, length, width) и 2 button) не переключаются, хотя TabOrder у них назначен и TabStop = true.

Понять не могу в чем дело. Может кто встречался с проблемой и знает решение?

Заранее спасибо.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 22.02.2015 16:43:35
ya_vanka
Люди!
Ну хоть кто-нибудь что-то ответит?
Наблюдается ли у вас эта проблема?
В какую сторону копать?

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 22.02.2015 19:07:05
*Rik*
ya_vanka писал(а):Люди!
Ну хоть кто-нибудь что-то ответит?
Наблюдается ли у вас эта проблема?
В какую сторону копать?

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

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 23.02.2015 01:27:29
ya_vanka
А мой проект вы запускали?
Наблюдаете проблему?

Если да, то получается можно неправильно создать форму. Причем эта неправильность отражается только на TabOrder. Вот я и хочу разобраться в чем состоит эта неправильность.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 23.02.2015 10:16:44
Снег Север
Подтверждаю проблему с вашей формой на Mint 64, Lazarus 1.2.6
Причину, к сожалению, не знаю.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 23.02.2015 12:43:54
VirtUX
Во-первых. У Вас там мешанина с компонентами. Одни поверх других. Потом порядок перехода какой-то хаотичный. И расцветка на некоторых не позволяет получить визуальное отображение фокуса. Или делайте программный переход на следующий компонент, или не городите одни поверх других, или сделайте приемлемый порядок TabOrder. Фокус переключается. Но переодически уходит на компоненты, которые под видимыми сверху. Editы справа фокус получают, если продолжать табулировать. Чекбокс визуально не изменяется при получении фокуса, как и кнопки.
Итого: сделайте удобный дизайн, и наведите порядок в компонентах. ИМХО...
Проверено на openSUSE 13.2 (QT)

Добавлено спустя 9 минут 43 секунды:
в помощь:
Код: Выделить всё
procedure TPointsListDlgForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  i, ic: integer;
begin
  if Key = VK_TAB then begin
    ic := ComponentCount - 1;
    for i := 0 to ic do
      if (Components[i] is TWinControl) and TWinControl(Components[i]).Focused then begin
       Caption:= Components[i].Name;
       Break;
      end;
  end;
end;   

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 23.02.2015 19:59:03
Снег Север
VirtUX писал(а):мешанина с компонентами

Интересно, что под виндой эта мешанина работает отлично. Впрочем, для меня эта проверка имела "академический" интерес, я под линуксами ничего серьезного не разрабатываю и не собираюсь.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 25.02.2015 13:25:09
ya_vanka
VirtUX писал(а):У Вас там мешанина с компонентами.


Ну как сказать мешанина. Думаю просто из проекта не совсем понятно как форма должна работать.
То, что 2 MaskEdit находятся под 2 Edit обусловлено лишь тем, что они одновременно не отображаются. В зависимости от режима либо один, либо другой. А находиться должны в одном месте.
Чем вам не понравился порядок TabOrder я тоже не понял.

VirtUX писал(а): Но переодически уходит на компоненты, которые под видимыми сверху

Компоненты TMaskEdit, которые под TEdit имеют свойство Visible = false, так что им фокус не может быть передан.

CheckBox визуально не изменяется, но фокус получает и по пробелу должен переключаться.

Так что, думаю, дело не в "мешанине".



Если кому интересно нашел на англоязычном форуме описание похожей проблемы.

http://forum.lazarus.freepascal.org/ind ... #msg162511

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 25.02.2015 15:12:28
pupsik
ya_vanka я очень сильно извиняюсь но, вам пытались как можно мягче сказать: пересмотрите расположение компонентов на форме...
У вас реальная мешанина.
Ради интереса, сбросил TabOrder в 0 и... появился фокус. Разбираться чья в этом вина. Ну..у, будем - по умолчанию считать виноватым багнутый лазарь...

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 25.02.2015 16:29:54
ya_vanka
Я тоже извиняюсь если кого обидел или какую глупость написал, но я честно не понимаю что не так с расположением. Буду признателен если вы мне объясните и научите как правильно.

И если можно по-подробнее где вы сбросили TabOrder в 0 и где после этого появился фокус.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 26.02.2015 13:17:10
pupsik
по поводу расположения...
все зависит от того что вы хотите. Но такой "разброс" компонентов на форме у меня, к примеру, вызвал шок: "Черт ногу сломит". Почитать... хм...., к примеру что то о интерфейсах, посмотреть как реализовано похожее...

по поводу TabOrder в 0.
после шока и проверки на рабочесть я выделил компоненты и установил TabOrder в 0. При первом варианте фокус фиг его знает куда "прятался", после установки в 0 он стал адекватом. Т.е. переход по табу нормализовался и не "прятался".

п.с.
как я понимаю. Эта панель с компонентами - это нечто редактора. Зачем его совать в одну форму? Можно ведь использовать другую. А потом создавать согласно необходимости.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 27.02.2015 11:45:37
VirtUX
ya_vanka, Вы обработчик KeyDown, который я выше в примере Вам написал, поставили? Если да, то что Вам не понятно из моих выводов/советов?

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 27.02.2015 15:55:04
ya_vanka
VirtUX
Нет, обработчик пока не прикрутил, зато убрал вообще все лишнее. Надеюсь теперь мешанины не будет. Однако проблема сохранилась.
Обработчик постараюсь поставить в ближайшее время.

pupsik
Попробовал выставить TabOrder в 0. Порядок поменялся, а дальше ComboBox все равно не идет.

Добавлено спустя 2 часа 51 минуту 33 секунды:
VirtUX
Добавил ваш код (проект ItemsListDlg_3.zip). Он показывает предыдущий контрол, который имел фокус. Дальше ComboBox по-прежнему не переходит.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 02.03.2015 19:42:59
ya_vanka
Что интересно после ComboBox фокус переходит на панель Pnt1PanelDefPos, хотя у нее TabStop = false.

Re: Проблема с TabOrder под Linux

СообщениеДобавлено: 10.03.2015 14:03:35
ya_vanka
Что-то топик снова подвис.

Наблюдаете ли вы описанную проблему и есть ли идеи как ситуацию исправить?