Newsgroup: it.comp.lang.delphi
Titolo: serie di componenti

Ho una serie di edit (diciamo edit1, edit2 ecc.) e devo inserirne il
contenuto in una serie di label (label1, label2, ecc.)
Come e' possibile realizzare un ciclo che richiami in sequenza il nome dei
componenti senza doverlo scrivere ogni volta per esteso?
Spero di essere stato chiaro, mi scuso se la domanda e' banale ma mi sono
arenato.
-- 
F&R

 nome dei componenti senza doverlo scrivere ogni volta per esteso?
TForm.Components
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

 componenti senza doverlo scrivere ogni volta per esteso?
Se il numero di componenti è limitato, puoi fare uso del metodo 
/FindComponent/ del Form per individuare i controlli su cui devi operare 
attraverso il loro nome.
Tuttavia, siccome si tratta di un metodo non particolarmente 
performante, potresti creare i controlli a runtime, in fase di 
esecuzione, e inserirli all'interno di una *TList* per scandirli 
singolarmente e impostarne le proprietà a seconda delle occorrenze.
Prova a fare qualche tentativo con la prima soluzione, in quanto la 
seconda richiede un po' più di dimestichezza con il linguaggio, se si 
tratta di un'operazione fatta "una tantum" e non incide pesantemente 
sulle prestazioni del tuo programma può essere sufficiente.
In caso contrario, vedremo di affrontare la seconda alternativa o altre 
soluzioni. :-)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 componenti senza doverlo scrivere ogni volta per esteso?
Questo codice presume che:
1) Ci sia una label per ogni edit
2) Le label siano "compatibili" nel nome con le edit.
    Se ad esempio l'edit si chiama "edtNome", allora la
    label dovrà chiamarsi "lblNome".
3) Il prefisso per gli edit sia "edt" e quello per le
    label "lbl".
unit uMiaForm;
uses Classes, Forms; // La uses standard va più che bene,
                      // questa è di comodo.
Type
    TMiaForm = class(TForm)
     procedure FormCreate(Sender : TObject);
     procedure FormDestroy(Sender : TObject);
    private
      FNamesList : TStringList;
    public
      procedure AssegnaEditsAlleLabels;
    end;
implementation
procedure TMiaForm.AssegnaEditsAlleLabels;
var Name_Idx : Integer;// Indice per scorrere i nomi nella stringlist
     CurrEdt : TEdit;
     CurrLbl : TLabel;
begin
   for Name_Idx := 0 to FNamesList.Count -1 do
   begin
     CurrEdt := FindComponent('edt'+FNamesList.Strings[ Name_Idx ]);
     CurrLbl := FindComponent('lbl'+FNamesList.Strings[ Name_Idx ]);
     if Assigned( CurrEdt ) and Assigned( CurrLbl ) then
     begin
       CurrLbl.Caption := CurrEdt.Text;
     end;
   end;
end;
procedure TMiaForm.FormCreate(Sender : TObject);
var Ctrl_Idx : Integer;// Indice per scorrere i controlli
     CurrEdit : TEdit;
     EditName : String;
begin
   FNamesList := TStringList.Create;
   for Ctrl_Idx := 0 to ControlsCount -1 do
   begin
     if Controls[ Ctrl_Idx ] is TEdit then
     begin
       CurrEdit := TEdit( Controls[ Ctrl_Idx ] );
       EditName := System.Copy( CurrEdit.Name,3,
                                Length( CurrEdit.Name )-3 );
       // Nota 1: Utilizzo System.Copy semplicemente perché
       // capita di avere altri metodi "Copy" nelle form che
       // svolgono i compiti più svariati. Usando la notazione
       // estesa, non c'è rischio di sbagliarsi.
       // Nota 2: il numero "3" non è magico: si tratta infatti
       // della lunghezza sia di "edt" che di "lbl", i quali
       // ovviamente non fanno parte del nome che ci interessa.
       FNamesList.Add( EditName );
     end;
   end;
end;
procedure TMiaForm.FormDestroy(Sender : TObject);
begin
   FNamesList.Free;
end;
end.
E' scritto di getto, senza provarlo, quindi provalo...
Ciao,
Andrea

contenuto in una serie di label (label1, label2, ecc.)
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Lbl: TLabel;
  Edt: TEdit;
begin
  for I := 1 to 3 do
  begin
    Edt := FindComponent('Edit'+IntToStr(I)) as TEdit;
    Lbl := FindComponent('Label'+IntToStr(I)) as TLabel;
    if Assigned(Edt) and Assigned(Lbl) then
      Lbl.Caption := Edt.Text;
  end;
end;