この例では、ウィンドウ切り替え時に不完全なグラフィックスが出力されるのを防ぐために、フォーム上に正弦曲線を描画します。コードは次のとおりです。
プロシージャTForm1.FormPaint(Sender:TObject);
変数
x:整数;
y,a:倍精度;
始める
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
forx:=0toself.ClientWidthdo
始める
a:=(x/self.ClientWidth)*2*Pi;
y:=Sin(a);
y:=(1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x),Trunc(y));
終わり;
終わり;
まずフォームのCanvasオブジェクトにブラシの幅を設定し、描画開始点をフォーム内の(0,Trunc(self.ClientHeight/2))の位置に移動します。次に、ループ内の a:=(x/self.ClientWidth)*2*Pi ステートメントを通じて、正弦波期間内の角度値をラジアン値に変換し、正弦計算の結果を変数 y に格納します。最後に、ループ内の Canvas.LineTo(Trunc(x),Trunc(y)) ステートメントは、フォーム上に連続した正弦曲線を描画します。
プログラムコードは次のとおりです。
ユニットユニット1;
インタフェース
用途
Windows、メッセージ、SysUtils、バリアント、クラス、グラフィックス、コントロール、フォーム、
ダイアログ、ExtCtrls、StdCtrls;
タイプ
TForm1=クラス(TForm)
プロシージャフォームペイント(Sender:TObject);
プロシージャFormResize(Sender:TObject);
プロシージャフォーム作成(Sender:TObject);
プライベート
{非公開宣言}
公共
{公的宣言}
終わり;
変数
フォーム1:TForm1;
実装
{$R*.dfm}
プロシージャTForm1.FormPaint(Sender:TObject);
変数
x:整数;
y,a:倍精度;
始める
Canvas.Pen.Width:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
forx:=0toself.ClientWidthdo
始める
a:=(x/self.ClientWidth)*2*Pi;
y:=Sin(a);
y:=(1-y)*self.ClientHeight/2;
Canvas.LineTo(Trunc(x),Trunc(y));
終わり;
終わり;
プロシージャTForm1.FormResize(Sender:TObject);
始める
リフレッシュ;
終わり;
プロシージャTForm1.FormCreate(Sender:TObject);
始める
self.DoubleBuffered:=true;
//グラフィックのちらつきを防ぐ
終わり;
終わり。
ファイルを保存し、F9 を押してプログラムを実行します。プログラムの実行中に、正弦曲線がフォーム上に自動的に描画されます。実行結果は図 1 に示されています。
図1 プログラムの実行結果
このプログラムを学習すると、サイン曲線だけでなく、コサイン曲線やタンジェント曲線などのさまざまな曲線を描くことができ、科学研究を容易にします。