이 예제에서는 창 전환 시 불완전한 그래픽이 출력되는 것을 방지하기 위해 양식의 OnPaint 프로세스에 그래픽을 그리는 키 코드를 배치합니다.
절차TForm1.FormPaint(Sender:TObject);
var
x:정수;
y,a:더블;
시작하다
캔버스.펜.폭:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
forx:=0toself.ClientWidthdo
시작하다
a:=(x/self.ClientWidth)*2*Pi;
y:=죄(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)
ProcedureFormPaint(Sender:TObject);
ProcedureFormResize(Sender:TObject);
ProcedureFormCreate(Sender:TObject);
사적인
{개인선언}
공공의
{공개선언}
끝;
var
Form1:TForm1;
구현
{$R*.dfm}
절차TForm1.FormPaint(Sender:TObject);
var
x:정수;
y,a:더블;
시작하다
캔버스.펜.폭:=3;
Canvas.MoveTo(0,Trunc(self.ClientHeight/2));
forx:=0toself.ClientWidthdo
시작하다
a:=(x/self.ClientWidth)*2*Pi;
y:=죄(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 프로그램 실행 결과
이 프로그램을 배우면 사인곡선뿐만 아니라 코사인곡선, 탄젠트곡선 등 다양한 곡선을 그릴 수 있어 과학적인 연구에 도움이 됩니다.