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.

Другие вопросы по тегам