UNIT GRAPH

Một phần của tài liệu bai tap pascal.doc (Trang 26 - 31)

Unit Graph chứa các hằng, biến, kiểu dữ liệu, hàm, thủ tục liên quan đến thiết kế màn hình đồ hoạ. Để sử dụng chế độ đồ hoạ trên màn hình, nhất thiết chúng ta phải có những tập tin sau:

GRAPH.TPU Unit Graph chứa các lệnh đồ hoạ * .BGI Các tập tin chứa font màn hình * .CHR Các tập tin chứa font của các ký tự

2.1 Khởi động và Ngưng chế độ đồ hoạa) Khởi động chế độ đồ hoạ a) Khởi động chế độ đồ hoạ

Chế độ mặc nhiên cho màn hình máy vi tính là chế độ văn bản, vì vậy muốn thiết kế đồ hoạ chúng ta nhất thiết phải chuyển màn hình sang chế độ đồ hoạ bằng thủ tục “khởi động đồ hoạ” có cú pháp như sau:

Procedure InitGraph (Gd, Gm: Integer; Path: string);

Gd: Biến biểu thức Integer chỉ card màn hình, chúng ta có thể khai báo gd bằng các hằng đã được định nghĩa trong Unit Graph như sau:

CGA =1; MCGA = 2; EGA = 3;

EGA64 = 4; EGAMono =5; IBM8514 =6;

HereMono = 7; ATT400 =8; VGA =9;

sử dụng với nhiều loại màn hình khác nhau, nên chúng ta có thể khai Gd bằng hằng Detect = 0, với hằng detect, máy sẽ tự động tìm Card màn hình thích ứng để chạy chương trình.

Gm : Biến kiểu Integer chỉ mode màn hình. Tương ứng với card màn hình đã khai, ta khai mode màn hình trong biến Gm theo các hằng đã định nghĩa trong Unit Graph như sau:

(bảng...)

Trong trường hợp chúng ta khai báo Gd là Detect, thì không cần thiết phải khai báo Gm, vì máy tính sẽ tự xác định loại card màn hình và thiết lập chế độ Mode màn hình lớn chất lượng ứng với card màn hình đó.

Path : Biến kiểu string chỉ đường dẫn vào nơi chứa các tập tin *.BGI. Nuế các tập tin *.BGI nằm trong thư mục thường trực của hệ điều hành DOS thì ta sẽ khai Path là ‘ ’ Việc khởi động chế độ đò hoạ bằng cách cho máy tính tự tìm card màn hình khi cho Gd:=Detect không cho chúng ta biết được loại card màn hình và mode màn hình đang làm việc, thủ tục sau cho máy tính vừa tự xác định card và mode màn hình, đồng thời cho giá trị của nó.

Procedure DetectGraph( Var Gd, Gm : Integer);

Thủ tục này kiểm tra các phần cứng và ghi Card màn hình, Mode màn hình vào biến Gd, Gm. Thủ tục này chỉ đước thực hiện trước khi khởi tạo đồ hoạ.

Việc khởi động chế độ đồ hoạ đôi khi không thành công, do vài yếu tố như chúng ta khai báo không đúng, dẫn đến việc treo máy tính, hàm sau đây cho chúng ta xác định xem việc khởi động chế độ đồ hoạ có thành công không?

Function GraphResult : Integer;

Đây là hàm đánh giá việc khởi động chế độ đồ hoạ. Nếu việc khởi động bị lỗi, hàm GrraphResult cho một giá trị khác 0 tương ứng với lỗi.

b) Ngưng chế độ đồ hoạ

Để chấm dứt chế độ đồ hoạ, trả màn hình về chế độ văn bản ta sử dụng thủ tục sau đây:

Procedure CloseGraph;

2.2 Toạ độ và con trỏ trong màn hình đồ hoạ

Chúng ta đã biết, trong chế độ đồ hoạ phần tử cơ bản là điểm, mỗi một điểm trên màn hình được định vị bằng cặp toạ độ (Cột, dòng), bắt đầu bằng toạ độ (0,0). Toạ độ lớn nhất của màn hình cho bởi cặp hàm sau:

Function GetMaxX:Integer; - Hàm trả về toạ độ cột lớn nhất cho màn hình

Function GetMaxY:Integer; - Hàm trả về toạ độ dòng lớn nhất cho màn hình

Như vậy số điểm tối đa theo chiều ngang màn hình là GetmaxX +1, và số điểm tối đa theo chiều dọc màn hình là GetmaxY+1.

Cũng giống như màn hình văn bản, màn hình đồ hoạ cũng có con trỏ (cursor) để chỉ toạ độ nơi bắt đầu vẽ hình. Nhưng con trỏ này không hiện ra màn hình. Do đó muốn biết hiện nay con trỏ đang ở đâu trên màn hình, chúng ta sử dụng cặp hàm sau đây:

Function GetX:Integer; - Hàm trả về toạ độ cột mà con trỏ đang định vị.

Function GetY:Integer; - Hàm trả về toạ độ dòng mà con trỏ đang định vị. Để đưa con trỏ đến một toạ mới trên màn ta sử dụng thủ tục:

Procedure MoveRel (dX, dY:Integer); (adsbygoogle = window.adsbygoogle || []).push({});

Thủ tục này di chuyển con trỏ từ vị trí đang đứng đến toạ độ mới cách toạ độ cũ khoảng cách là dX và dY.

2.3 Định màu trên màn hình đồ hoạ

a) Bảng màu

Đối với chế độ đồ hoạ, việc thiết kế màu trên màn hình tuỳ thuộc vào Mode màn hình đã cài đặt, tất cả các qui định về số màu và màu chứa trong một bảng gọi là bảng màu. Để lấy giá trị của bảng màu chúng ta sử dụng thủ tục:

Procedure GetPlette (Var Pl: paletteType);

Bảng màu của màn hình hiện tại được gán vào biến Pl có kiểu dữ liệu là PaletteTpye được định nghĩa sẳn trong Unit Graph như sau:

Type Palettetype = Record Size : Byte;

Color: array[0..MaxColor] of shortint; End;

Trong đó:

Size : trường chỉ độ lớn của bảng màu

Color : là dãy giá trị của bảng màu

b) Định màu vẽ, màu nền

Màu vẽ là màu của các điểm ảnh tạo nên một hình theo ý muốn còn màu nền là màu của tất cả các điểm còn lại trên màn hình.

Unit Graph cung cấp cho chúng ta các hằng giá trị màu như sau:

Black = 0; Blue = 1; Green = 2; Cyan = 3; Red = 4; Magenta = 5; Brown = 6; LightGray = 7; DarkGray = 8; LightBlue = 9; LightGreen = 10; LightCyan = 11; LightRed = 12; LightMagenta = 13; Yellow = 14; White = 15;

Màu ve và màu nền được xác định bằng cặp thủ tục:

Procedure SetColor(Cl:Integer); - Định màu vẽ Cl là chỉ số trong bảng màu

Procedure SetBkColor(Bk: Integer); - Định màu nền Bk

2.4 Cửa sổ trong chế độ đồ hoa

một cửa sổ nhỏ trên màn hình để làm việc. Việc tạo cửa sổ trên màn hình được thực hiện bằng thủ tục:

Procedure SetViewPort(x1,y1,x2,y2: Integer; Clip: Boolean);

Với x1,y1: là toạ độ đỉnh trên trái của cửa sổ x2,y2 : Là toạ độ đỉnh dưới phải của cửa sổ

Clip là tham đối kiểu Boolean, khi Clip có giá trị TRUE thì những gì vựơt khỏi cửa sổ sẽ bị cắt bỏ, ngược lại thì không.

Khi tạo cửa sổ, toạ độ trên màn hình sẽ thay đổi theo cửa sổ. Toạ độ mới cho bởi công thức: Toạ độ mới = Toạ độ cũ - toạ độ đỉnh trên trái của cửa sổ

b) Xoá hình ảnh trong cửa sổ

Để xoá hình ảnh trong cửa sổ chúng ta sử dụng thủ tục:

Procedure ClearViewPort;

Để xoá các hình ảnh trên toàn màn hình chúng ta dùng thủ tục:

