Delphiの基本構文
変数の宣言(var)
var を使ってローカル変数を宣言することが出来ます。
procedure TForm1.Button1Click(Sender: TObject); var st : string; //string(文字列)型変数stの宣言(VBのDimです) begin //ここで変数stを使うことが出来る st := '変数stへ文字の代入'; end; procedure TForm1.Button2Click(Sender: TObject); begin //ここでは変数stを使えない st := '変数stへ文字の代入をしたらエラー'; //エラーになる end;
グローバル変数も var を使って変数を宣言することが出来ます。
多用すると誤って値を変えてしまったりするので注意してください。
(プロジェクト全体でどうしても共通使用する必要がある場合のみに限定したほうが良い)
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
st : string;
//実装部
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
//ここで変数stを使うことが出来る
st := '変数stへ文字の代入';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//ここでも変数stを使うことが出来る
st := '変数stへ文字の代入';
end;
変数の宣言(classのフィールド変数として宣言する)
クラスの private や public にフィールド変数として宣言することが出来ます。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
private_st : string; //TForm1クラス内でのみ使えるプライベート変数
public
{ Public 宣言 }
public_st : string; //TForm1クラス外からも使えるパブリック変数
end;
var
Form1: TForm1;
//実装部
implementation
{$R *.dfm}
procedure hoge();
begin
//ここで変数Form1.public_stは使える
Form1.public_st := '変数stへ文字の代入';
//ここで変数Form1.private_stは使えない
Form1.private_st := '変数stへ文字の代入'; //エラーになる
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//ここで変数private_st、public_stを使うことが出来る
Self.private_st := '変数stへ文字の代入';
Self.public_st := '変数stへ文字の代入';
//Self.は省略することができる
private_st := '変数stへ文字の代入';
public_st := '変数stへ文字の代入';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//ここでも変数private_st、public_stを使うことが出来る
Self.private_st := '変数stへ文字の代入';
Self.public_st := '変数stへ文字の代入';
//Self.は省略することができる
private_st := '変数stへ文字の代入';
public_st := '変数stへ文字の代入';
end;
変数の基本型
var
st:string; //文字列型
c:char; //文字型
i:inreger; //32ビット符号付き整数型(VBではLong)
i:int64; //64ビット符号付き整数型
cur:currency; //通貨型
s:single; //単精度浮動小数点型
d:double; //倍精度浮動小数点型
e:extended; //高精度浮動小数点型
上記以外にも沢山の型がある。上記等は基本型なのでクラスではない為、使用しなくなってもメモリ破棄など不要。変数への値の代入
Delphiでは変数への代入に := を使う。//以下は変数iに0を代入している i := 0; //以下は変数iに1を足した値を代入している i := i + 1; //以下は変数stに文字列「ほげほげ」を代入している st := 'ほげほげ'; //以下は変数stにの前後に文字を足して代入している st := '「' + st + '」'; //以下は変数dに1.25を代入している d := 1.25; //以下は変数dから2を引いて代入している d := d - 2;
配列変数の宣言
//integer(整数)型の配列変数iarr[0~1]の宣言 var iarr:array[0..1] of integer; //string(文字)型の配列変数sarr[0~2]の宣言 var iarr:srray[0..2] of string; //integer(整数)型の動的配列 idarr[]の宣言 var idarr:array of integer;
配列変数に値を入れる
//以下は変数iarr[0]に0を代入している iarr[0] := 0; //以下は変数iarr[1]に100を代入している iarr[1] := 100; //以下は変数sarr[0]に文字「abc」を代入している sarr[0] := 'abc'; //以下は変数sarr[1]に文字「あいうえお」を代入している sarr[1] := 'あいうえお'; //以下は変数sarr[2]に文字「def」を代入している sarr[2] := 'def'; //動的配列のサイズを設定する //idarrは3個、つまりidarr[0~2]が使用できるようになる SetLength(idarr,3); //値の代入 idarr[0] := 1; idarr[1] := 2; idarr[2] := 3; //動的配列のサイズを変更する //idarrは4個、つまりidarr[0~3]が使用できるように再設定される SetLength(idarr,4); //値の代入 idarr[3] := idarr[0]+idarr[1]+idarr[2];
条件文
if a=b then begin //a=bの時の処理; end; if a=b then begin //a=bの時の処理; end else begin //a=bでは無い時の処理 end; if a=b then begin //a=bの時の処理; end else if b=c then begin //b=cの時の処理; end else begin //a=bでも無くb=cでも無い時の処理; end; if (a=b) and (b=c) then begin //a=bかつb=cの時の処理; end; if (a=b) or (b=c) then begin //a=b又はb=cの時の処理; end; //begin~endを省略した使い方 if a=b then a=20; if a=b then a=20 else b=20;
ループ(for)
以下は変数iに1~10の値を代入してc:=c+iを10回ループしているfor i=1 to 10 do begin c:=c+i; end;以下は変数iに10~1の値を代入してc:=c+iを10回ループしている
for i=10 downto 1 do begin c:=c+i; end;
ループ(while)
条件が真(以下ではiが10未満)の間ループする。が、iが8になったら抜けるi := 0; while i<10 do begin i := i + 1; if i = 8 then break; end;
構造体(record)
Delphiは暗黙の了解で構造体やクラス型の名前の先頭は大文字Tから始まる
type
TMyRecord = record
name:string;
age:integer;
end;
procedure TForm1.Button1Click(Sender: TObject);
var mr:TMyRecord;
begin
mr.name:='ほげ';
mr.age:=24;
end;
クラス(class)
いきなりですが、それなりのサンプルを提示
unit Unit2;
interface
type
TMyClass=class(TObject)
strict private
//同一ユニット内のクラスを含む他のクラスからは見えない、
//真にプライベートな変数やメソッドやプロパティやイベント等の宣言場所
private
//宣言元ユニットの中でのみアクセス可能な変数やメソッドやプロパティやイベント等の宣言場所
//クラスのプライベートなメンバ変数には接頭辞「f」を付ける暗黙の了解がある
fname:string;
fage:integer;
function getage():integer;
procedure setage(value:integer);
strict protected
//宣言したクラスおよび派生クラスからしか見えない、真にプロテクテッドな変数やメソッドやプロパティやイベント等の宣言場所
protected
//宣言ユニットの中、宣言したクラスおよび派生クラスからもアクセス可能な変数やメソッドやプロパティやイベント等の宣言場所
public
//アクセス制限がない変数やメソッドやプロパティやイベント等の宣言場所
Constructor Create();
property name:string read fname write fname; //fnameをプロパティnameで公開する。
property age:integer read getage write setage; //fageをageプロパティとして関数getageとsetageを介して公開する。
published
//設計時に使用可能な変数やメソッドやプロパティやイベント等の宣言場所
end;
implementation
constructor TMyClass.Create;
begin
//コンストラクター。このクラスが作成されるときに実行される
fname:='';
fage:=0;
end;
function TMyClass.getage: integer;
begin
result:=fage;
end;
procedure TMyClass.setage(value: integer);
begin
if value>=0 then fage:=value;
end;
end.
上記クラスを使うサンプル
procedure TForm1.Button1Click(Sender: TObject); var mc:TMyClass; begin mc:=TMyClass.Create; //インスタンスの作成 mc.name := 'ほげ'; mc.age := 24; mc.Free; //破棄する(メモリ解放される) end;
クラス2(class)
コンストラクターとデストラクター
unit Unit3;
interface
uses System.Classes;
type
TMyClass2=class(TObject)
private
fstl:TStringList;
public
procedure addList(value:string);
function getValue(index:integer):string;
Constructor Create();
Destructor Destroy;
end;
implementation
{ TMyClass2 }
procedure TMyClass2.addList(value: string);
begin
fstl.Add(value);
end;
constructor TMyClass2.Create;
begin
fstl:=TStringList.Create;
end;
destructor TMyClass2.Destroy;
begin
fstl.Free;
end;
function TMyClass2.getValue(index: integer): string;
begin
result:='';
if index<fstl.Count then
begin
result:=fstl[index];
end;
end;
end.
上記クラスを使うサンプル
procedure TForm1.Button1Click(Sender: TObject);
var mc2:TMyClass2;
begin
mc2:=TMyClass2.Create;
mc2.addList('ほげ');
mc2.addList('ほげほげ');
showmessage(mc2.getValue(0));
mc2.Free;
end;
