Dokumentacja ShtGraph
NOWEGO UNIT'u z Shift Company
Shift Company

ŚCIĄGAJ ShtGraph (125 kb)

Wstęp Interface

Oto dokumentacja UNIT'u ShtGraph przeznaczonego do użytku z kompilatorem FPC. Powstał on w oparciu o procedury z Delphi, co dało rezultat "okienek" :). Unit ma na celu uproszczenie programowania w systemie Windows... szczególnie tym którzy znają dobrze Pascala i nie śpieszno im do Delphi, C++ itp. Radzę przeczytać najpierw poniższy opis zanim zabierzesz się do pisania programiku typu "Hello World" ;). W razie jakichkolwiek pytań, na które odpowiedzi nie znalazłeś w tym dokumencie, napisz do mnie.
UNIT ten jest FREEWARE i pobieranie za niego opłat w jakiejkolwiek formie jest łamaniem prawa.
Autor (Łukasz Hejnak) Zastrzega sobie niniejszym prawa do modyfikowania UNITu i tego dokumentu.
Wszelkie informacje znadziej na stronie www.shiftcompany.prv.pl.


Sposób pisania programów.

Programy pod Windows działają na zasadzie głównej pętli i procedur. Standardowy program będzie wyglądał tak:

Uses inne moduły...,ShtGraph;
definicje zmiennych
...
...
Begin

przygotowanie zmiennych
...
...
OpenWindow(X,Y,Szerokosc,wysokosc,timer(?),typ okna,'tytul okna');
przygotowanie rzeczy wymagajacych trybu graficznego
...
np. wyglad okna...
teksty itp.
...
ShowScreen;

Repeat
MultiTask(5);
...
if Wypadek1 then Dzialanie1
if Wypadek2 then dzialanie2
...
Until Warunek zakończenia programu;
zakańczanie programu
...
...
ShutDownWindow;
end.

Na początku może to się wydawać dziwne... ale tak to trzeba robić by zachować kompatybilność z Windowsem...
Poniżej znajduje się prosty kod...opis procedur jest w niższych działach.
PS. Po wklejeniu poniższego kodu do notatnika, przy próbie zapisu powinna się wyświetlić informacja o formacie UNICODE...naciśnij NIE.

Uses Dos,ShtGraph;
Var
A:Byte;
H,OldH:Array[1..4]of Word;
Begin
OpenWindow(100,100,200,200,0,2,'Próbny Kod dla SHTGRAPH');
SetRGBPalette(0,180,180,180);
ClearScreen(0);
SetRGBPalette(0,0,0,0);
SetRGBPalette(1,255,255,255);
SetColor(0);
Rectangle(1,1,100,100,1);
SetColor(1);
Rectangle(100,1,200,100,1);
OutTextXY(10,30,'Czarny');
OutTextXY(10,60,'Kwadrat');
SetColor(0);
OutTextXY(110,30,'Biaˆy');
OutTextXY(110,60,'Kwadrat');
SetColor(0);
Rectangle(1,100,100,200,0);
OutTextXY(10,130,'Pusty');
OutTextXY(10,160,'Kwadrat');
SetColor(2);
For A:=100 to 200 do
Begin
SetRGBPalette(2,0,0,A);
Line(A-1,100,A-1,200);
End;
SetColor(1);
OutTextXY(110,130,'—mieszny');{Polskie znaki radzę wpisywać spod edytora FPC (fp.exe)}
OutTextXY(110,160,'Kwadrat');
ShowScreen;

Repeat
MultiTask(4);
GetTime(H[1],H[2],H[3],H[4]);
if H[3]<>OldH[3] then
Begin
SetColor(0);
OutTextXY(10,10,Zero(2,OldH[1])+':'+Zero(2,OldH[2])+':'+Zero(2,OldH[3]));
SetColor(1);
OutTextXY(10,10,Zero(2,H[1])+':'+Zero(2,H[2])+':'+Zero(2,H[3]));

OldH:=H;
ShowScreen;
end;
Until LButton;
Repeat
MultiTask(0);
Until NOT LButton;
ShutDownWindow;
End.


Jeżeli zainstalowałeś już ShtGraph wystarczy że skopiujesz ten tekst do nowego pliku textowego,
zmienisz jego rozszerzenie na 'pas', klikniesz prawym przyciskiem i z menu wybierzesz opcję
"Komp. z UNITem ShtGraph" (Kompiluj z Unitem ShtGraph), a gdy skończy kompilację uruchomisz nowy plik 'exe' :)
(plik 'ow' nie jest potrzebny po skompilowaniu i możesz go spokojnie usunąć)






















The Interface

Typy
Zmienne
Procedury
Funkcje






























