Sử dụng các thuộc tính và các phương thức của đối tượng Canvas

Một phần của tài liệu Giáo án - Bài giảng: GIÁO TRÌNH BORLAND C++ BUILDER (Trang 112 - 115)

Đối tượng Canvas không tìm thấy trên bảng công cụ của C++ Builder. Canvas là một thuộc tính con, gắn liền với hầu hết các đối tượng đồ họa. Canvas đóng vai trò như một tấm vải vẽ, chúng ta có thể sử dụng bút vẽ (pen), màu (color), cọ vẽ (brush), điểm ảnh (pixel), chế độ vẽ

(pen mode) cùng các phương thức đơn giản như Line, Ellipse, Circle, ... để vẽ lên những hình, tử đơn giản đến phức tạp.

Đối với Form, Canvas chính là bề mặt của cửa sổ. Đối với ảnh Bitmap, Canvas chính là bề mặt mà các điểm ảnh (pixel) thể hiện trên đó. Ví dụ, để vẽ hình Ellipse lên cửa sổ Form ta gọi lệnh sau:

Form1->Canvas->Ellipse(10,10,50,100);

Chúng ta cũng có thể sao chép nội dung ảnh vẽ từ một Canvas này sang Canvas khác. Ví dụ dưới đây sẽ tạo ra đối tượng TBitmap, nạp ảnh .bmp từ đĩa từ đĩa vào Canvas của TBitmap, sau đó chép ảnh sang Canvas của Form:

void TForm1::Button1Click(TObject *Sender) { TRect r; Graphics::TBitmap *bmp; bmp = new Graphics::TBitmap(); bmp->LoadFromFile("C:\\Windows\\Athen.bmp"); r= Rect(0,0,bmp->Width,bmp->Height); this->Canvas->CopyRect(this->ClientRect,bmp->Canvas,r); delete bmp; }

Sau đây sẽ liệt kê các thuộc tính và phương thức của đối tượng Canvas. Bảng thuộc tính thông dụng của đối tượng Canvas.

Thuộc tính

Diễn giải

Font Chỉ định font được sử dụng khi ghi văn bản trên hình ảnh. Tập hợp các thuộc tính của đối tượng TFont chỉ định bề mặt font, màu, kích cỡ và kiểu dáng của font chữ.

Brush Chỉ định màu và mẫu của Canvas sử dụng để điền các hình vẽ đồ họa và nền. Tập các thuộc tính của đối tượng TBrush chỉ định màu và mẫu hay hình ảnh sử dụng khi điền trong không gian của Canvas.

Pen Chỉ định dạng của bút vẽ sử dụng để vẽ đường và đường viền. PenPos Chỉ định vị trí của bút vẽ.

Pixels Chỉ định mà của một vùng của các điểm trong ClipRect hiện tại. Một số phương thức thông dụng của Canvas.

Phương thức Diễn giải

Arc Vẽ một cung tròn.

Chord Một cung tròn khép kín bằng cách nối điểm đầu và điểm cuối của cung tròn. CopyRect Sao chép một phần của bức ảnh từ canvas khác vào canvas hiện tại.

Draw Vẽ một đối tượng hình ảnh chỉ định bởi các tham số đồ họa. Ellipse Vẽ hình ellipse định nghĩa bởi một hình chữ nhật làm biên.

FillRect Điền một hình chữ nhật chỉ định trên canvas sử dụng cọ vẽ (brush) hiện tại. FloodFill Điềm một vùng của canvas sử dụng cọ vẽ hiện tại.

FrameRect Vẽ một hình chữ nhật sử dụng cọ vẽ của canvas để vẽ đường viền.

LineTo Vẽ một đường thẳng trên canvas từ PenPos đến vị trí X và Y chỉ định; đưa vị trí bút vẽ đến (X,Y).

Pie Vẽ một hình bánh là của một hình ellipse được định biên bởi hình chữ nhật (X1,Y1,X2,Y2).

