그 중 이번에는 그림판을 만들 것이다.
그 전에 컴포넌트가 뭐로 구성되어 있는지 알아보자.
- 프로퍼티(Propperty)
- 이벤트(Event)
- 메소드(Method)
---------------------------------------------------------------------------------
먼저 아래와 같이 폼을 만들자.
델파이는 컴포넌트가 너무 많아서 검색 기능을 잘 활용해야한다.
오른쪽 위에 있는 컴포넌트는 TColorGrid이다.
오른쪽 아래에 있는 컴포넌트는 TListBox다. (T는 왜 다 붙는거야 ㅡ.ㅡ)
큰 점선의 직사각형은 TImage 다.
위에 메뉴는 TMainMenu 다.
리스트 박스는 Items를 누르고 1~9까지 입력한다.
메인메뉴에는 Clear, Open, Save As, Exit를 입력한다.
폼이 완성 되었으면 코딩을 하자. 아래는 전체 소스다.
---------------------------------------------------------------------------------
unit UImageEditor;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ColorGrd,
Vcl.ExtCtrls, Vcl.Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Clear1: TMenuItem;
Open1: TMenuItem;
SaveAs1: TMenuItem;
Exit1: TMenuItem;
Image1: TImage;
ColorGrid1: TColorGrid;
ListBox1: TListBox;
procedure Clear1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure SaveAs1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Clear1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Assign(Nil);
FormCreate(Self);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Bitmap.Width := Image1.Width;
Image1.Picture.Bitmap.Height := Image1.Height;
ListBox1.ItemIndex := 0;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//마우스의 움직임에 따라 캔버스에 그림이 그려짐
Image1.Picture.Bitmap.Canvas.MoveTo(X,Y);
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//마우스 왼쪽 버튼으로 그림을 그림니다.
if Shift = [sSleft] then //[sSleft], [sSright], [sSAlt], [sSCtrl]등 원하는 키를 설정
begin
//펜 굵기 지정 ListBox에서 선택한 크기 만큼 굵기가 변함
Image1.Picture.Bitmap.Canvas.Pen.Width := StrToInt(ListBox1.Items [ListBox1.ItemIndex]);
//펜의 색상 지정: ColorGrid에서 선택된 색상으로 변함
Image1.Picture.Bitmap.Canvas.Pen.Color := ColorGrid1.ForegroundColor;
//캔버스에 그려진 라인에 따라 Image1 화면에 나타납니다.
Image1.Picture.Bitmap.Canvas.LineTo(X,Y);
end;
end;
procedure TForm1.Open1Click(Sender: TObject);
var
OD:TOpenDialog;
begin
OD := TOpenDialog.Create(Self);
OD.Filter := 'Bitmap Files(*.bmp)|*.bmp';
if OD.Execute then
Image1.Picture.Bitmap.LoadFromFile(OD.FileName);
OD.Free;
end;
procedure TForm1.SaveAs1Click(Sender: TObject);
var
SD:TSaveDialog;
begin
SD := TSaveDialog.Create(Self);
SD.Filter := 'Bitmap Files(*.bmp)|*.bmp';
if SD.Execute then
Image1.Picture.Bitmap.SaveToFile(SD.FileName);
Sd.Free;
end;
end.
---------------------------------------------------------------------------------
이걸 설마 다 키보드로 입력하는 호구(?!)는 없을 것이다.
begin ~ end; 안에만 치는거다.(물론 이벤트 안에서 변수를 선언할 때도 있다)
주황색 부분은 앞에서 폼을 만들면서 자동으로 추가된 코드다.
그 아래 부분은 이벤트를 추가하면서 추가된 코드들이다.
빨간 부분만 코딩하면 프로그램이 원활하게 돌아간다.
와우~ 신기하지 아니한가?(아님말고 -_-)
F9를 누르면 컴파일하고 실행이 된다.
다음 시간에는 동영상 재생기를 만들어 보겠다.
댓글 없음:
댓글 쓰기