2016-11-12 10 views
2

Я пытаюсь использовать назначение на TPanel, настроенный в дизайнере, но он не работает.Firemonkey Assign TPanel to TPanel does not work XE10.1 Berlin

var 
    LPanel : TPanel; 
begin 
    LPanel := TPanel.Create(nil); 
    LPanel.Assign(Panel1); // Panel1 is a panel made in the form designer 
end; 

Сообщение об ошибке похоже на «TPanel не может быть назначено TPanel». (У меня есть немецкая версия RAD Studio ... Точное сообщение об ошибке на немецком языке - «TPanel kann nicht zu TPanel zugewiesen werden.»)

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

+0

1) Просьба представить _ ** полный ** и ** ** _ точное сообщение об ошибке (Deutsch IST хорошо, Венна эс noetig Синд). В сообщении могут быть важные подсказки. 2) Тем не менее, у меня нет доступа к Delphi для подтверждения: но похоже, что это может быть намеренно отключено для 'TPanel'. Поэтому, пожалуйста, [отредактируйте свой вопрос] (http://stackoverflow.com/posts/40558827/edit), чтобы объяснить, чего вы пытаетесь достичь/что ваша цель. Может быть более подходящий способ решения вашей корневой проблемы. –

+0

Спасибо за быстрый ответ! Я отредактировал свой ответ :) Basiclly Я хочу добавить TPanel, которые являются одинаковыми со всеми childerns, такими как моя разработанная TPanel. ^^ – MaxMadman

ответ

3

Большинство VCL и FMX компонентов, в том числе TPanel, НЕ реализуют Assign() на всех. Как правило, только утилиты, используемые для свойств компонентов, реализуют Assign() для использования в своих установщиках свойств.

Для чего вы пытаетесь использовать Frame вместо TPanel. Вы можете создать Frame во время разработки, точно так же, как Form или DataModule, а затем создавать экземпляры его во время выполнения по мере необходимости.

документация знакомства Embarcadero для более подробной информации:

Frames in FireMonkey

2

К сожалению, в настоящее время у меня нет доступа к Delphi для подтверждения. Но, похоже, Assign ing TPanel намеренно блокируется каркасом.

Это говорит, что вы пытаетесь достичь, кажется, более уместно обращаться с TFrame

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

uses 
    ... 
    frMyFrame; 
... 
var 
    LNewFrame : TFrame; 
begin 
    LNewFrame := TMyFrame.Create(nil); //Are you sure you don't want to assign an owner? 
    LNewFrame.Parent := Self; //Assuming you want to position the frame directly on the form 
          //Otherwise you could place it on a simple panel. 
    //Set attributes for positioning 
    //Don't forget resource management (see ownership comment) 
    ... 
end;