Jump to content

PASCAL/Đồ họa

From Wikiversity

Khai báo

[edit]

Để sử dụng chế độ đồ họa cần khai báo thư viện GRAPH.

USES Graph, [<các thư vin khác>];
Lưu ý: phần tử cơ bản của màn hình đồ họa là pixel, đó là một điểm nhỏ có địa chỉ trên màn hình hiển thị với một màu nào đó. Số các pixel của màn hình đồ họa phụ thuộc vào độ phân giải của màn hình. Địa chỉ của mỗi pixel được xác định bởi một cặp số nguyên dương (x;y), trong đó x là hoành độ còn y là tung độ của pixel trên màn hình. Theo ngầm định góc ở trên bên trái màn hình có địa chỉ là (0;0). Còn địa chỉ của góc đối diện nằm ở góc dưới bên phải màn hình phụ thuộc vào từng loại thiết bị.

Thiết lập chế độ đồ họa

[edit]

Sử dụng thủ tục sau để thiết lập chế độ đồ họa:

PROCEDURE InitGraph(var driver, mode:integer; path:string);

Trong đó:

- driver là một biến nguyên có giá trị biểu thị số hiệu của trình điều khiển BGI hiện có;

- mode là số hiệu độ phân giải, là một biến nguyên có giá trị biểu diễn một trong các mode đồ họa của hệ thống: nhận một trong các giá trị 0, 1, 2,...;

- path là xâu kí tự biểu diễn đường dẫn đến các tệp BGI cho việc chạy chương trình đồ họa. Nếu path là một xâu rỗng thì tệp phải có ở thư mục ngầm định hoặc hiện thời. Ví dụ:

drive:= 9; mode:= 1;
InitGraph(var driver, mode, 'C:\TP\BGI');

Dãy lệnh trên sẽ chuyển sang chế độ đồ họa VGA theo mode 1. Thông thường không cần thiết phải biết trước hệ thống đồ họa nào sẽ được sử dụng. Ta thường nên sử dụng cách thiết lập đồ họa tự động với biến drive được gán giá trị 0 (được định sẵn bằng hằng detect). Còn tham biến mode không nhận giá trị nào cả trước khi gọi thủ tục InitGraph, thì đơn vị Graph sẽ tự động xác định được hệ thống đồ họa hiện có và sẽ chọn mode đồ họa có phân giải cao nhất của hệ thống. Ví dụ thiết lập đồ họa với chế độ VGAHi:

drive:= 0;
InitGraph(driver, mode, 'C:\TP\BGI');

Các hàm liên quan đến kích thước màn hình

[edit]

Các hàm xác định kích thước màn hình:

  • Hàm GetMaxX
FUNCTION GetMaxX;

xác định hoành độ lớn nhất của màn hình đồ họa.

  • Hàm GetMaxY
FUNCTION GetMaxY;

xác định tung độ lớn nhất của màn hình đồ họa. Lưu ý: Cần nhớ rằng điểm nằm ở góc trên bên trái màn hình có tọa độ (0;0), còn điểm nằm ở góc dưới bên phải màn hình đồ họa có tọa độ (GetMaxX;GetMaxY). Như vậy, với:

 x:= GetMaxX div 2;
 y:= GetMaxY div 2;

thì (x;y) là tọa độ của điểm nằm ở tâm màn hình.

Nhận kết quả việc chuyển sang chế độ đồ họa

[edit]

Khi chuyển sang chế độ đò họa vẫn có thể bị sai sót và sau đó việc thực hiện vẽ hình không có tác dụng. Vì vậy cần biết kết quả của việc chuyển đổi chế độ hiện hình.

Để phát hiện ra lỗi trong một chương trình đồ họa, ta có thể sử dụng hai hàm:

  • Hàm GraphResult:
FUNCTION GraphResult: integer;

Hàm này cho biết thao tác đồ họa trước có kết quả hay mắc lỗi. Hàm cho ra giá trị 0 nếu không có lỗi. Nếu có lỗi thì hàm cho một giá trị nguyên âm biểu diễn mã lỗi.

Lưu ý: Mã lỗi là giá trị hay giá trị được gán bằng hàm GraphResult khi thao tác đồ họa trước mắc lỗi.

  • Hàm GraphErrorMsg:
FUNCTION GraphErrorMsg(<Mã li>:integer): string;

Hàm này cho ra thông bào ứng với mã đã cho của lỗi.

Ví dụ chương trình Graph_Kt sau đây chỉ thực hiện một thao tác: chuyển hệ thống sang chế độ đồ họa. Nếu gặp lỗi, chương trình sẽ cho ra thông báo lỗi, còn nếu không có lỗi sẽ cho biết các thông tin về mode đồ họa đã được lựa chọn.

PROGRAM Graph_Kt;
USES Graph, crt;
VAR drive, mode, Maloi: integer;
BEGIN
 drive:= 0;
 InitGraph(drive, mode, '');
 Maloi:= GraphResult;
 IF Maloi <> 0 THEN
 Writeln('Loi do hoa: ', GraphErrorMsg(Maloi))
 ELSE
    BEGIN
    Writeln('He thong do hoa = ', drive);
    Writeln('Mode do hoa = ', mode);
    Writeln('Goc duoi ben phai man hinh');
    Writeln('X =', GetMaxX);
    Writeln('Y =', GetMaxY);
    END;
END.

Chuyển từ chế độ đồ họa sang chế độ văn bản

[edit]

Sau khi kết thúc làm việc với chế độ đồ họa, để trở về chế độ văn bản ta gọi thực hiện thủ tục:

CloseGraph;

Các thủ tục vẽ

[edit]

Hiển thị một văn bản lên màn hình đồ họa

[edit]