Italian community of Lazarus and Free Pascal
Programmazione => Generale => Topic aperto da: Maverich - Novembre 25, 2011, 12:36:54 am
-
Ho installato CodePythoon e fatto delle prove, sia in Windows che Linux:
trovo una differenza nelle assegnazioni rispetto a Delphi;
quando intercetto un'evento di un Form
es:
frm_Test -> Form2 creato a runtime (tolto dai form creati automaticamente)
act_Fine -> TAction del form creato a runtime
in pratica intercetto l'evento di una TAction avvenuta su un form figlio, per eseguire operazioni (in questo caso distruggo il form creato a runtime).
//questa assegnazione non viene accettata
frm_Test.act_Fine.OnExecute := LiberaForm;
unit1.pas(45,46) Error: Wrong number of parameters specified for call to "LiberaForm"
magari in Fpc cambianole regole di dichiarazione e/o ci sono delle impostazioni da settare per la compatibilita' con Delphi. ???
-- Form1 --
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ActnList,
StdCtrls, ExtCtrls, Unit2;
type
{ TForm1 }
TForm1 = class(TForm)
act_Avvia: TAction;
ActionList1: TActionList;
Button1: TButton;
procedure act_AvviaExecute(Sender: TObject);
private
{ private declarations }
frm_Test: TForm2;
procedure LiberaForm(Sender: TObject);
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.act_AvviaExecute(Sender: TObject);
begin
frm_Test := TForm2.Create(nil);
frm_Test.Parent := Self;
frm_Test.Top :=0;
frm_Test.Left := 0;
frm_Test.act_Chiude.OnExecute := LiberaForm;
frm_Test.Show;
end;
procedure TForm1.LiberaForm(Sender: TObject);
begin
FreeAndNil(frm_Test);
end;
end.
-- Form2 --
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ActnList;
type
{ TForm2 }
TForm2 = class(TForm)
act_Chiude: TAction;
ActionList1: TActionList;
procedure act_ChiudeExecute(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm2;
implementation
{$R *.lfm}
{ TForm2 }
procedure TForm2.act_ChiudeExecute(Sender: TObject);
begin
Close;
end;
end.
-
Non ho mai usato CodeTyphon, come ti dicevo ho già incaricato qualcuno di scrivere qualcosa al riguardo, e mi ha detto che nel week end avrebbe provveduto. Aspettiamo lui che lo conosce!
-
Il problema non credo sia di CodeTyphon, in quanto CodeTyphon è solo una release lazarus, ma il problema è sulla sintassi del compilatore, infatti se vuoi la compatibiltà con delphi devi sostituire {$mode objfpc}{$H+} con {$mode delphi} su tutte le tue unit, e nelle opzioni progetto andare a dire che vuoi la sintassi "simil delphi" ....
Come ho detto a xinyiman in questo week scriverò due righe sulla distro lazarus che prende il nome di CodeTyphon, niente di stratosferico in quanto è molto semplice da installare.
PS: devi cancellare tutti i file oggetto che si trovano nella cartella lib e ribuildare (che parola brutta) il progetto
G.
-
la dichiarazione di assegnazione vuole @
frm_Test.act_Chiude.OnExecute := @LiberaForm;
cosi' funziona come in Delphi.
quando viene chiusa l'applicazione il debug segnala
"il progetto ha sollevato un'eccezione di classe "External SIGSEVV"
invece a runtime non avviene.
idee su come evitare o risolvere ?
ho letto altre segnalazioni simili per Lazarus.
test fatto su WinXP su virtualBox,
provo anche su Win7 e Linux.
poi passo ai test con FireBird + Ibx ed ai componenti Tcp/Ftp
(sia LNet che Indy)
ho modificato i colori dei vari colori Opzioni->Editor-Visualizza->Colori;
sapete dove viene scirtto ? , cosi' lo applico a tutte le installazioni.
ciao.
^^^ variazioni ^^^
procedure TForm1.LiberaForm(Sender: TObject);
begin
frm_Test.Close;
FreeAndNil(frm_Test);
ActionList1 := nil;
close;
end;
procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
FreeAndNil(ActionList1);
end;
-
Che strano, Phyton é un'altro linguaggio, come fa ad essere un ide di Pascal. ???
-
La cosa strana è che a me non tira fuori nessun errore, nemmeno dall'IDE :o
Che strano, Phyton é un'altro linguaggio, come fa ad essere un ide di Pascal. ???
Si chiama CodeTyphon, non CodePython ;)
-
Allora il titolo é sbagliato.