Newsgroup: it.comp.lang.delphi
Titolo: metodo close form runtime

Ciao,
    nella mia applicazione ho creto un form a rutime con tutte le sue belle
cosine.....
myform:=tform.create(...)
......
A questo punto vorrei gestire l'evento onclose ma non ne ho un'idea di come
fare.
Spero di essermi spiegato
Saluti
Giò
--
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
/\/\/\/\/\/\/\/\/\
GiàVanni Giò17 webmaster of 
www.eretika.com
ICQ: #74691597
Undergraduate students of Computer Science in Bologna University.
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
/\/\/\/\/\/\/\/\/\

 fare.
Nell'evento OnClose hai un parametro action di tipo TCloseAction che dice al
sistema cosa fare con la form. puoi dare caFree, caHide, caNone e
caMinimize. Dai uno sguardo all'help per le differenze tra le varie opzioni
Ciao
 Max


Il problema è che io oltre a chiudere il form che ho creato a runtime volevo
anche settare una variabile....
Gio


nella unit che crea myform definisci una procedura di questo tipo:
procedure DoClose(Sender: TObject);
begin
  //Set myvariable
end;
dopo aver creato myform assegna all'evento OnClose la procedure DoClose:
myform.OnClose := DoClose;
Quando verra' scatenato l'evento OnClose verra' cosi' eseguita la procedura
DoClose.
Spero serva.
theMarty

 ha scritto nel messaggio
news:b6ri4i$1ha$1...@le.cs.unibo.it...

Devi crearti una procedura (o funzione) che abbia gli stessi parametri che
servono all'evento
OnClose. Quando crei la tua form a runtime gli assegni all'evento OnClose la
tua procedura
in cui fai tutto quello che ti serve e il gioco è fatto.


Non è consentito un assegnamento del genere in quanto OnClose richiede 2
parametri e invece doclose ne ha solo 1 quindi non si può fare
l'assegnamento
myform.OnClose := DoClose;
Ciao Giò

 in cui fai tutto quello che ti serve e il gioco è fatto.
ho provato a fare in questo modo......
procedure doclose(Sender: TObject; var Action: TCloseAction);
begin
showmessage('ciao')
end;
ma quando tento di fare l'assegnamento
mioform.onclose:=doclose(sender,Azione);
//azione è settata a cafree ed è di tipo TCloseAction
mi da un errore di not enough actual parameter.
Come posso fare????

 l'assegnamento
Vero.
allora definisci:
procedure DoClose(Sender: TObject; var Action: TCloseAction);
e poi:
myform.OnClose := DoClose;
theMarty

Come posso fare????
type
  TForm2 = class(TForm)
    procedure MyOnClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.MyOnClose;
begin
  ShowMessage('...qui fai quello che vuoi...');
end;
....
....
....
procedure TForm1.Button1Click(Sender: TObject);
var
  F: TForm2;
begin
  F := TForm2.Create(nil);
  try
    F.OnClose := F.MyOnClose;
    F.ShowModal;
  finally
    F.Free;
  end;
end;
...
-- 
Andrea Laforgia
www.geocities.com/andrealaforgia
"640kb of memory should be enough for anyone." -- Bill Gates.


Non esiste un modo per farlo senza creare un form "fantasma" come dici tu??
(almeno se ho ben capito il codice che hai postato)

Non esiste un modo per farlo senza creare un form "fantasma" come dici tu??
Che intendi per form "fantasma" ?
Nel mio codice esiste una classe TForm2 (che equivale alla tua TForm).


Penso di aver risolto....
Posto il codice per chi dovesse avere lo stesso problema.....
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure doClose(Sender: TObject; var Action: TCloseAction);
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  mioform:tform;
  op: tcloseaction;
begin
  mioform:=tform.create(nil);
  mioform.Parent:=nil;
  mioform.Visible:=true;
  mioform.Enabled:=true;
  op:=cafree;
  mioform.OnClose:=doclose;
  mioform.Destroy;
end;
procedure tform1.doClose(Sender: TObject; var Action: TCloseAction);
  begin
    showmessage('ciao');
  end;
end.
grazie a tutti
--
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
/\/\/\/\/\/\/\/\/\
GiąVanni Giņ17 webmaster of 
www.eretika.com


  mioform.Destroy;
Devi usare Free, non Destroy e, comunque, se usi caFree nell'OnClose,
non devi eseguire il Free.



    Via De Gasperi, 14 - 42019
    Scandiano (Reggio Emilia)

 Non capisco bene quale sia il vostro problema.
[..]
Nessun problema per me.
theMarty