文字列の一部を参照する
EditコンポーネントやMemoコンポーネントの文字列や,文字型変数に代入した文字列の一部を参照したいときは, [copy]関数を使いますが,ここではその使い方を紹介します。
まず,フォームにボタンとエディタコンポーネントを2つ設置します。
そして,Button1Clickイベント呼び出し,以下のように記述してみます。
procedure TForm1.Button1Click(Sender: TObject);
ver
s1:string; //文字列型の変数を宣言します
begin
s1:='delphi サンプルプログラムです。';
edit1.Text:=copy(s1,1,6); //s1の文字列の1文字目から6文字をコピーしてedit1.Textに代入します
edit2.Text:=copy(edit1.Text,4,2); //edit1.Textの4文字目から2文字をedit2.Textに代入します
end;
これを実行すると,edit1には「delphi」と表示され,edit2には「ph」と表示されます。
この「copy」はeditコンポーネントやmemoコンポーネントに書き込まれた文字列をそのまま使うことはできませんので,一旦文字型変数に代入して使用します。
次に「copy」を使って,エディタコンポーネントに入力した文字を,イメージコンポーネントに1文字ずつ書き込むプログラムを作ってみます。
フォーム上に設置するものは,ボタンコンポーネントとエディタコンポーネント2個(文字入力用と数字入力用です),そしてイメージコンポーネントとタイマーコンポーネントです。
以下にプログラムソースをのせておきます。
private
{ Private 宣言 }
count,x,y:integer; //countは文字をコピーする場所を示す数,x,yは文字を書き込む座標
public
{ Public 宣言 }
end;
:
:
procedure TForm1.FormCreate(Sender: TObject);
begin
with image1.Canvas do begin //imageコンポーネント全体を白で塗りつぶす
brush.Style:=bssolid;
brush.Color:=clwhite;
fillrect(image1.ClientRect);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
//ボタンを押したとき
begin
with image1.Canvas do begin //imageコンポーネント全体を白で塗りつぶす
brush.Style:=bssolid;
brush.Color:=clwhite;
fillrect(image1.ClientRect);
end;
count:=1; //countを1にする
x:=10; //xとyをそれぞれ10にする
y:=10;
timer1.Enabled:=true; //timer1を作動させる
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with image1.Canvas do begin //image1のcanvasで
font.Size:=strtoint(edit2.Text); //フォントの大きさをedit2に記入した大きさにする
textout(x,y,copy(edit1.Text,count,1)); //xy座標のところにedit1に記入した文字列の「count」番目の文字を書き込む
end;
x:=x+strtoint(edit2.Text)*3 div 2; //x座標を1文字分ずらす
if x+strtoint(edit2.Text)*3 div 2>=image1.Width then begin //もし次の文字を書き込んだときは,image1からはみ出すとき
x:=10; //xを10にして
y:=y+strtoint(edit2.Text)*2; //yを1行分下げる
end;
inc(count); //「count」の数を1つ増やす
if count>length(edit1.Text) then begin //もしcountがedit1の文字数を超えたら
timer1.enabled:=false; //timer1を止める
end;
end;
これを実行し,editコンポーネントに適当な文字を入力しボタンを押すと,timer1のIntervalに合わせて,1文字ずつ枠をはみ出さないように表示していきます。

サイズを10にしたとき

サイズを30にしたとき
これを「サンプルプログラム」にして掲載しましたので,興味のある方はご覧ください。