Typy
W ShtGraph występuje dodatkowy Typ,
_CharSetTypes=(All,Nums,Alfs,AlfsSpec,NumsSpec,Spec);
Jest to typ definiujący rodzaj znaków do odczytu z klawiatury. Wykorzytuje go procedura PoleEdycji
Znaczenia poszczególnych wartości:
All - wszystkie znaki
Nums - TYLKO liczby
Alfs - TYLKO litery
AlfsSpec - Litery i znaki specjalne
NumsSpec - Liczby i znaki specjalne
Spec - TYLKO znaki specjalne













Zmienne
Oto spis zmiennych dostępnych w SHTGraph:

_CurrentColor
_GetMaxX
_GetMaxY
_InternetExplorerDir
Key_Alt
Key_BackSpace
Key_CapsLock
Key_Ctrl
Key_Enter
Key_Number
Key_Shift
KeyPressed
LineFatSetting
_Rundlldir
_Rundll32Dir
ScreenLog
_TextSize
_TextSpaceSize
_THERGBLOG
_WindowsDir
_WinTEMPDir
_WindowsVersion





_WindowsVersion:String;
Wymagania: InitializeWindowsVAR;
Przechowuje aktualną wersję Windowsa:
'95/98' - Windows 95,98
'NT/2k' - Windows NT,2000 (Sprawdzane na Proffesional)


_Rundlldir:String;
Wymagania: InitializeWindowsVAR;
Przechowuje ścieżkę dostępu do Rundll.exe


_Rundll32dir:String;
Wymagania: InitializeWindowsVAR;
Przechowuje ścieżkę dostępu do Rundll32.exe


_InternetExplorerDir:String;
Wymagania: InitializeWindowsVAR;
Przechowuje ścieżkę dostępu do Internet Explorera.


_WinTEMPDir:String;
Wymagania: InitializeWindowsVAR;
Przechowuje ścieżkę dostępu do folderu TEMP Windowsa.


_WindowsDir:String;
Wymagania: InitializeWindowsVAR;
Przechowuje ścieżkę dostępu do Windowsa.


_TextSpaceSize:Integer;
Wymagania: SetTextSpaceSize;(domyślnie 8)
Przechowuje aktualną odległość między znakami (dla OutTextXY)


_TextSize:Integer;
Wymagania: SetTextSize;(domyślnie 1)
Przechowuje aktualną wielkość czcionki (dla OutTextXY)


LineFatSetting:Integer;
Wymagania: SetLineFat;(domyślnie 1)
Przechowuje aktualną grubość linii (dla Line)


KeyPressed:Boolean;
Na bierząco pokazuje stan klawiatury.
True - przycisk wciśnięty
False - przycisk nie wciśnięty


_CurrentColor:Byte;
Wymagania: SetColor;(domyślnie 0)
Przechowuje aktualny kolor rysowania, pisania itd.


_GetMaxX:Integer;
Przechowuje Maxymalną pozycję "X" w oknie.


_GetMaxY:Integer;
Przechowuje Maxymalną pozycję "Y" w oknie.


ScreenLog:array[0..2000,0..1500]of Byte;
Jest to Bitmapa odwzorowująca cały ekran.
Każde pole ma wartość swojego koloru z paletty, ale NIE W RGB.
Planuję to zmienić w przyszłości, ale najpierw muszę się upewnić, że nie zwolni to działania procedur.


_THERGBLOG:RGBType;
Przechowywuje AKTUALNE wartości wszytskich kolorów w palecie.


Key_Number:Byte;
Przechowywuje wartość wciśniętego klawisza.


Key_Shift:Boolean;
Wymagania: ReadKey;
Na bierząco pokazuje stan klawisza Shift. (wciąż mam pewne błędy z tą zmienną)
True - Shift wciśnięty
False - Shift nie wciśnięty


Key_Alt:Boolean;
Wymagania: ReadKey;
Na bierząco pokazuje stan klawisza Alt.
True - Alt wciśnięty
False - Alt nie wciśnięty


Key_Ctrl:Boolean;
Wymagania: ReadKey;
Na bierząco pokazuje stan klawisza Ctrl.
True - Ctrl wciśnięty
False - Ctrl nie wciśnięty


Key_BackSpace:Boolean;
Wymagania: ReadKey;
Na bierząco pokazuje stan klawisza BackSpace.
True - BackSpace wciśnięty
False - BackSpace nie wciśnięty


Key_Enter:Boolean;
Wymagania: ReadKey;
Na bierząco pokazuje stan klawisza Enter.
True - Enter wciśnięty
False - Enter nie wciśnięty