Polygon Vẽ một loạt các đường thẳng trên canvas kết nối các điểm và đóng bằng cách vẽ đường thẳng nối điểm đầu với điểm cuối.

Polyline Vẽ một loạt các đường thằng trên canvas với bút vẽ hiện tại, nối chúng lại với nhau bằng cách chuyển các điểm vào Points.

Rectangle Vẽ một hình chữ nhật trên canvas với đỉnh trên (X1,Y1) và góc dưới (X2,Y2) sử dụng bút vẽ và điền nó sử dụng cọ vẽ.

RoundRect Vẽ một hình chữ nhật với góc tròn.

StretchDraw Vẽ một hình ảnh trên Canvas so cho nó khít với hình chữ nhật chỉ định. TextHeight,

TextWidth

Trả về giá trị chiều cao và chiều rộng của một chuỗi trong font hiện tại. TextOut Ghi một chuỗi trên Canvas.

TextRect Ghi một chuỗi bên trong một vùng.

Để minh họa, chúng ta xem xét một số ví dụ về đối tượng Canvas và các đối tượng liên quan: void __fastcallTForm1::FormPaint(TObject *Sender)

{ Canvas->MoveTo(0,0); Canvas->LineTo(ClientWidth, ClientHeight); Canvas->MoveTo(0, ClientHeight); Canvas->LineTo(ClientWidth, 0); } (adsbygoogle = window.adsbygoogle || []).push({});

- Đoạn lệnh sau đọc một tập tin hình ảnh và sử dụng nó để làm cọ vẽ: Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;

try { BrushBmp->LoadFromFile("MyBitmap.bmp"); Form1->Canvas->Brush->Bitmap = BrushBmp; Form1->Canvas->FillRect(Rect(0,0,100,100)); } __finally { Form1->Canvas->Brush->Bitmap = NULL; delete BrushBmp; }

- Đoạn lệnh sau thay đổi cọ vẽ bằng cách dùng màu đỏ và tô bằng đường chéo ca rô: void __fastcall TForm1::Button1Click(TObject *Sender)

{

TCanvas *pCanvas = Image1->Canvas; pCanvas->Brush->Color = clRed; pCanvas->Brush->Style = bsDiagCross;

pCanvas->Ellipse(0, 0, Image1->Width, Image1->Height); }

- Trong ví dụ sau sẽ dùng một Timer để vẽ các hình chữ nhật ngẫu nhiên với các đường vẽ được sinh ra ngẫu nhiên:

int x, y;

//---

void __fastcall TForm1::FormActivate(TObject *Sender) { WindowState = wsMaximized; Timer1->Interval = 50; randomize(); } //--- void __fastcall TForm1::Timer1Timer(TObject *Sender) {

x = random(Screen->Width - 10); y = random(Screen->Height - 10);

Canvas->Pen->Color = (Graphics::TColor) random(65535); switch (random(5))

{

case 0: Canvas->Pen->Style = psSolid; break; case 1: Canvas->Pen->Style = psDash; break; case 2: Canvas->Pen->Style = psDot; break; case 3: Canvas->Pen->Style = psDashDot; break; case 4: Canvas->Pen->Style = psDashDotDot; break; }

Canvas->Rectangle(x, y, x + random(400), y + random(400)); }

- Dùng Canvas để vẽ một dòng văn bản lên bề mặt form: void __fastcall TForm1::Button1Click(TObject *Sender) { Canvas->Pen->Color = clBlue; Canvas->MoveTo( 10, 10 ); Canvas->LineTo( 100, 100 ); Canvas->Brush->Color = clBtnFace; Canvas->Font->Name = "Arial";

Canvas->TextOut( Canvas->PenPos.x, Canvas->PenPos.y,"This is the end of the line" ); }

Một phần của tài liệu Giáo án - Bài giảng: GIÁO TRÌNH BORLAND C++ BUILDER (Trang 112 - 115)