Delphiの基本構文
変数の宣言(var)
//string型変数stの宣言(VBのDimです) var st:string;
変数の基本型
var st:string; //文字列型上記以外にも沢山の型がある。上記等は基本型なのでクラスではない為、使用しなくなってもメモリ破棄など不要。
c:char; //文字型
i:inreger; //整数型(VBではLong) s:single; //小数型 d:double; //倍精度小数型整数型
変数への値の代入
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;