Tips&Tricks I trucchi del mestiere

 

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.