• 0
antarey

В моем случае при использовании 3D формы и ряда TLayer3D не удается нажать на 2D контрол

Вопросы

Помогите разобраться в вроде элементарной задаче. Для андроида  хочу сделать меню.

Есть 3Д форма - на ней 3 TLayer3D

Layer3D1->Align = Left
Layer3D2->Align = Client
Layer3D3->Align = None

На Layer3D2 поместил тулбар а на него уже спид бутон

Вот код 

  Layer3D3->Visible = ! Layer3D3->Visible;
   if (Layer3D3->Visible)
   {
       Layer3D2->SendToBack();
       Layer3D3->BringToFront();
       ListBox1->ApplyStyleLookup();
       ListBox1->RealignContent();
   } else {
       Layer3D3->SendToBack();
   }

Мое меню Layer3D3 с листбоксом появляется, но не могу нажимать на итемы

 

если

Layer3D2->Visible = false;

то итемы нажимаются

Что я не доделываю

Project1.zip

Изменено пользователем Brovin Yaroslav
Отформатировал код

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 ответа на этот вопрос

  • 0
  1. Рабочее решение, сбросить HitTest в False для слоев. Они перехватывают события.
  2. Для 3D объектов BringToFront и BringToBack не работают так, как вы ожидаете. Поскольку у 3D объектов это положение зависит от точки наблюдения. Вместо этого в вашем случае нужно использовать ось Z.

Зачем для 2D интерфейса использовать 3D форму?

 

Это не оправдано. Отмечу, что выбор использования 2D или 3D формы зависит от вашего варианта использования. Например:

  1. 2D форма. Когда преобладающая часть контролов - это 2D контролы. Чтобы использовать 3D объекты, используйте встроенные TViewPort3D. Если нужны 3D эффекты в редких случаях, то проще на момент создания эффекта добавить в корень формы TViewPort3D с TLayer3D, затем перенести туда все ваши контролы. выполнить эффекты и восстановить обратно. В этом случае не будет и проблем с нажатием в 3D форме. 
  2. 3D форма. Все тоже, что и в 2D форме только со знаком минус.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

как раз из за эффектов и выбирал 3д - у 2д нет возможности реализовать переворот по оси Y, я игрался со свойством RotationAngle.Y.

Чтобы не нарушать правил скажите да или нет, если да то создам новую тему - есть возможность в 2д режиме реализовать переворот по оси Y без заморочек с TViewPort3D с TLayer3D? что-то мне кажется что будет мерцание в момент переноса контролов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Посмотрите пример ControlsDemo, внизу есть кнопка, которая переводит интерфейс в 3D и крутит его. После возвращения переводит его обратно в 2D.

 

Да и обратите внимание на отсутствие мерцания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От d7d1cd
      Привет всем. На 2D форму положил TViewPort3D, на него положил TLayer3D на котором разместил TLabel, TEdit, TButton и анимацию. При открытии формы 3D эффект работает, однако вид выше указанных компонентов совсем не презентабелен. Те же компоненты вне TViewPort3D и TLayer3D отображаются нормально. Такая проблема стала наблюдаться только в XE7. В XE6 ее не было.
      Прикрепил тестовый проект.
      Example.zip
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу