ROZDZIAŁ 1





Jeżeli macie jakieś doświadczenie w programowaniu w Turbo Pascalu to na pewno przyswojenie materiału z tego rozdziału przyjdzie Wam łatwiej niż pozostałym. Przejdźcie do następnych rozdziałów i rozwiązujcie przykłady. Zawsze najlepiej nową wiedze przyswoić w praktyce!
Poniżej przedstawiony jest nowo utworzony moduł Delphi:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations } end;
var
Form1: TForm1;
implementation
{$R *.DFM}
end.

WYJAŚNIENIE
Moduł to plik tekstowy, który może być kompilowany do programu wykonywalnego tzn. kod źródłowy kompilowany jest na język zrozumiały dla maszyny. Nazwa modułu wypisana jest w pierwszej linijce kodu i poprzedzona jest słówkiem Unit (od ang. Moduł).
Słowo uses oznacza początek listy w której wypisane są nazwy wszystkich dodatkowych modułów które to zawarte są w naszym module głównym. Interface – po tym zwrocie wypisywane są nazwy wszystkich procedur, funkcji, które mają być widoczne w naszym module. Na przykład: unit Unit1;
interface
procedura Moja_procedura1;
implementaion
procedura Moja_procedura;
begin
{treść procedury}
end;
end.

Słowo implementation oznacza początek programu; za tym słowem wpisujemy treść procedur, funkcji itp.
Musisz pamiętać o kilku ważnych sprawach:
• Każde zdanie (poza kilkoma wyjątkami jak np. słówko begin i end) kończymy średnikiem.
• Każdy program zakończony jest słowem end. ( z kropką na końcu!)
• Pisanie kodu należy poprzedzić słowem begin.
• W programach możesz się spotkać z komentarzami, które będą najczęściej w nawiasach klamrowych ({}). Nie mają one wpływu na działanie programu.

Słowo type
Deklarowane są tutaj nowe typy danych. Umieść na formularzu przycisk Button (na palecie Standard; umieszcza się go klikając pojedynczo myszą a następnie na formularzu). Przejedź teraz do edytora kodu (naciśnij przycisk F12). Zobaczysz, że w sekcji type powstała nowa linia:
Button1: TButton;
Po lewej stronie wypisana jest komponentu (nazwę można modyfikować w polu Name w Inspektorze Obiektów), a po prawej typ – w tym wypadku Tbutton.

Słowo var
Służy do deklarowania zmiennych w programie. Spójrz na poniższy kod: procedure Moja_procedura;
var
x:integer; {deklaracja zmiennej; patrz tabelka niżej}
begin
x:=20; {przypisanie wrtości zminnej x liczby 20}
Label1.caption:=inttostr(x); {wyświetlenie wartości x jako nazwę komponentu Label; inttostr oznacza przekonwertowanie wartości Integer na wartość String (patrz poniżej)}
end;


Zakres wartości zmiennych
Integer -2 147 483 648..2 147 483 647
String tekst
Byte 0..255
Boolean True albo False
Currency -922 337 203 685 477 5808..922 337 203 685 477 5807
Word 0.. 65 535

Wyżej przedstawiłem najczęściej używane typy zmiennych. Uniwersalnym typem będzie Integer.
Inttostr – konwertuje zmienną Integer na String
Strtoint – konwertuje zmienną String na Integer.

Słowo const
Oznacza stałą. Spójrz poniżej:
interface
const
name=’Adam Boduch’; {przypisanie wartości stałej – w tym wypadku dla imienia I nazwiska}
implementation
procedure Moja_procedura;
begin
label1.caption:=name; {przypisanie komponentowi Label tekstu któremu przypisana jest stała: name}
end;
W powyższym przypadku stałej możesz używać w każdej innej procedurze.

