Mmoduł ten nie jest najlepszy, jednak do prostych rzeczy oraz na początek nauki o grafice w zupełności wystarczy.
Do zainicjowania tryby graficznego służy procedura initgraph:
...
Dwa pierwsze parametry muszą być zmiennymi (nikt nie wie dlaczego). Przypisanie im zerowych wartości powoduje, że komputer sam dobiera odpowiednie wartości (autodetekcja). Gdybyśmy sterownikowi nadali wartość 9, a zmiennej tryb wartość 2, to ustawiony by został tryb VGA 640x480 przy 16 kolorach (załóżmy, że właśnie z takiego będziemy korzystać). Graph wymaga specjalnych plików z rozszerzeniem .bgi, których szuka w lokalizacji podanej trzecim parametrem. Chyba najczęściej używanym plikiem jest egavga.bin, który jest wymagany do wspomnianego wcześniej trybu. Dlaczego najczęściej? Jest on najwygodniejszy w użyciu i niewiele jest w tej chwili kart graficznych, które by go nie obsługiwały Jeżeli więc piszesz program używając modułu graph i chcesz się komuś pochwalić, pamiętaj żeby obok samego programu na dyskietce umieścić jeszcze odpowiedni plik .bgi oraz o procedurze initgraph i jej trzecim parametrze.
sterownik:=0;
tryb:=0;
initgraph (sterownik,tryb,'C:\TP\BGI');
...
No dobrze, to może byśmy w końcu coś narysowali? Ponieważ dopiero się uczymy, to zaczniemy od czegoś małego, a mianowicie punktu. Możemy to zrobić tak:
...
Spowoduje to zapalenie białego pixela w lewym górnym rogu. Pierwszy parametr to współrzędna pozioma, a drugi pionowa. Zwróć uwagę, że w trybie graficznym początek układu współrzędnych to [0,0], a nie [1,1] jak jest w przypadku trybu tekstowego. Trzeci parametr to kolor pixela (jest ich 16 czyli można wstawiać numery 0-15).
putpixel (0,0,15);
...
Do narysowania linii służy procedura line (x1,y1,x2,y2). Podajemy tylko współrzędne początku i końca, a co z kolorem? Gdzieś w pamięci komputer przechowuje numer koloru, którym rysuje wszystko oprócz punktów. Kolor ten możemy ustalić za pomocą procedury setcolor (k). Spójrz:
program Obraz_kontrolny;
Czy Twój monitor działa poprawnie? :)
uses graph;
var sterownik,tryb : integer;
i,j,k : integer;
begin
k:=0;
end.
sterownik:=9;
tryb:=2;
initgraph (sterownik,tryb,''); {pusta ścieżka czyli}
for i:=0 to 16 do {plik egavga.bgi musi się znajdować}
begin {w katalogu z programem}
readln;
setcolor (i);
end;
for j:=k+0 to k+39 do
line (j,0,j,639);
k:=k+40
closegraph
Ostatnia procedura przywraca ponownie tryb tekstowy. W tym programie można się było bez niej obejść, ale czasem się ona przydaje, np, kiedy chcemy wydrukować na ekranie jakiś wynik lub zapytać o dane.
Moduł graph jest dosyć spory i nie ma sensu opisywać dokładniej każdej procedury jaką nam oferuje. W tabeli zebrałem te najciekawsze:
procedura/funkcja | efekt |
rectangle (x1,y1,x2,y2) | Rysuje prostokąt, którego lewy górny róg to [x1,y1], a prawy dolny to [x2,y2]. |
circle (x,y,r) | Okrąg o środku w punkcie [x,y] i promieniu r. |
arc (x,y,alfa,beta,r) | Łuk okręgu o środku w punkcie [x,y] i promieniu r. Wielkości alfa i beta oznaczają kąt początkowy i kąt końcowy promienia wodzącego (w stopniach 0-360). |
ellipse (x,y,alfa,beta,xr,yr) | Elipsa. X, y, alfa oraz beta tak jak przy łuku. Dodatkowo xr to długość osi poziomej elipsy, natomiast yr to długość osi pionowej elipsy. |
outtextxy (s,x,y) | Wypisuje na ekranie tekst s począwszy od punktu [x,y]. |
getmaxx, getmaxxy | Funkcje te zwracają maksymalne wartości współrzędnych: poziomej i pionowej. |