Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: naderit - Giugno 04, 2016, 04:31:20 pm

Titolo: richiamre procedura
Inserito da: naderit - Giugno 04, 2016, 04:31:20 pm
Buongiorno, sono nuovo e da vero principiante vorrei chiedere se è possibile richiamare una procedura da altra procedura?


 
Codice: [Seleziona]
procedure TForm1.Button2Click(Sender: TObject);
begin
    MiaProcedura();
end;

procedure MiaProcedura();

begin

end;               
   

Grazie mille
Titolo: Re:richiamre procedura
Inserito da: Avogadro - Giugno 04, 2016, 07:47:44 pm
Adesso non ricordo tutti i dettagli, ma occore rispolverare le regole di visibilità di variabili, procedure  e funzioni.

Rispetto al pascal standard le versioni attuali hanno diversi approcci per gestire la riusabilità del codice.

Il caso piu' semplice in lazarus è dichiarare la procedura prima della procedura chiamante  all' interno della unit, dopo la clausa "implementation"

se si vogliono usare procedure  di altre unit occorre usare la clausa "uses"

Cut & paste da un mio software:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, TAGraph, TASeries, TADbSource, TAStyles,
  PrintersDlgs, Forms, Controls, Graphics, Dialogs, Menus, ActnList, ComCtrls,
  DBGrids, DbCtrls, StdActns, ExtDlgs, StdCtrls, RLReport, RLPDFFilter,
  ZConnection, ZDataset, db, strutils, math, fpexprpars, Clipbrd, LCLIntf,
  LCLType, unit2, unit3, unit4, UNIT5, LR_Class, LR_DBSet;

type

  { TForm1 }

  TForm1 = class(TForm)
    CalendarDialog1: TCalendarDialog;
    Chart1: TChart; 
....

implementation

uses
    OSPrinters,  Printers;
{$R *.lfm}

{ TForm1 }
function t95(n:integer): real;
// t student at 95 %
var t: real;
begin
  t:=2.0;
  if n<1 then
     t:=0;
  case n of
       1:t:=   12.71;
       2:t:=   4.3 ;
       3:t:=   3.18;
       4:t:=   2.78;
       5:t:=   2.57;
       6:t:=   2.45;
       7:t:=   2.36;
       8:t:=   2.31;
       9:t:=   2.26;
       10:t:=   2.23;
       11:t:=   2.2;
       12:t:=   2.18;
       13:t:=   2.16;
       14:t:=   2.14;
       15:t:=   2.13;
       16:t:=   2.12;
       17:t:=   2.11;
       18:t:=   2.1;
       19:t:=   2.093;
       20:t:=   2.086;
       end;
  t95:=t;
end;
     
...

procedure TForm1.MenuItem10Click(Sender: TObject);
// references
//  1. http://www.itl.nist.gov/div898/handbook/pmc/section3/pmc321.htm#Factors%20for%20Calculating%20Limits
//     
....

 memo1.Lines.Add(format('Limite di ripetibilità= sxb*s^1/2*t= %8.4f %s',[sxb*sqrt(2)*t95(nd-1),ztable3LBLY.AsString]));
 
...

end;

Titolo: Re:richiamre procedura
Inserito da: supercim - Giugno 05, 2016, 06:21:50 pm
Io faccio in questo semplice modo:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);

  private
    { private declarations }
    procedure videata1;

  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
     videata1;
end;



procedure TForm1.videata1;
begin
     Label1.Caption:='Intestazione';
end;

end.
                   


Inserisco in: private
le mie procedure personali ( videata1 )
 e poi le chiamo, nel corso del programma. 
In questo caso in: procedure TForm1.FormCreate(Sender: TObject);
Titolo: Re:richiamre procedura
Inserito da: xinyiman - Giugno 08, 2016, 08:27:48 am
Assolutamente si, ho scritto degli articoli al riguardo:

Per procedure e funzioni vedere:
http://www.lazaruspascal.it/index.php?page=29

Mentre per le funzioni ricorsive vedere:
http://www.lazaruspascal.it/index.php?page=32
Titolo: Re:richiamre procedura
Inserito da: naderit - Giugno 08, 2016, 02:02:08 pm
Benissimo
grazie mille per le risposte