Newsgroup: it.comp.lang.delphi
Titolo: catturare evento di oggetto creato a runtime

Saluti al gruppo,
spiego:
dopo aver creato a runtime un numero x oggetti TEdit vorrei poter 
catturare l'evento onchange di uno di essi.
Posto il codice finora steso:
procedure TForm1.FormCreate(Sender: TObject);
var x,y,w,h,cont: Integer;
var nome: String;
begin
x:=10;
y:=10;
w:=100;
h:=20;
nome:= 'Edit';
      for cont := 0 to 8 do
          begin
               nome:= nome + inttostr(cont);
               CreateControl(TEdit, nome, x, y, w, h); //funzione presa 
dall'help di delphi
               x:=x+110;
               nome:= 'Edit'
          end;
end;


Lascio perdere il pistolotto "leggi le FAQ" oppure "cerca su Google" ma mi
permetto di correggere il tuo codice perche' vedo alcune ingenuita'.
Io farei cosi' (e nel frattempo ti spiego come assegnare un evento ad un
controllo creato a runtime):
Inanzitutto dichiari il prototipo dell'evento OnChange nella sezione
Private o
Public della tua form:
private
    procedure EditChange(Sender: TObject);
Poi crei a runtime gli oggetti nel create della Form:
procedure TForm1.FormCreate(Sender: TObject);
const
 NomeOggetto = 'Edit';
var
 intX,intY,intW,intH, intCont: Integer;
 SuffissoNome : char;
begin
// imposto la dimensione dell'array
SetLength(arrEdit, intNumEditDaCreare);
SuffissoNome := '0';
intx:=10; inty:=10; intw:=100; inth:=20;
for intCont := 0 to High(arrEdit) do
begin
 arrEdit[intCont] := TEdit.Create(Self);
 with arrEdit[intCont] do
 begin
  // creo dinamicamente il nome dell'oggetto
   Name := NomeOggetto + SuffissoNome;
   Tag := StrToInt(SuffissoNome);
   Inc(SuffissoNome);
   Text := Name;
   // imposto la sua posizione
   Left := IntX;
   Top := IntY;
   Height := IntH;
   Width := IntW;
   Parent := Form1;
   // assegno al gestore dell'evento la procudera che
   // lo gestira'
   OnChange := EditChange;
   Inc(IntY, 35)
 end; // with
end; // for
end;  // FormCreate
arrEdit e' un array dinamico dichiarato in questa maniera:
  private
    arrEdit : array of TEdit;
In questa modo, per tutto il corso della vita della tua applicazione potrai
agire sugli "n" controlli creati a runtime (puoi variare il loro numero
modificando la costante globale intNumEditDaCreare) lavorando sull'array
appena dichiarato. Ovviamente dovrai poi distruggere gli oggetti alla
chiusura
della form:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
 intCont : integer;
begin
 for intCont := 0 to High(arrEdit) do
  arrEdit[i].Free;
end;
Infine scrivi il codice della procedura che gestira' l'evento onChange,
per esempio:
procedure TForm1.EditChange(Sender: TObject);
begin
 case (Sender as TEdit).Tag of
  0 : ShowMessage('Evento nell''edit 0');
  1 : ShowMessage('Evento nell''edit 1');
  // ecc..
 end; //case
end; // EditChange
Spero di non aver dimenticato nulla.
Ciao.
--
ACSH
[D4]
---------------------------
Chi fa da se'
fatica il doppio

Sarebbe utile aggiungerla alle FAQ insieme a come si ricostruisce un indice
di una tabella Paradox comunque.
1 attenzione alle Dialogs e StdCCtrls delle Uses
2 dichiarare (private è meglio) la procedura
     procedure MiaEditClick(Sender: TObject);
3 definire la procedura
              Procedure TForm2.MiaEditClick(Sender: TObject);
              Begin
                  ShowMessage ('ciao') ;
              End ;
4 assegnare il Parent
  MiaEdit.Parent := Form2 ;
Il codice è qui sotto. Per la vettorizzazione penso che ci penserai tu.
Ciao
Mario (
mari...@inwind.it
)
unit uRunTimeEventoMetodo;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls ;
type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure MiaEditClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.MiaEditClick(Sender: TObject);
begin
  ShowMessage ('ciao') ;
End ;
procedure TForm2.FormCreate(Sender: TObject);
Var
   MiaEdit : tEdit ;
   Nome, Testo : String ;
begin
  MiaEdit := tEdit.Create (Self) ;
  MiaEdit.Parent := Form2 ;
  MiaEdit.OnClick := MiaEditClick ;
end;
end.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Ringrazio molto dell'esempio č si sono un NewBy di Delphi quindi 
immagino che le ingenuitą si sprechino.
Ancora grazie a presto.
Daniele