Pętla if, then, else
Pętla oznacza warunek, który musi być spełniony, aby zadziałał kod, który zawarty jest w jej wnętrzu. Przykład:
if x<20 then begin {jeżeli liczba jest mniejsza od 20 następuj wczytanie warunku poniżej, jeżeli nie to wykonywany zostaje warunek po wyrażeniu else }
if x>10 then
if x=15 th en
Label1.caption:=’Tak, tą liczbą jest 15!’;
end else
label1.caption:=’Przykro mi, to nie jest prawidłowa liczba.’;
Warunek if, then, else można przetłumaczyć jako:
Jeżeli {warunek, który musi zostać spełniony} wtedy {kod procedury}, a jeżeli nie to {kod procedury}

Pętla for, to, downto
Działanie tej pętli najlepiej zrozumieć na przykładzie:
1. Umieść na formularzu komponent Gauge (na palecie Samples)
2. Umieść na formularzu przycisk Button i kliknij nań dwukrotnie.
3. Kod procedury uzupełnij następująco:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 100 do begin {odliczaj do stu poczynając od zera, a...}
sleep(10); {.. . odstęp między odliczaniem ma wynieść 10 milisekund}
gauge1.progress:=i; {przypisanie komponentowi wartośći I}
end;
end;
4. Odpal program;
Downto działa podobnie tyle, że odlicza do dołu i słówko downto wpisujemy zamiast to.
for i:=100 downto 0 do begin
{kod}

Pętla repeat, until
Powtarza daną czynność dopóki nie zostanie spełniony warunek jej zakończenia. i:=0;
repeat
memo.lines.add(‘Dzisiaj jes ’+inttostr(i)+’ dzień’); i:=i+1;
until i:=10;

Procedury
Jest to blok kodu, który wykonuje daną czynność: Budowa procedury:
procedure Moja_procedura(x:integer, y:integer)
begin
{treść procedury}
end;

Funkcje
Jest to blok kodu, który wykonuje daną czynność tyle, że zwraca wynik. Budowa funkcji:
function Moja_funkcja(x:integer, y:integer):integer; begin
{treść funkcji}
end;

PODSUMOWANIE
Sorry, że rozdział ten opisałem tak krótko. Zdaje sobie sprawę, że niektóre rzeczy mogą wydać się wam niezrozumiałe. W dalszych częściach kursu postaram się bardziej rozwinąć temat języka Object Pascal. Rzeczy, które tu opisałem są podstawą przy programowaniu, ale oczywiście to nie jest wszystko, co oferuje, Delphi. Możecie teraz przejść do następnego rozdziału.

ROZDZIAŁ 2