Key_CapsLock:Boolean;
Wymagania: ReadKey;
Na bierząco pokazuje stan klawisza CapsLock.
True - CapsLock wciśnięty
False - CapsLock nie wciśnięty
































Procedury
Oto Spis Procedur w ShtGraph:
ButtonInitialization
ButtonTime_Loop
Circle
ClearScreen
InitializeWindowsVAR
Line
MultiTask
OpenWindow
OutTextXY
PoleEdycji
PutPixel
Rectangle
SetColor
SetLineFat
SetRGBPalette
SetTextSize
SetTextSpaceSize
ShowScreen
ShutDownWindow
wait
WaitForMousePressed








ButtonInitialization(Button:ButtonType);
Przygotowuje ekran na podstawie danych wprowadzonych do zmiennej "Button".


ButtonTime_Loop(var Button:ButtonType);
Odświeża przycisk o numerze Button.BNumber na podstawie reszty jego wartości.
Kod przykładowy do używania tej procedury znjaduje się tu.


Circle(X0,Y0,R,DegSt,DegEd,Fill:Integer);
Rysuje Koło na podstawie podanych parametrów:
X0 - Pozycja "X" środka koła
Y0 - Pozycja "Y" środka koła
DegSt - Stopień od którego zaczyna rysować koło
DegEd - Stopień na którym kończy rysować koło
Fill - Wypełnienie - 0=puste , 1=pełne


ClearScreen(K:Integer);
Wyczyszcza ekran na i zostawia kolor tła "K".


InitializeWindowsVAR;
Przygotowuje do użycia zmienne związane z Windowsem.
np.
_InternetExplorerDir
_WindowsDir
_WinTEMPDir
_WindowsVersion


Line(X1,Y1,X2,Y2:integer);
Rysuje Linię (wykorzystując _CurrentColor) od punktu X1,Y1 do punktu X2,Y2


MultiTask(priority:word); (z Delphi)
Musisz używać tej procedury, aby program mógł 'komunikować' się z windowsem, tj. dostawać informacje o wszelkich akcjach (typu wciśnięcie przycisku, ruch myszy itp.)


OpenWindow(x,y,l,h:integer;timer,wtype:Word;Title:Pchar); (z Delphi)
Otwiera nowe okno o właściwościach:
X - Pozycja "X" Lewego górnego rogu okna na pulpicie
Y - Pozycja "Y" Lewego górnego rogu okna na pulpicie
l - Szerokość okna
h - Wysokość okna
timer - ??? zawsze ustawiam "0"
wtype - Typ Okna (0-3) sprawdź sam możliwości :)
Title - Tytuł okna (wyświetlany w pasku tytułu)


OutTextXY(X,Y:Integer;S:String);
Wypisuje Text "S" zaczynając od punktu x,y używając aktualnych ustawień:
_CurrentColor
_TextSize
_TextSpaceSize


PoleEdycji(X,Y:Integer;Var S:String;Var Key:Char;MaxChar:Byte;CharSet:_CharSetTypes);
Utwarza nowe "pole" w które można wprowadzać tekst.
x,y - lewy górny róg pola
S - zmienna do której zapisywany jest aktualnie wprowadzony tekst
Key - ostatni znak który został wprowadzony
MaxChar - MAXymalna ilość znaków do wprowadzenia
CharSet - zestaw znaków dozwolonych w polu edycji


PutPixel(x,y:Word;k:byte);
Zamalowuje Pixel w punkcie x,y kolorem k.


Rectangle(X1,Y1,X2,Y2,Full:Integer);
Rysuje prostokąt używając _CurrentColor i LineFatSetting, lewym górnym rogu X1,Y1, a prawym dolnym X2,Y2.
Jeżeli zmienna Full=0 prostokąt jest pusty w środku, jeżeli Full=1 wtedy jest wypełniony _CurrentColor.


SetColor(Col:byte);
Zmienia aktualny kolor (_CurrentColor) na "col"


SetLineFat(A:Integer);
Zmienia aktualną grubość linii (LineFatSetting) na "A"


SetRGBPalette(A,R,G,B:Byte);
Ustawia nowe wartość "R","G","B" colorowi "A" w palecie.


SetTextSize(A:Integer);
Ustawia wielkość czcionki (_TextSize)


SetTextSpaceSize(A:Integer);
Ustawia wielkość odstępów między znakami (_TextSpaceSize)


ShowScreen; (z Delphi)
Wyświetla na ekranie aktualny stan buffora grafiki.


ShutDownWindow; (z Delphi)
Zamyka okno (i program).


wait(K:LongInt);
Zatrzymuje program na "k" milisekund (1/1000)


WaitForMousePressed;
Zatrzymuje program do czasu wciśnięcia przycisku myszki w oknie programu.
































