Newsgroup: it.comp.lang.delphi
Titolo: Duplicare controlli

Ho cercato su google ma...
Su una form ho un pagecontrol con un solo tabsheet. a runtime ho bisogno di 
creare altri tabsheets alla bisogna, ed ogni nuova pagina dovrebbe riportare 
gli stessi controlli del primo tabsheet gi� presente (Tedit, Tcombo, ecc). 
Si tratta di una serie di schede, che possono variare da una ad una decina.
So gi� come aggiungere il tabsheet al pagecontrol, ma non so se esiste 
qualche metodo per copiare gli altri controlli dentro il tab invece di 
crearli ex-novo ed impostare ogni singola propriet�.
Spero di non aver fatto confusione.
in pratica mi serve di copiare alcuni controlli pari pari ed incollarli sul 
nuovo tab, poi gli imposto un nome diverso per distinguerli.
grazie. 

 
Non mi ï¿œ chiaro cosa intendi per "copiare", in quanto al momento in cui
"incolli" diventï¿œ una creazione.
cmq a Runtime io farei
- Crei una nuova pagina
- Loop su tutti i componenti contrassegnati "da copiare"
- Creazione dei nuovi componenti con le impostazioni dei componenti
selezionati
Qualche cosa del tipo:
for <componenti da copiare>
case <tipo componente>
  a:begin
      oedit := tedit.create(self);
      oedit := assegnaprop(<tipo componente><proprietï¿œ>);
     end;
  b:begin
       ocheck := tcheckbox.create(self);
       ocheck := assegnaprop(<tipo componente><proprietï¿œ>);
     end;
  c:....
end;
^_Goblin_^

       ocheck := assegnaprop(<tipo componente><propriet�>);


CUT
Il codice sotto non si discosta molto dal tuo infatti ï¿œ copiato pari 
pari, ma se tra 1 mese lo riprendo in mano non devo imprecare per 
ricordarti cosa significano le variabili, infatti ï¿œ buona regola (IMHO), 
cercare di scrivere il codice in maniera piï¿œ esplicativa possibile in 
modo tale che una volta che si rilegge non bisogna fare i salti mortali 
per ricordarsi il flusso del sorgente.
IL TUTTO (IMHO)
procedure Tmainform.aggiungipagina;
var
     oTabSheet :TTabSheet;
     nPageCount: Integer;
     n: integer;
     oCtrlSource, oCtrlDest: Tcontrol;
begin
   nPageCount := tabtracce.PageCount;
   inc(nPageCount);
   oTabSheet := TTabSheet.Create(self);
   oTabSheet.PageControl:=tabtracce;
   oTabSheet.Caption:='Traccia '+inttostr(nPageCount);
   oTabSheet.Name:='TabSheet'+inttostr(nPageCount);
   oTabSheet.Parent:=tabtracce;
   oTabSheet.PageIndex:=nPageCount-1;
   oTabSheet.TabVisible:=true;
   oTabSheet.Visible:=true;
   tabtracce.ActivePageIndex := nPageCount - 1;
   for n:=0 to ts1.ControlCount-1 do  // tutti i controlli del principale
   begin
     oCtrlSource := ts1.Controls[n];
     oCtrlDest := Nil;
     if oCtrlSource is TLabel then
     begin
       oCtrlDest := Tlabel.Create(self);
       (oCtrlDest as Tlabel).Caption:=(oCtrlSource as Tlabel).Caption;
     end
     else if oCtrlSource is TEdit then
     begin
       oCtrlDest:=Tedit.Create(oTabSheet);
       (oCtrlDest as Tedit).Text:=(oCtrlSource as Tedit).Text;
     end
     else if oCtrlSource is TCheckBox then
     begin
       oCtrlDest:=TCheckBox.Create(oTabSheet);
       (oCtrlDest as TCheckBox).Caption:=(oCtrlSource as TCheckBox).Caption;
     end;
     if Assigned(oCtrlDest) then  // se da duplicare
     begin
       oCtrlDest.Parent := oTabSheet;
       oCtrlDest.Top:=oCtrlSource.Top;
       oCtrlDest.Width:=oCtrlSource.Width;
       oCtrlDest.Left:=oCtrlSource.Left;
     end;
   end;
end;