ciao Luca
come già sai, solitamente ogni form ha la definizione della sua classe in una unit.
Ad esempio, creando una nuova applicazione abbiamo anche in automatico un form a disposizione. Come vedi nella sezione "implementation" ho usato la clausola uses per poter vedere la classe TfmSecForm contenuta in "usecondaryform.pas".
Ho anche aggiunto un bottone e nell'evento onclick mostro la seconda form.
unit umain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TfmMain }
TfmMain = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
fmMain: TfmMain;
implementation
{$R *.lfm}
uses usecondaryform;
{ TfmMain }
procedure TfmMain.Button1Click(Sender: TObject);
begin
fmSecForm.Show;
end;
end.
La seconda form ha questa definizione:
unit usecondaryform;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
type
TfmSecForm = class(TForm)
private
{ private declarations }
public
{ public declarations }
end;
var
fmSecForm: TfmSecForm;
implementation
{$R *.lfm}
end.
Ora bisogna fare qualche considerazione:
- i due form sono istanziati automaticamente alla partenza dell'applicazione (vedi sorgente del progetto .lpr; è per questo motivo che in button1 posso usare il metodo Show senza prima istanziare nulla;
- in TFmMain uso un puntatore fmSecForm che mi sono trovato automaticamente dichiarato in usecondaryform.pas; questo perchè (1) l'applicazione mi ha creato una istanza di TSecForm e ha memorizzato l'indirizzo nel puntatore fmSecForm (2) il puntatore è visibile poichè è nella sezione interface;
- per evitare che alla partenza l'applicazione mi istanzi tutte le form (magari non è il caso di occupare così tante risorse se pooi magari non vengono usate), bisogna togliere l'autocreate in Menù -> Progetto -> Opzioni Progetto -> Form; ogni form che non è tra quelle create in automatico deve essere prima istanziata (TForm.Create())
Spero di essere stato chiaro e vista l'ora non è affatto scontato ;)