Creazione di componenti a run-time

Il tip consente di creare componenti a run-time. 
Tip fornito dal sig. L.Nalli

La prima operazione da compiere consiste nella preparazione della windows: si inseriscono due panel, uno per ospitare la toolbar con i componenti da inserire, l'altro sul quale posare i componenti scelti. A questo punto si aggiungano tre pulsanti alla toolbar, il primo per indicare che nessun componente è stato selezionato, il secondo per inserire un TButton, l'ultimo per inserire un TEdit. I tre toolbutton devono avere le proprietà AllowAllUp e Grouped settate a true,  il tutto per ottenere un effetto simile a quello dell'IDE di Delphi. Si setti per ogni bottone della barra un tag differente partendo da uno. Il primo pulsante avrà tag uguale a uno, il secondo uguale a due e così via. Si dichiari la variabile Selected di tipo intero e si inserisca nell'evento Click del primo pulsante la riga seguente:

Selected:=TToolButton(Sender).Tag;

Una volta associato l'evento ad ogni pulsante della toolbar, cliccando su un tasto, la variabile Selected assumerà il valore del tag del pulsante premuto.
Si dichiari la variabile ControlRef di tipo TControlClass. Nell'evento MouseDown del panel che ospiterà i controlli selezionati scriviamo:

case Selected of
  2:
    ControlRef:=TButton;
  3:
    ControlRef:=TEdit;
end;

Mediante questo codice, a seconda del valore assunto da Selected, la variabile ControlRef assumerà un valore differente, il quale coincide con il ClassType del componente che si vuole inserire.
Prima di proseguire si dichiarino due variabili, Counter e ControlName, rispettivamente di tipo
intero e di tipo stringa. Si aggiunga il codice seguente all'evento MouseDown:

if Selected > 1 then
  with ControlRef.Create(Self) do
    begin
      Inc(Counter);
      Visible:=false;
      Parent:=Self;
      ControlName:=ControlRef.ClassName;
      Delete(ControlName,1,1);
      Name:=ControlName + IntToStr(Counter);
      Left:=X;
      Top:=Y;
      Visible:=true;
      tbNone.Down:=true;  //tbNone = name del primo toolbutton
      tbNoneClick(tbNone);
    end;

Tramite l'utilizzo della Class Reference, si può notare come si possa aggiungere qualsiasi controllo
usufruendo dello stesso codice.