C++ Builder 10.4, FMX: проблема с Form TabOrder
Tab Функциональные возможности для переключения между полями управлением, кажется, не работают с C++ Builder 10.4 (с пластырем 1, 2 и 3), если элемент управления формой, которая содержит несколько полого TabOrder, получает еще один вид управление родительским programmaticly.
Это можно очень легко воспроизвести, создав приложение для нескольких устройств, всего за 2
TLayout
-управления и 2
TEdit
-управление формой:
Действия по воспроизведению:
- Создайте новое приложение для нескольких устройств, пустое приложение. Это создаст
Unit1
с пустой формой. - Для сформированных
Unit1
просто бросьTLayout
из палитры в форму и измените ее размер, чтобы он соответствовал почти левой половине формы. - Брось секунду
TLayout
в форме (Layout2) и измените размер этого макета, чтобы он соответствовал правой половине формы. - Падение 2
TEdit
поля управления на Layout1 (Edit1 и Edit2). - Для Layout1 установите
TabOrder
значение 0 и убедитесь, что свойствоTabStop
установлен наTrue
. - Для Layout2 установите
TabOrder
свойство к 1 и убедитесь, что свойствоTabStop
установлен наTrue
. - Для Edit1 установите
TabOrder
значение 0, убедитесь, что свойствоTabStop
установлен наTrue
и установите для текста значение "edit1". - Для Edit2 установите
TabOrder
свойство к 1, убедитесь, что свойствоTabStop
установлен наTrue
и установите для текста значение "edit2". - Создайте и запустите проект: появится форма с двумя полями редактирования, с помощью которых Tab вы можете переключаться между полями. Хорошо! Если значение
Layout1
свойствоTabOrder
сохраняется равным -1, Tab также работает, но только после выбора одного из полей редактирования щелчком мыши. - Теперь в конструкторе
TForm1
программаLayout2
как родительLayout1
:
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Layout1->Parent = Layout2;
}
- Скомпилируйте и снова запустите проект. Положение полей редактирования в форме теперь изменено вправо, как и ожидалось. Но там Tab функциональности нет!
Почему? Если те же шаги выполняются в C++ Builder 10.2, Tab функциональность продолжает работать после установки родительского элемента
Layout1
к
Layout2
.
Содержание Unit1.fmx по запросу "Schneider Infosystems Ltd":
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 480
ClientWidth = 640
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnShow = FormShow
DesignerMasterStyle = 0
object Layout1: TLayout
Position.X = 8.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 305.000000000000000000
Size.Height = 409.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
object Edit1: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
TabOrder = 0
Text = 'edit1'
Position.X = 64.000000000000000000
Position.Y = 72.000000000000000000
end
object Edit2: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
TabOrder = 1
Text = 'edit2'
Position.X = 64.000000000000000000
Position.Y = 112.000000000000000000
end
end
object Layout2: TLayout
Position.X = 328.000000000000000000
Position.Y = 8.000000000000000000
Size.Width = 305.000000000000000000
Size.Height = 409.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
end
end
1 ответ
Да! Работает после установки "C++ Builder 10.4.1"! Итак, это была ошибка в 10.4.
Мне нужно сделать гораздо больше действий, чтобы собрать и протестировать все существующее программное обеспечение, которое мне небезразлично, но я рад, что функциональность клавиши TAB, похоже, решена!:)
Мне пришлось выполнить полную деинсталляцию и установку RadStudio. Также стороннее программное обеспечение должно быть снова интегрировано в IDE. Много работы. Я все время удивляюсь, почему это было необходимо, и что не могло быть решено с помощью обновлений патчей с "GetIt" в версии 10.4.