Procedure ClearDevice

2.5 Điểm vẽ (Pixel) (adsbygoogle = window.adsbygoogle || []).push({});

Để vẽ một điểm trên màn hình tại toạ đô x, y có màu Color, dùng thủ tục:

Procedure PutPixel (x,y : Integer; Color: Word)

Để lấy màu của điểm tại toạ độ x, y dùng thủ tục:

Procedure GetPixel (x, y: Integer):Word;

2.6 Viết chữ trong chế độ đồ hoạ

Để viết chữ và định vị toạ độ trong chế độ đồ hoạ chúng ta không thể dùng GotoXy và Writeln như trong chế độ màn hình đồ hoạ. Các hàm và thủ tục sau qui định việc viết các ký tự trong chế độ đồ hoạ.

a) Chọn kiểu chữ:

Để chọn Kiểu (Font), Hướng (Direction) và kích thước (Size) chữ chúng ta dùng thủ tục SetTextStyle với tham số lần lượt là ft, dr và Sz

Procedure SetTextStyle(ft, dr, Sz: Word);

Các hằng liên quan đến Font chữ là:

DefaultFont = 0; TriplexFont = 1; SmallFont = 2;

SansSerifFont = 3; GothicFont = 4;

HorizDir = 0; - Hướng từ trái sang phải

VertDir = 1; - Hướng từ dưới lên trên

b) Chọn phân bố chữ

Để chọn vị trí của chữ xung quanh toạ độ định sẳn, sử dụng thủ tục:

Procedure SetTextJustìy (Hz, Vt : Word);

Với Hz là bố trí chữ theo trục ngang, Vt là bố trí chữ theo hướng dọc đối với toạ độ qui định xuất ký tự.

c) Viết một câu lên màn hình

Thủ tục xuất dữ liệu ra màn hình của đồ hoạ chỉ thực hiện được đối với dữ liệu kiểu String, các dữ liệu kiểu số phải qua phép biến đổi.

Procedure OutText(St: String);

Dùng để xuất chuỗi St tại vị trí con trỏ đang đứng với các qui định trong thủ tục SetTextStyle và SetTextJustify

Proceure OutTextXY (x,y : Word; St: string);

Dùng để xuất chuỗi St tại toạ dộ x, y.

2.7 Vẽ các đường hình học

a) Kiểu đường

Để xác định kiểu đường vẽ trong đồ hoạ, sử dụng thủ tục Procedure SetLineStyle(Ls, Pt, Tk: Word);

Với Ls xác định kiểu đường, có thể nhận một trong các giá trị: 0 ..4

Pt xác định màu vẽ

Tk xác định độ dày của đường (1..3) (adsbygoogle = window.adsbygoogle || []).push({});

b) Vẽ đoạn thẳng

Procedure Line (x1, y1, x2, y2 : Integer) : vẽ đoạn thẳng từ (x1, y1) đến (x2, y2)

Procedure LineTo (x, y : Integer) : vẽ đoạn thẳng từ vị trí con trỏ đến (x, y)

Procedure LineRel (Dx, Dy : Integer) : vẽ đoạn thẳng từ vị trí con trỏ đến toạ độ cách con trỏ một khoảng là Dx, Dy.

Procedure RecTangle (x1, y1, x2, y2 : Integer) : vẽ hình chữ nhật có toạ độ trên trái là (x1, y1) và dưới phải là (x2, y2)

c) Vẽ cung tròn

Procedure ARC (x, y : Integer; Sangle, Eangle, R: Word) : vẽ cung tròn có tâm (x, y), bán kính R, góc bắt đầu Sangle, gốc cuối Angle, góc được tính theo chiều lượng giác có đơn vị là độ.

Procedure Circle (x, y: Integer; R: Word): vẽ cung tròn tâm (x, y) bán kính R.

Vẽ cung ellip có tâm (x,y), bán kính theo chiều ngang Rx, bán kính theo chiều dọc Ry, gốc bắt đầu là Sangle, gốc kết thúc là Eangle.

Một phần của tài liệu bai tap pascal.doc (Trang 26 - 31)