Newsgroup: it.comp.lang.delphi
Titolo: Trasfomare una stringa in nome componente

come da oggetto devo assegnare ad una variabile tdbedit il nome contenuto in
una stringa come posso fare??
Grazie mille.



var
  dbeditstringa: TDBEdit;
  found: Boolean;
begin
  found := False;
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TDBEdit) and 
       (TDBEdit(Components[i]).Name = Edit1.Text) then
    begin
      dbeditstringa := TDBEdit(Components[i]);
      // Adesso la var. dbeditstringa punta al dbedit il cui Name
      // è indicato in Edit1.Text
      found := True;
    end;
  if not found then
    MessageDlg('Il nome del componente indicato non esiste!", mtError,
[mbOk], 0);
Volevi questo?
	MarcO BOrtOlani
	info @ 
marcobortolani.it

In data Tue, 7 Dec 2004 10:19:00 +0100, Ulisse® ha scritto:

vartdbedit := TDBEdit(FindComponent('nome contenuto nella stringa'));
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Oggi c'è una grande battaglia di idee ma alla 
fine non ci saranno ne vinti, ne vincitori, ne idee!"
S. Benni da Elianto


Ho detto una fregnaccia...
Scusate sono in un report quindi il controllo č qrdbedit quindi credo che
nel report non funzioni il findcomponent dato che la variabile č sempre
"nil"
Ciao.

 "nil"
Credo che il metodo FindComponent funzioni correttamente anche 
all'interno del report...
A parte questo, sono abbastanza sicuro che il controllo QRDBEdit non 
esista dato che i report non sono "form interattive", ma non ho 
controllato quindi potrei sbagliarmi.
Secondo me, per avere chiara la situazione è meglio se posti qualche 
pezzo di codice significativo. :-)
-- 
Marco «Alka» Breveglieri
  ABLS Team S.n.c. - Software & Web
  Via De Gasperi, 14
  42019 Scandiano (Reggio Emilia)
 
http://www.abls.it


Hai ragione!!! Oggi "sbarrello" da tutti i lati...
QRDBTEXT è il controllo!!!
Il codice...
diciamo che ho 24 campi qrdbtext  da 1 a 24 (quindi qrdbtext1 ecc.)
procedure TqrFasceM.QRBand3BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var Campo: Tqrdbtext
     i           : integer
begin
For i := 1 to 24
do begin
   Campo:=  "  la stringa 'Qrdbtext'+inttostr(i) "
   ...
   ...
end;

 end;
occhio alle maiuscole/minuscole, la ricerca del componente pernome è case
sensitive.


 end;
Il codice che hai scritto non è nemmeno compilabile. :-)
Non digitare qui il codice modificato ma fai un semplice "copia e 
incolla" da cui, al massimo, rimuovi le righe di troppo, altrimenti 
rischio di perdere un'ora a correggere errori che hai commesso nella 
digitazione e che magari non ci sono nel tuo codice e non hanno per 
giunta nulla a che vedere con il problema. :-(


 Ciao, Anto', [37, 143, AQ]
Grande Anto' č sicuramente questo č l'unica cosa che non ho provato....
Forza Abruzzo Compŕ!!!!
UlisseŽ (CH)

 Niente continua a restituire nil!!!
Secondo me, se non posti il codice "nudo e crudo" che usi per reperire 
il componente (al posto di quello modificato che hai inserito nei 
messaggi precedenti), sarà difficile individuare l'errore.


 Niente continua a restituire nil!!!
Secondo me, se non posti il codice "nudo e crudo" che usi per reperire
il componente (al posto di quello modificato che hai inserito nei
messaggi precedenti), sarà difficile individuare l'errore.
Ecco la procedura...
procedure TqrFasceM.QRBand3BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var I  :integer;
    C  :TQRDBText;
begin
 with dmdati
   do begin
      for I:=1 to 24
       do begin
         C:=TQRDBText(FindComponent('QRDBText'+inttostr(i)));
 //Proprietà del controllo
         if C = nil
         then exit
//I campi della query si chiamano O1, O2 ecc..
         else case tgiornifasce.fieldbyname('O'+inttostr(i)).asinteger of
               1: C.Color:=rgb(255,128,240);
               2: C.color:=rgb(255,255,128);
               3: C.color:=rgb(128,255,128);
               4: C.color:=rgb(171,240,252);
              end;
       end;
   end;
end;

  with dmdati
Se "dmdati" è un DataModule, ecco uno dei casi in cui l'uso di *with* 
provoca errori indesiderati.
O fai a meno del costrutto *with* indicando gli identificatori per 
esteso, oppure usi l'identificatore /Self/ nella chiamata al metodo 
FindComponent per esplicitare che il metodo FindComponent che desideri 
chiamare è riferito al Report e non al DataModule.
Self.FindComponent()
Ciao! :-)


 ha scritto nel messaggio
news:Ffltd.265761$b5.13...@news3.tin.it...
Self.FindComponent()
Ciao! :-)
Va alla grande grazie mille Marco!!!!!
Ciao