Dobrze, możemy zaczynać. Napiszemy teraz pierwszy program; postępuj według poniższych wskazówek.
1. Otwórz program.
2. Kliknij komponent Label, a następnie umieść go na formularzu pojedynczym kliknięciem
3. W Inspektorze Obiektów w polu Caption wpisz tekst, który ma być umieszczony w komponencie
4. Umieść na formularzy komponent Button; zmień jego tekst (również w polu Caption) na Pokaż tekst.
5. Kliknij podwójnie na przycisku, a następnie wpisz w treści procedury taki oto tekst:
procedure TForm1.Button1Click(Sender: TObject);
begin
if label1.visible=true then begin {label1 oznacza nazwe komponentu label, ktora mozemy edytowac w polu 'Name'. Visible oznacza czy dany komponent ma byc po uruchomieniu
programu widoczny (True), czy tez nie (False)}
label1.visible:=false; {po nacisnieciu komponent staje sie niewidoczny} end else {W przeciwnym wypadku (jezeli komponent jest niewidoczny) komponent sie pojawia}
label1.visible:=true;
end;
6. Zaznacz komponent Label, a następnie w Inspektorze Obiektów zmień pole Visible na False.
To już praktycznie wszystko – uruchom program naciskając klawisz F9 lub wybierz polecenie: Run-> Run.
Ok., należy Ci się wyjaśnienie niektórych funkcji Inspektora Obiektów. Funkcja- Opis
Active Control Ustawia domyślny komponent tj. w wypadku przycisku będzie on aktywny i po naciśnięciu Enter’a zostanie wykonany kod w funkcji OnClick przycisku.
Align Ustawia położenie komponentu; alNone – brak; alClient – na całej powierzchni;alBottom – na samym dole obszaru; alTop – na samej górze; alRight – po prawej stronie; alLef – po lewej stronie. Cursor Ustawia kursor który będzie widoczny po najechaniu myszą nad dany komponent.
Enabled Gdy wartość jest False – komponent będzie nieaktywny; gdy True – przeciwnie.
Caption Tekst, który będzie wyświetlany na komponencie lub ( w przypadku formularza głównego) na niebieskiej belce. Font Ustawienie czcionki.
Name Nazwa komponentu.
Visible Ustawia czy komponent będzie widoczny (True), czy też nie (False) po uruchomieniu programu.
Height, Width Pozwala na dokładne ustawienie szerokości i wysokości komponentu.
To są najpopularniejsze opcje w Inspektorze Obiektów. Innymi zajmę się w dalszych częściach kursu.
Teraz postaram się wyjaśnić jak napisać prostą grę – będzie to popularna gra dla dwóch osób – Kółko i krzyżyk.
Zacznijmy, więc:
1. Zmień nazwę w polu Caption głównego formularza na: Kółko i krzyżyk.
2. Zmień pole Name na: Main1stGame.
3. Umieść na formularzu 9 przycisków Speedbutton (na palecie Additional). Uwaga! By nie klikać za każdym razem na komponencie, a następnie na formularzu to podczas pierwszego kliknięcia przytrzymajcie przycisk SHIFT. Po umieszczeniu wszystkich przycisków należy kliknąć na ikonie ze strzałką.
4. Ok., teraz zaznacz wszystkie przyciski (obrysowując je), a następnie w Inspektorze Obiektów w polu Width i Height wpisz 25.
5. Omieść je blisko siebie (przyciski przesuwać można zaznaczając je, a następnie przytrzymując klawisz CTRL i przemieszczać je kursorami).
6. Przyciski te nazwij kolejno: s1, s2, s3... itd. aż do s9.
7. Umieść na formularzu kolejne dwa przyciski speedbutton i zmień tekst na: „Gracz1” i „Gracz2”, a w polu Name wpisz: speedbutton1 i speedbutton2.
8. Zmień właściwość Flat tych przycisków na True, a w polu właściwości GroupIndex wpisz 1. Właściwość Flat oznacza, że przycisk będzie „płaski”, a jego kontury będzie widać po najechaniu nań myszą. Właściwość GroupIndex oznacza, że wciśnięty będzie tylko jeden przycisk jednocześnie tj. w czasie gdy wciśniemy jeden to drugi wciśnięty już nie będzie.
9. Zmień właściwość Down jednego przycisku na True. Oznacza to, że przycisk zaraz po uruchomieniu programu będzie „wciśnięty”.
10. Teraz możesz uzupełnić kod w procedurze OnClick przycisku si. procedure TMain1stGame.s1Click(Sender: TObject);
begin
if speedbutton1.down=true then begin {Jeżeli przycisk speedbutton1 będzie wciśnięty to na przycisku s1 ujrzysz literę ‘X’ – w przeciwnym wypadku – ‘O’.}
s1.caption:='X';
end;
if speedbutton2.down=true then begin
s1.caption:='O';
end;
end;
11. Powyższy kod wpisz dla pozostałych przycisków z tą różnicą, że zamiast s1 wpisuj kolejne przyciski: s1, s2 itd. Teraz możesz już uruchomić program, lecz zapewne zauważysz, że po każdym naciśnięciu na przycisku trzeba zmieniać gracza. Trzeba to poprawić!
12. Zaznacz przycisk s1, a następnie w Inspektorze Obiektów wybierz zakładkę Events.
13. Znajduje się tam opcja onMouseDown. Kliknij w puste białe pole; pojawi się edytor kodu, który uzupełnij następująco:
if speedbutton1.down=true then begin
speedbutton2.down:=true;
end else
speedbutton1.down:=true;
14. Teraz zaznacz przycisk s2 poczym w Inspektorze Obiektów wybierz zakładkę
Events, a następnie rozwiń pole
onMouseDown i wybierz s1MouseDown.
15. Postąp tak z pozostałymi przyciskami.
Odpal program. Hurra! Działa!
Fajnie by było gdyby program posiadał przycisk który spowoduje iż będziemy mogli grać od początku. Trzeba się więc tym zająć.
1. Umieść na formularzu jeszcze jeden przycisk:Button.
2. Zmień jego tekst na: Ponowna tura. Rozszerz przycisk tak, aby widoczny był cały napis.
3. Kliknij dwukrotnie na przycisku i umieść w nim następujący kod: procedure TMain1stGame.Button1Click(Sender: TObject);
begin
s1.caption:='';{spowoduje to wymazanie tekstu z przycisków}
s2.caption:='';
s3.caption:='';
s4.caption:='';
s5.caption:='';
s6.caption:='';
s7.caption:='';
s8.caption:='';
s9.caption:='';
end;