Funkcje
Funkcje w SHTGraph:
Dwojkowo
FEX
GetPixel
LButton
MouseInWindow
MouseMove
MouseX
MouseY
RButton
Readkey
SearchTxtFile
Zero








Dwojkowo(B:Byte):String;
Przetwarza "B" na jego postać w systemie Dwójkowym.


FEX(S:String):Boolean;
Sprawdza czy w aktualnym folderze znajduje się plik o nazwie "S".


GetPixel(X,Y:Integer):Byte;
Pobiera Kolor Pixela w punkcie x,y


LButton:bool; (=boolean)
Sprawdza czy aktualnie jest wciśnięty lewy przycisk myszki.


MouseInWindow(X1,Y1,X2,Y2:Integer):Boolean;
Sprawdza czy kursor myszy jest w kwadracie o lewym górnym rogu w punkcie X1,Y1 , a prawym dolnym w pkt. X2,Y2.


MouseMove:Boolean;
Jest True jeżeli mysz się porusza w danym momencie. False jeżeli nie...


MouseX:Word;
Podaje Pozycję X kursora myszy (odwołując się do okna programu)


MouseY:Word;
Podaje Pozycję Y kursora myszy (odwołując się do okna programu)


RButton:bool; (=boolean)
Sprawdza czy aktualnie jest wciśnięty prawy przycisk myszki.


Readkey:Char;
Sprawdza aktualnie wciśnięty klawisz na klawiaturze.


SearchTxtFile(FileName,SearchString:String):String;
Przeszukuje plik tekstowy o nazwie "FileName" w poszukiwaniu "SearchString" i zwraca całą linijkę w której znajduję się poszukiwany tekst.


Zero(N,W:Word):String;
Konwertuje "W" na String z "N" znaków (jeżeli "W" ma mniej znaków niż "N" wtedy dopisywane są zera)














Przykład dla procedur: ButtonInitialization ButtonTime_Loop i typu ButtonType.


Uses ShtGraph;
Var
Button:ButtonType;
Finish:Boolean;


Procedure Przycisk1;
Begin
SetColor(0);
SetLineFat(1);
Rectangle(50,60,150,70,1);
SetColor(3);
OutTextXY(60,60,'Przycisk1');
ShowScreen;
End;

Procedure Przycisk2;
Begin
SetColor(0);
SetLineFat(1);
Rectangle(50,60,150,70,1);
SetColor(3);
OutTextXY(60,60,'Przycisk2');
ShowScreen;
End;

Procedure Przycisk3;
Begin
SetColor(0);
SetLineFat(1);
Rectangle(50,60,150,70,1);
SetColor(3);
OutTextXY(60,60,'Przycisk3');
ShowScreen;
End;



Begin
Button.BAllNumber:=4;
Button.BText[1]:='Przycisk 1';
Button.BText[2]:='Przycisk 2';
Button.BText[3]:='Przycisk 3';
Button.BText[4]:='Wyj˜cie';
Button.BCoorsX1[1]:=10;
Button.BCoorsY1[1]:=10;
Button.BCoorsX1[2]:=100;
Button.BCoorsY1[2]:=40;
Button.BCoorsX1[3]:=10;
Button.BCoorsY1[3]:=100;
Button.BCoorsX1[4]:=100;
Button.BCoorsY1[4]:=140;
{Podawanie X2 i Y2 jest OPCJONALNE mozesz podac sam, jezeli nie
chcesz to program poda automatycznie (ustalane przy Button Initialization)}
Button.BCoorsX2[4]:=200;
Button.BCoorsY2[4]:=150;
Button.BTextHeight[1]:=1;
Button.BTextHeight[2]:=1;
Button.BTextHeight[3]:=1;
Button.BTextHeight[4]:=1;
OpenWindow(10,10,200,200,0,2,'Button Test');
SetRGBPalette(0,0,0,0);
SetRGBPalette(3,255,255,255);
ClearScreen(0);
For Button.BNumber:=1 to Button.BAllNumber do ButtonInitialization(Button);
Finish:=False;
Repeat
MultiTask(0);
For Button.BNumber:=1 to Button.BAllNumber do ButtonTime_Loop(Button);

If LButton then
Begin
If Button.BStatus[1] then Przycisk1;
If Button.BStatus[2] then Przycisk2;
If Button.BStatus[3] then Przycisk3;
If Button.BStatus[4] then Finish:=True;
End;
Until Finish;

While LButton do MultiTask(0);
ShutDownWindow;
End.





Dokumentacja do ShtGraph powinna być dołączona do UNITu ShtGraph.
Autor: Łukasz Hejnak
Strona WWW
E-mail