ROZDZIAŁ 15
Regiony
Nadszedł czas, aby zająć się regionami. Regiony są to wydzielone obszary płótna, w którym ograniczone są wszelkie operacje graficzne. Przykładowo:
1. W procedurze OnPaint formularza wpisz coś takiego:
var
Bitmap : TBitmap;
Region : HRGN;
begin
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('C:\Image.bmp');
Region := CreateEllipticRgn(50, 50, 200, 200);
SelectClipRgn(Canvas.Hande, Region);
Canvas.Draw(0,0, Bitmap);
Bitmap.Free;
end;
W tym wypadku zadeklarowana została zmienna Region. Następnie zmiennej przyporządkowane zostają dane współrzędne. W tym wypadku region będzie kołem o wymiarach 50, 50, 200, 200.
Istnieją także inne wymiary:
CreateRectRgn - tutaj regionem będzie kwadrat.
Istnieje też możliwość zadeklarowanie własnego regionu:
const
Punkty : array[0..3] of TPoint = ((X:50;Y:0), (X:0;Y:50), (X:70; Y: 150), (X: 150; Y:70));
{tak jak wyżej}
Region := CreatePolygonRgn(Punkty, 4, ALTERNATE);
Zadeklarowana zostaje tutaj tablica, która określa pozycje czterech punktów. Zauważ, że najpierw następuje zadeklarowanie zmiennej array, która określa tablice. Zauważ również, że są jedynie zadeklarowane 3 cyfry. Czwartym punktem jest cyfra 0.
Następnie następuje zapisanie współrzędnych X i Y.
Powoli zbliżamy się do końca omawiania grafiki. Z przyczyn ode mnie nie zależnych ten rozdział jest taki krótki. Spotkamy się za dwa tygodnie.
ROZDZIAŁ 16
W tym rozdziale zajmiemy się jeszcze tablicami i innymi temu podobnymi, ale już od przyszłego rozdziału zaczniemy pisać edytor plików HTML.
Tablice
Do czego służą tablice? Załóżmy, że chcesz w pamięci komputera umieścić tablicę w której chcesz zapisać 10 liczb typu Integer. Taka deklaracją wyglądałaby następująco:
var
Tablica : array[0..9] of Integer;
Zauważ specyficzną budowę tablicy. Rozmiar tablicy poprzedzony jest słówkiem array. W nawiasach kwadratowych następuje wpisanie cyfr (rozmiaru tablicy). Na końcu następuje przypisanie zmiennej.
Każdy element tablicy zajmuje 4 bajty. Łatwo więc wyliczyć, że deklaracja powyższej tablicy zajmować będzie w pamięci 40 bajtów.
Teraz gdy chcesz się odwołać do poszczególnego elementu np. w celu przypisania jej jakiejś liczby należy zrobić to tak:
Tablica[0] := 200;
Tablica[1] := 40;
Tablica[5] := -150;
itd....
Tablice możesz wypełniać także po jej zadeklarowaniu, lecz wtedy musisz użyć stałej const.
const
Tablica : array[0..2] of Integer = (100, 200, 300);
W Delphi 4 wprowadzono Tablice Dynamiczne, czyli takie których pamięć można przydzielać w zależności od potrzeb.
var
Tablica : array of Integer;
begin
SetLength(Tablica, 20);
Zauważ, że na początku nie podano rozmiarów tablicy. Nastąpiło to dopiero wtedy gdy użyta została funkcja SetLength - nastąpiło wówczas wpisanie rozmiaru - 20.
W czasie wykonywania programu możesz zwiększać rozmiar tablicy przy pomocy funkcji Copy.
Copy(Tablica, 400);
W powyższym przypadku nastąpiło zwiększenie rozmiarów tablicy do 400.
W połączeniu z tablicami używane są także funkcję Low i Height. Funkcja Low zwraca indeks pierwszego elementu tablicy, a funkcja Height ostatniego.
var
Pierwszy, Ostatni : Integer;
Tablica : array[2..4] of Integer;
begin
Pierwszy := Low(Tablica);
Ostatni := Height(Tablica);
Metody i klasy
Na pewno podczas programowania w Delphi zauważyłeś tajemnicze słówka private, public. Metody są to funkcje, procedury, które są składnikami klasy. Klasa natomiast jest obiektem składającym się z procedur i funkcji. Klasy posiadają swoje deklarację, które to umieszcza się zawsze w sekcji type. Żeby lepiej to zrozumieć wykonajmy program, a konkretnie animację. Wykorzystasz w ten sposób wiedzę zdobytą w poprzednich rozdziałach:
1. Umieść na formularzu dwa przyciski. Przejdź teraz do edytora kodu (F12) i przesuń kursor przed sekcję Implementation. Odszukaj wyraz private. Pod nim umieść następującą zmienną:
Done : Boolean;
2. Na formularzu umieść także komponent Gauge (na palecie Samples).
3. Treść procedury pierwszego przycisku uzupełnij następująco:
Done := False;
while not Done do begin
Application.ProcessMessages;
Sleep(100);
Gauge1.Progress := Succ(Gauge1.Progress);
if (Done) then
Break;
4. Treść procedury OnClick drugiego z przycisków uzupełnij następująco:
Done := True;
OBJAŚNIENIE: Na samym początku zmiennej Done przypisywana jest wartość False. W następnej linii wykorzystana jest pętla while. Użyty jest tutaj operator not, całe wyrażenie w tłumaczeniu oznacza: "Jeżeli Done nie jest wartością True wykonuj następujące polecenia". Wydaje mi się, że 3 kolejne linie nie wymagają objaśnień. Warto wspomnieć o dwóch ostatnich liniach. Zauważ, że wartości done nie jest przypisywana wartość True tzn. jest, ale nie musisz tego pisać - jest to wartość domyślna.
Teraz rozumiesz o co chodzi? W sekcji private możesz umieszczać nazwy zmiennych, które używasz w wielu procedurach. Nie musisz za każdym razem deklarować tej zmiennej w każdej procedurze.
• Metody prywatne (private) - jak sama nazwa wskazuje są to metody do które nie są widoczne na zewnątrz klasy, nie można się do nich odwoływać z funkcji i procedur będących w innej klasie.
• Metody publiczne (public) - zawierają funkcję za pomocą których możesz "komunikować" się ze światem zewnętrznym
• published - ten poziom dostępu używany jest przy pisaniu komponentów. Zawiera właściwości które znajdą się w Inspektorze Obiektów.np:
published
property Align;
Zapraszam do lektury kolejnego rozdziału w którym zajmiemy się pisaniem odtwarzacza filmów *.avi.