Zajmiemy się jeszcze dodaniem okna z informacją o prawach autorskich. Postępuj według poniższych wzkazówek:
1. Z menu Plik wybierz New Form.
2. Zmień tekst na: O programie.
3. Zmień nazwę na: about. Dostosuj okno do rozmiarów, jakie uważasz za odpowiednie.
4. Z Inpektora Obiektów rozwiń menu BorderIcons, a następnie zmień polecenia biMinimize, biMaximize na False. Spowoduje to wyświetlenie w oknie jedynie okony Zamknij.
5. Umieść na formularzu komponent Label. Zmień jego tekst na: © Copyright 2000. Uwaga! Znak „©” uzyskuje się przytrzymując lewy Alt i (przy włączonej klawiaturze numerycznej) wystukaniu na klawiaturze numerycznej cyfr 0169.
6. Umieść kolejny komponent Label i zmień jego tekst na: Adam Boduch; zmień rozmiar czcionki klikając na krzyżyku. Rozwinie się podmenu w którym to w polu Size wpisz 12. Rozwiń pole Style i zmień wartość fsBold na True.
7. Umieść na formularzu komponent Image(na palecie Additional) i zmniejsz jego rozmiary. W tym kwadracie umieszczony będzie rysunek. W Inspektorze Obiektów wybierz menu Picture, następnie kliknij na symbol trzykropka.
8. Naciśnij Load i wybierz jakiś rysunek. Naciśnij OK.
9. Teraz dodaj przycisk BitBtn (na palecie Additional) , a w Inspektorze Obiektów rozwiń pole Kind i wybierz bkOk. Pojawił się tam taki „ptaszek”. Po naciśnięciu przycisku okno samo się zamknie.
10. Teraz już tylko kosmetyczne poprawki. Wybierz komponent Bevel i obrysuj obszar który ma być wzięty w ramke. Zmień jego wygląd w polu Shape na bsFrame.
Teraz powróć do formularza głównego i umieść w nim komponent Label; zmień jego tekst na:
wersja 1.0. Kliknij na nim podwójnie, a następnie w edytorze kodu wpisz następujący tekst:
procedure TMain1stGame.Label1Click(Sender: TObject);
begin
about.showmodal;{powroduje wyświetlenie okno about}
end;

Teraz ponownie zaznacz komponentLabel1i w Inspektorze Obiektów w polu Cursor wybierz kursor crHandPoint. Gdy najedziesz myszą na komponent to kursor zmieni kształt. Zapisz wszystko i spróbuj odpalić program. Zostaniesz zapewne zapytany czy dodać formularz about do programu. Odpowiedz twierdzącą i spróbuj uruchomić go jeszcze raz.
Jeżeli coś nie działa to porównaj swój program z tym co jest dołączonydo tego kursu.
To już wszystko w tym odcinku programowania. W kolejnych częściach zajmiemy się unowocześnianiem programy ‘Kółko i krzyżyk’, dodamy do niego grafikę, dźwięk oraz parę innych opcji. Nie wahajcie się pisać.