Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Maverich - Novembre 25, 2011, 12:36:54 am

Titolo: CodePythoon/Lazarus
Inserito 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.
Titolo: Re:CodePythoon/Lazarus
Inserito da: xinyiman - Novembre 25, 2011, 08:00:48 am
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!
Titolo: Re:CodePythoon/Lazarus
Inserito da: Goblin - Novembre 25, 2011, 02:18:44 pm
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.
Titolo: Re:CodePythoon/Lazarus
Inserito da: Maverich - Novembre 25, 2011, 02:58:27 pm
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;     
Titolo: Re:CodePythoon/Lazarus
Inserito da: Loryea - Novembre 25, 2011, 03:01:57 pm
Che strano, Phyton é un'altro linguaggio, come fa ad essere un ide di Pascal.  ???
Titolo: Re:CodePythoon/Lazarus
Inserito da: Legolas - Novembre 25, 2011, 04:04:37 pm
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 ;)
Titolo: Re:CodePythoon/Lazarus
Inserito da: Loryea - Novembre 25, 2011, 05:12:21 pm
Allora il titolo é sbagliato.