Помилки ініціалізації графічного режиму та їх обробка
При виконанні програми можуть виникати помилки. Тому в модулі GRAPH реалізований механізм визначення помилок та видачі повідомлень про них на екран за допомогою функції GraphResult i GraphErrorMsg.
Функція GraphResult : integer ; повертає 0, якщо остання графічна операція виконалась без помилок, або число від –14..-1, при наявності помилок.
Функція GraphErrorMsg ( Code : integer) : string; повертає значення типу STRING в якому відповідно коду помилки надається текстову повідомлення. CODE – код помилки, який повертається функцією GraphResult.
Приклад 3:
Var
Driver, Mode, Error : string;
Begin
Driver := Detect;
InitGraph (Driver, Mode, ‘’);
Error := GraphResult;
If Error <> 0 then
WriteLn (GraphErrorMsg (Error));
……………. {повідомлення помилки}
CloseGraph;
End.
Група процедур та функцій управління режимами роботи графічного адаптера
1) процедура DetectGraph виконується для тестування графічного адаптера:
DetectGraph (var Driver, Mode : integer);
Ця процедура може бути викликана до ініціалізації графічного режиму. Параметри:
Driver – повертає тип драйвера;
Mode - повертає максимальне значення відповідного режиму.
Ці значення і рекомендується підставляти як фактичні параметри процедури InitGraph.
2) група процедур та функцій управління режимами роботи графічного адаптера:
а) функція GetGraphMode : integer повертає код установленого режиму роботи графічного адаптера.
б) функція GetMaxMod : integer ; повертає максимальний номер коду режиму графічного адаптеру;
в) функція GetModName ( ModNum : integer) : string; повертає значення типу STRING, яке містить ім’я режиму роботи за його номером;
|
|
г) функція GetDriveName : string; повертає ім’я поточного графічного драйвера;
д) процедура GetModeRange ( Driver : integer; var LoMode, HyMode : integer); повертає діапазон можливих режимів роботи заданого графічного драйвера:
Driver – тип адаптера;
LoMode – мінімальне значення коду режиму адаптера;
HiMode - мінімальне значення коду режиму адаптера.
!Особливість!:
- якщо значення Drive задано невірно, то змінні отримують значення –1;
- перед звертанням до процедури можна не встановлювати графічний режим.
3) процедур установки текстового та графічного режимів:
а) RestorCRTMode ; повертає до текстового режиму.
!Особливість!: навідміну від CloseGraph графічний драйвер залишається у пам’яті, а також залишаються установленими графічного режиму.
б) процедура SetGraphMode ( Mode : integer); установлює графічний режим за вказаним кодом – Mode.
!Осбливість!: для повернення до попереднього графічного режиму на місце параметра мінімальне значення коду режиму адаптера Mode можна вставити функцію GetGraphMode.
Розглянемо приклади використання процедур роботи з відеорежимами.
Приклад 4:
Перехід з графічного режиму до текстового і знову до графічного.
Uses Graph;
|
|
Var Driver, Mode, Error : integer;
Begin
Driver := Detect;
InitGraph (Driver, Mode, ‘’);
Error GraphResult;
If Error <> 0 then
WriteLn (GraphErrarMsg (Error))
Else
Begin
WriteLn (‘Це графічний режим’);
ReadLn;
ResultCRTMode;
WriteLn (‘Це текстовий режим’);
`ReadLn;
SetGraphMode (GetGraphMode);
WriteLn (‘Знову графічний режим’);
ReadLn;
CloseGraph;
End;
End.
Приклад 5:
Після ініціалізації графічного режиму виводить на екран рядок з іменем завантаженого драйверу, а також всі режими його роботи.
Uses GRAPH;
Var
a, b : integer;
begin
a := Detect;
InitGraph (a, b, ‘’);
WriteLn (GetDriveName);
For a := 0 to GetMaxMode do
WriteLn (GetModeName (a) : 10);
ReadLn;
CloseGraph;
End;
Приклад 6:
Вивести на екран назви всіх адаптерів і діапазон можливих номерів режимів їх роботи.
Uses Graph;
Var
D, L, H : integer;
Const
N : array [1..11] of string [8] =
(‘CGA’, ‘MCGA’, ‘EGA’;
‘EGA64’, ‘EGAMONO’, ‘IBM8514’;
‘HercMONO’, ‘ ATT400’, ‘VGA’;
‘PC3270’, ‘Помилка’);
begin
writeLn (‘ адаптер Мин. Макс.’);
for D :=1 to 11 do
begin
GetModeRange (D, L, H);
WriteLn (N [D], L : 7, H : 10);
End;
End.
Таким чином:
а) керування графічним режимом забезпечується модуль GRAPH, який підключається стандартним способом: USES GRAPH;
б) для ініціалізації графічного режиму використовують процедура InitGraph ;
в) завершує графічний режим процедура CloseGraph ;
г) структура графічної Паскаль-програми практично не відрізняється від стандартної структури;
|
|
д) модуль GRAPH містить широкий набір процедур та функцій роботи з відеорежимами.
Побудови графічних об’єктів
Побудова геометричних фігур
Для побудови зображення у графічному режимі використовують систему координат, яка відрізняється від текстового режиму (екран представляється у вигляді прямокутного масиву символів і координати Х, У починаються з 1 …max значення).
Відлік координат починається з верхнього лівого кута екрана з координатами (0, 0). При цьому екран представляється у вигляді прямокутного масиву адресуємих точок (пікселів). Для різних типів адаптерів та режимів кількість точок по вертикалі та горизонталі суттєво відрізняється.
Для визначення максимальних значень координат екрану, в модулі GRAPH використовують функції:
GetMax X : integer;
GetMax Y : integer.
Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.
Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображаємого на екрані курсору не має, але є скритий поточний показчик СР (current pointer), який виконує аналогічні функції курсору текстового режиму.
|
|
В графічному режимі для переміщення СР використовують процедури:
1) Move To (x, y : integer) – переміщує поточний показчик СР в точку з координатами x, y;
2) Move Rel (dx, dy : integer) – переміщує СР на dx точок по горизонталі і на dy точок по вертикалі відносно останнього положення поточного показчика. Якщо dx, dy більше 0, то координати СР збільшуються; якщо менше 0 - зменшуються.
Для визначення поточного розташування графічного курсору СР використовують функції:
GET X : integer;
GET Y : integer;
які повертають значення поточних координат показчика.
Приклад 1: позиціонування графічного курсору та визначення його координат:
Uses GRAPH;
Var Driver, Mode : integer;
Begin
Driver := Detect;
InitGraph (Drive, Mode, ‘’);
If GraphResult <> 0 then
Begin
WriteLn (‘ошибка’);
Halt (1);
End;
Move To (GetMax X div 2, GetMax Y div);
OutTextXY (GET X, GET Y, ‘курсор по центру’);
MoveRel (-GET X div 2, -GET Y div 2);
OutTextXY (‘курсор переміщений’);
ReadLn;
CloseGraph;
End.
Установка кольору та стилю
1) процедура Set Color ( Color : word); встановлює поточний колір для ліній та символів. Параметр Color позначає номер кольору від 0 до 15:
Таблиця 1
Black = 0 | Light Gray = 7 |
Blue = 1 | Darc Gray = 8 |
Green 2 | Light Blue = 9 |
Cyan =3 | Light Green = 10 |
Red = 4 | Light Cyan = 11 |
Magente = 5 | Light Red = 12 |
Brown = 6 | Light Magente = 13 Yellow = 14 White = 15 Blink = 128 |
2)процедура SetBKColor (Color : word); встановлює колір фону, який визначається параметром Color.
3) процедура SetFillStyle ( Fill, Color : word); встановлює стиль (тип і колір) заповнення фрагментів зображення.
Геометричні побудови.
1) Відображення точки:
В модулі Graph для відображення точки використовують процедуру:
PutPixel ( x , y : integer );
x , y – координата точки;
Color – її колір (значення беруть зі встановленої палітри).
2) Відображення ліній:
а)Процедура:
Line (x1, y1, x2, y2 : integer);
x1, y1, x2, y2 - координати початкової і кінцевої точок лінії. Лінія креслиться поточним стилем і поточним кольором.
б) процедура: LineTo ( x, y : integer); будує лінію від точки поточного розміщення показчика до точки зкоординатами (x,y).
в) процедура: LineRel ( dx , dy : integer ); проводить відрізок від точки поточного розміщення на величину заданого приросту.
г) процедура:SetLineStyle ( Type, Pattern, Thich : word); встановлює стиль відображення ліній, де параметри – це відповідно тип, шаблон і товщина лінії. Тип лінії задається константою з таблиці 3:
Таблиця 3
Const | Значення | Характеристика |
SolidLn | 0 | Безперервна |
PottedLn | 1 | Пунктирна |
CenterLn | 2 | Штрих-пунктирна |
DashedLn | 3 | Штрихова |
UserBitLn | 4 | Задана |
Параметр Pattern тільки для ліній типу UserBitLn і може приймати значення від 1..65536, тобто 2 байта кожен біт (із 16 біт слова) може приймати значення 0 або 1 (піксель не світиться або світиться).
Таким чином параметр Pattern задає відрізок ліній, довжиною 16 пікселів.
Цей шаблон періодично повторюється по всій довжині ліній.
Параметр Thich приймає 2 значення:
Norm Width = 1
Thick WidTh = 3
Дата добавления: 2019-07-15; просмотров: 167; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!