Динамически создавать новый компонент без ограничения объявленной переменной? - PullRequest
0 голосов
/ 25 июня 2018

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

procedure TForm1.btnClick (Sender: TObject);
Var
    pnlTest1, pnlTest2 : TPanel;
Begin
 If iCount = 1
 then
   Begin
     pnlTest1 := TPanel.Create(Self);
     pnlTest1.Parent := Self;
     pnlTest.Top := 0;
     Etc...
   End
Else if iCount = 2
 Then
  Begin
   PnlTest2 := TPanel.Create(Self);
   PnlTest2.Parent := Self;
   PnlTest2.Top := 0;
   Etc...
End;

Проблема в том, что я могу создать столько компонентов, сколько я создал, и мне нужно, чтобы пользователь создавал бесконечное количество новых компонентов. Я пробовал и другие методы, но такая же проблема возникает, я также пытался создавать динамические переменные с указателями и т. Д., Но типы данных этих переменных работали только (в моих усилиях) с базовыми типами данных (Integer, String и т. Д.) И т. Д. я не мог создать переменную во время выполнения для создания компонента (в примере pnlTest: TPanel был объявлен, это не работало с динамическими переменными)

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

1 Ответ

0 голосов
/ 25 июня 2018

Вам нужно только объявить 1 переменную указателя, чтобы получить новый экземпляр компонента, например:

private
  iCount: Integer;

... 

procedure TForm1.btnClick (Sender: TObject);
Var
  pnlTest : TPanel;
Begin
  pnlTest := TPanel.Create(Self);
  pnlTest.Parent := Self;
  pnlTest.Name := 'pnlTest' + IntToStr(iCount);
  pnlTest.Top := 0;
  //...
  Inc(iCount);
End;

Экземпляр компонента сохраняется в свойствах формы Components и Controls, поскольку вы назначаете форму как Owner и Parent компонента, соответственно.

...