unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, LocalBlock, end_uses; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var s: String; begin s := 'TEST'; block(procedure var a: Integer; b: Integer; begin a := 1; b := 2; s := s + IntToStr(a+b); end ); ShowMessage(s); //TEST3 と表示される end; procedure TForm1.Button2Click(Sender: TObject); var s: string; begin s := 'TEST'; local.block := procedure var a: Integer; b: Integer; I: Integer; begin a := 1; b := 2; s := s + '-' +IntToStr(a+b); a := 0; for I := 0 to 10 do begin a := a + I; end; //0+1+2+…10=55 s := s + '-' +IntToStr(a); end; ShowMessage(s); //TEST-3-55 と表示される end; procedure TForm1.Button3Click(Sender: TObject); var I: Integer; Value: Integer; begin Value := 0; for I := 0 to 9 do begin local.block := procedure var I: Integer; begin for I := 0 to 9 do begin local.block := procedure var a: Integer; I: Integer; begin a := 0; for I := 0 to 10 do begin a := a + I; end; Value := Value + a; end; end; end; end; ShowMessage(IntToStr(Value)); //55*10*10で、5500と表示される end; //////////////////////////////////////// procedure TForm1.Button4Click(Sender: TObject); var s: String; begin s := 'TEST'; ShowMessage( block_string(function: string var a, b: string; begin a := 'A'; b := 'B'; Result := s + a+ b; end ) ); //TESTAB と表示される end; procedure TForm1.Button5Click(Sender: TObject); var s: String; begin s := 'TEST'; s := s + local.result(function: string var a, b: string; begin a := 'A'; b := 'B'; Result := a + b + s; end ); ShowMessage(s); //TESTABTEST と表示される s := 'TEST'; s := s + IntToStr( local.result(function: Integer var a, b: Integer; begin a := 1; b := 2; Result := a + b; end ) ); ShowMessage(s); //TEST3 と表示される end; procedure TForm1.Button6Click(Sender: TObject); var s: String; begin s := 'TEST'; local.block := function: string var a, b: string; begin a := 'A'; b := 'B'; Result := a + b + s; end; s := s + local.result; ShowMessage(s); //TESTABTEST と表示される s := 'TEST'; local.block := function: Integer var a, b: Integer; begin a := 1; b := 2; Result := a + b; end; s := s + IntToStr(local.result); ShowMessage(s); //TEST3 と表示される end; end.