Newsgroup: it.comp.lang.delphi
Titolo: Componente Dinamico

Salve a tutti.. ho un piccolo problema, che forse voi potete risolvermi:
Ho fatto un programma che mi crea dei componenti dinamici; una volta
creati però ho bisogno tramite una stringa contenente il nome di
ripescarmi il componente per modificare delle sue proprietà.. come posso
fare??
Ho provato con Tcomponent, ma niente.. cercando su internet non trovo il
mio caso.. quindi.. spero in tutti voi..
Grazie.. Nicola
--- posted by geoForum on 
http://www.delphiedintorni.it


Ciao,
puoi ciclare tra i componenti della form utilizzando la proprietà
Components, vai da 0 a ComponentCount - 1 e confronti i Name con la tua
stringa.
Per essere più chiaro ti allego un piccolo esempio per trovare un semplice
TEdit in una form.
procedure TForm1.Button1Click(Sender: TObject);
var
        Indice : integer;
begin
        for Indice := 0 to ComponentCount - 1 do
        begin
                if Components[Indice].Name = 'Edit1' then
                begin
                        with Components[Indice] as TEdit do
                        begin
                                Text := 'Trovato';
                        end;
                end;
        end;
end;
Ciao.
Cristiano



ComponenteCercato := FormContenitore.FindComponent('NomeComponente');
Ciao.

 fare??
Se crei i controlli dinamicamente, a runtime, significa che 
probabilmente (attendo tue conferme in merito) i controlli creati sono 
trattabili "al pari", cioè sono più o meno simili tra loro, a tal punto 
da poter essere "indicizzati" in qualche modo.
Il mio suggerimento è quello di evitare l'uso del metodo 
/FindComponent/, che per ogni ricerca si trova a scandire tutti i 
componenti posizionati sul contenitore, e memorizzare i riferimenti ai 
controlli visuali creati all'interno di una "lista", al momento intesa 
in senso generico, poiché in base al tipo di accesso che prevedi di fare 
(basato su un nome, basato su un indice numerico, ecc.) ci sono diverse 
tipologie di liste adatte allo scopo specifico.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

Ok questo l'ho risolto grazie.. però ora un problema è un altro.. visto
che questo lo faccio all'interno di un 3d.. creo il componente, e però
quando muore il 3d mi si distrugge il componente.. come faccio???
Poi penso che per intanto mi arrangio.. grazie ancora..


 quando muore il 3d mi si distrugge il componente.. come faccio???
Come faccio...a fare cosa? :-)
La panoramica sul problema è un pochino vaga... ;-)


La panoramica sul problema è un pochino vaga... ;-)
Scusa.. mi spiego meglio..
Allora praticamente io ricevo delle stringhe di comandi con il componente
tcpServer indy da dei pc, per monitorare altri computer.. per per ogni pc
che si collega dovrei creare una tmemo su una form con tutta la cronologia
di cosa accade, soltanto che io creo queste form con la memo durante il 3d
di tcpserver e però si distrugge quando il 3d muore...
Utilizzo delphi 7 con le indy.
Grazie


 di tcpserver e però si distrugge quando il 3d muore...
Se si distrugge quando muore il thread, significa che sei tu a 
distruggerlo, oppure che spefichi un Owner per il Memo che vai a 
creare... giusto? :-|



Ciao, 
Molto probabilmente sono delle form "normali", visualizzate con uno show,
se usassi delle form MDIChild (e quindi figlie di una form principale) non
si dovrebbero distruggere quando il tuo thread termina. Cambia il tipo di
form.
Ciao.
Cristiano


 stesso...
Posta un po' di codice... :-)
Ciao,
   Marco.


>Posta un po' di codice... :-)
If ConversazionePresenteInLista(IndirizzoIP, Conversazioni)
Then Begin
       Form := PFormDaLista(IndirizzoIP, Conversazioni) ;
       Form^.mmoMessaggi.Lines.Add(Parametro) ;
       Form^.lblUltimoMessaggio.Caption := 'Ora ultimo messaggio: ' +
DateToStr(Date()) + ' - ' + TimeToStr(Time()) ;
       Form^.Show ;
       Form^.SetFocus ;
     End
Else Begin
       AggiuntaConversazioneALista(IndirizzoIP,
TfrmConversazione.Create(Application), Conversazioni) ;
       Form := PFormDaLista(IndirizzoIP, Conversazioni) ;
       Form^.tcpClient.Host := IndirizzoIP ;
       Form^.Caption := 'Stazione ' + StazioneDaLista(IndirizzoIP, Utenti) ;
       Form^.IP := IndirizzoIP ;
       Form^.Stazione := edtStazione.Text ;
       Form^.lblStazione.Caption := 'Stazione: ' +
StazioneDaLista(IndirizzoIP, Stazioni);
       Form^.lblIP.Caption := 'Indirizzo IP: ' + IndirizzoIP ;
       Form^.lblOraApertura.Caption := 'Ora apertura: ' +
DateToStr(Date()) + ' - ' + TimeToStr(Time()) ;
       Form^.mmoMessaggi.Lines.Add(Parametro) ;
       Form^.lblUltimoMessaggio.Caption := 'Ora ultimo messaggio: ' +
DateToStr(Date()) + ' - ' + TimeToStr(Time()) ;
       Form^.Show ;
       Form^.SetFocus ;
     End;
