Lazarus dla początkujących, część II W poprzedniej części omówiliśmy pokrótce środowisko programowania Lazarus. Wyposażeni w niezbędne wiadomości spróbujemy napisać pierwszy program. Jak zabrać się do napisania programu? Przede wszystkim musimy wiedzieć co nasz program ma robić, komputer za nas tego nie zrobi jego rolą jest ułatwienie nam pracy (wykorzystanie jego mocy obliczeniowej). Musimy mu odpowiednio powiedzieć stosując odpowiednie instrukcje, przesuwając obiekty i nadając im odpowiednie atrybuty. Pisząc program, w celu ułatwienia nam pracy, czy też w celu rozrywki musimy mieć zatem gotowy plan działania gotowy sposób postępowania w celu rozwiązania danego problemu tzw. algorytm. Na początku więc należy zdefiniować co chcemy zrobić, a następnie pomyśleć jak tego należy dokonać ułożyć algorytm. Wytrawni i doświadczeni programiści algorytm układają sobie w głowie i bezpośrednio tworzą program w określonym środowisku programistycznym. Początkujący może posiłkować się zwykłą kartkę papieru (która ułatwia zapisywanie na gorąco wszelkich pomysłów). Algorytm następnie implementujemy do odpowiedniego środowiska programistycznego u nas do Lazarusa. Jak już było wspomniane w części pierwszej Lazarus ułatwia nam pracę poprzez możliwość pominięcia wpisywania przez nas pewnej części kodu języka Free Pascal na rzecz operowania myszą komputerową wstawiania odpowiednich obiektów i nadawania im odpowiednich atrybutów. Pozwala to na istotną oszczędność czasu jak i uproszczenie procesu tworzenia przyszłego programu (np. nie musimy pamiętać wielu nazw komponentów tzw. klas) Przystąpmy więc do napisania pierwszego programu. Ponieważ program będzie dość prosty i nie skomplikowany algorytmicznie na pewno wiec nie przyda nam się dodatkowo żadna kartka papieru :) W programie, na obiekcie głównym oknie utworzymy przycisk, który po naciśnięciu będzie wyświetlał dodatkowe okienko z wiadomością, do tego wyposażymy główne okno ekranu w rozwijane menu z pewnymi funkcjami i jeszcze do tego w tzw. menu podręczne kontekstowe (pojawiające się po naciśnięciu prawego przycisku myszy na okienku programu). Przystąpmy więc do działania. Mając domyślnie otwarte środowisko lub tworząc nowy projekt aplikacja Lazarus (patrz w pierwszej części, rys.1) przeprowadźmy najpierw operacje na oknie głównym zmieńmy jego wymiary, oraz nazwijmy okno nieco inaczej. Proces ten przeprowadzamy w inspektorze obiektów wybierając obiekt nadrzędny (domyślnie Form1:TForm1) i ustawiając odpowiednio atrybuty z sekcji Właściwości Left (położenie okna przyszłego programu licząc od strony lewej ekranu ilość pikseli), Top (położenie okna przyszłego programu licząc od góry ekranu ilość pikseli), Height (wysokość okna w pikselach), Width (szerokość okna w pikselach). Name i Caption to odpowiednio nazwa obiektu głównego (można zmienić z domyślnego na inną ale nie ma potrzeby tego robić) oraz nazwa (opis, nagłówek) okienka programu (rys.1 i rys.2) rys.1 1
rys.2 Zwróćmy uwagę na porządek alfabetyczny atrybutów w każdej z sekcji (Właściwości, Zdarzenia, *Ulubione* ) co ułatwia znalezienie odpowiedniego atrybutu. Ustawmy więc rozmiar okna 400 300 pikseli (Width x Height) z odległościami 150px licząc od góry (Top) i 450px licząc od strony lewej (Left). Powyższe czynności możemy również dokonać wyłącznie za pomocą myszy komputerowej przesuwając po prostu okno projektowanego formularza programu i zmieniając rozmiary tego okienka za pomocą myszy w momencie najechania kursora na ramkę obiektu głównego (pojawiają się wtedy odpowiednie strzałki). Ustawmy też w sekcji Caption we właściwościach obiektu głównego Pierwszy program. Mamy gotowe okno programu nasz obiekt główny, po skompilowaniu i uruchomieniu (naciskając zielony trójkącik w lewej, górnej części ekranu) otrzymamy program okienkowy z zadanymi przez nas atrybutami, z nagłówkiem (ustawionym przez atrybut Caption), który nie robi nic, tylko istnieje :) (rys.3) 2
rys.3 Należy tutaj dodać, że kompilator tworzy samodzielny plik wykonywalny, który oczywiście możemy uruchamiać jak zwykły gotowy program, bez uruchamiania do tego celu środowiska programowania Lazarus. Wracając do środowiska zatrzymajmy więc program czerwonym kwadratem (obok zielonej, szarej już w trakcie uruchomienia strzałki) aby dalej zmodyfikować nasz program. Zapiszmy może to co już mamy korzystając z ikonki dyskietki (lub Plik Zapisz). Środowisko zapisuje zarówno formę (projekt) jak i unit (kod Free Pascal) zapiszmy jedno i drugie w tym samym miejscu ale w dowolnym, nowym utworzonym przez nas katalogu (np. /home/uczen/program1). Po udanej kompilacji w katalogu tym możemy również zauważyć plik wykonywalny o nazwie project1, który jest naszym skompilowanym, samodzielnym do uruchamiania programem. Wracając do tematu dodajmy pewną (na razie prostą) funkcjonalność wstawmy trzy dodatki (obiekty podrzędne) takie jak przycisk, menu rozwijane i menu podręczne. Szukamy ich w zakładce komponentów, w sekcji standard. Wybieramy właściwy komponent klikając na niego, a następnie rysujemy na obiekcie głównym (naszym oknie programu) jak w zwykłym edytorze grafiki (np. typu Tux Paint). Po dodaniu trzech komponentów możemy zauważyć, że pojawiły się one w inspektorze obiektów jako obiekty podrzędne w stosunku do okna programu. Zauważmy również, że w oknie modułu zwiększył się automatycznie kod programu wymagane rzeczy Lazarus dodał sam:) Zwróćmy jeszcze uwagę, że dodany kod programu (przez nas, bądź automatycznie) środowisko programowania zaznacza żółtymi pionowymi liniami (do momentu kompilacji wtedy linie zmienią się na zielone). Poniższy rysunek ułatwi zrozumienie, w razie wystąpienia trudności (rys.4). 3
rys.4 Kompilując i uruchamiając na tym etapie nasz program za wiele się nie zmieni zostanie dodany wyłącznie przycisk o nazwie nagłówku Button1, który naciskany za pomocą myszki nie reaguje. Pozostałe dwa obiekty wydają się być na razie nieużyteczne, tym bardziej, że nawet się nie ukazują. Warto w tym miejscu zaznaczyć, że w przeciwieństwie do Scratcha (zakładając, że obiektu celowo nie ukrywamy) obiekty w Lazarusie są nie tylko typu graficznego. Występują też stworzone do innych celów i nie muszą odzwierciedlać wyłącznie funkcji graficznej (np. TTimer stoper, który przecież nie musi być narysowany w działającym programie gdyż jego rolą jest odliczanie sekwencji czasowej). Zapamiętajmy też, że w trakcie projektowania programu w jego oknie (obiekcie głównym) każdy komponent (obiekt podrzędny) rysujemy, a więc uwidaczniamy go w postaci graficznej (dodać należy, że możemy też go napisać wygenerować odpowiednio w kodzie programu bez rysowania, lecz nie będziemy się tym na razie zajmować). Wracając do naszego programu co zrobić, żeby przycisk zaczął reagować i coś robić, gdy się na niego naciśnie? Odpowiedzi należy szukać w okienku inspektora obiektów w zakładce Zdarzenia, gdzie szukamy odpowiedniej akcji (musimy nauczyć się tylko jakiej z czasem praktyka utrwali w pamięci, która to akcja). Wybieramy akcję OnClick, naciskamy myszką na ww. nazwę, a następnie na trzy kropeczki i Lazarus automatycznie tworzy procedurę Button1Click dodatkowo wpisując niezbędne rzeczy w okienko z kodem programu (w okienko modułu). W tym momencie jesteśmy na etapie takim, że (jeżeli skompilujemy i uruchomimy) program, to po naciśnięciu przycisku będzie już wykonywał czynność z procedury Button1Click. Tyle, że nic w tej procedurze jeszcze nie wpisaliśmy więc nadal program nic nie wykona. Wpiszmy więc korzystając z poleceń języka Free Pascal (które z czasem będziemy poznawać) komendę, która wyświetli tekst na ekranie Witaj, to jest mój pierwszy program w postaci okienka z przyciskiem OK.. Jak to robimy? W oknie modułu (kodu programu) znajdujemy automatycznie utworzoną procedurę Button1Click, a następnie pomiędzy begin a end tworzymy za pomocą ENTER-a odstęp i wpisujemy polecenie: ShowMessage('Witaj, to jest mój pierwszy program ); (rys.5) 4
rys.5 Aby nieco upiększyć program możemy w oknie Inspektora Obiektów we Właściwościach obiektu Button1, w sekcji Caption zmienić napis przycisku ze standardowego (takiego jak w sekcji Name) na własny, np. przycisk. Po skompilowaniu i uruchomieniu programu otrzymamy już okienko z przyciskiem reagującym na naciśnięcie, gdzie efektem naciśnięcia przycisku będzie pojawienie się dodatkowego okienka z wiadomością zgodną z wpisaną w kodzie programu procedury Button1Click (rys.6). rys.6 5
Zajmijmy się teraz menu zwykłym i kontekstowym. Kliknijmy więc dwukrotnie w oknie formy (w naszym formularzu programu obiektu głównego) na domyślne MainMenu1. Otworzy nam się okienko edycji menu, gdzie po stronie prawej wybieramy, które menu edytujemy, a po stronie lewej na górze przy pomocy prawego przycisku myszy najeżdżając na napis New Item1 tworzymy kolejne elementy w menu (interesuje nas przede wszystkim podmenu). Stwórzmy więc jak na rysunkach poniżej zarówno dla menu głównego jak i typu popup, nie bójmy się przy tym eksperymentować praktyka sprawi, że zrozumiemy zasady tworzenie menu (rys.7). rys.7 Pamiętamy, że we Właściwościach w sekcji Caption okna inspektora obiektów możemy ustawić odpowiednie napisy w naszym menu, ustawmy dla main menu rozwijanej listy Opcje, a po rozwinięciu w podmenu: Nowy, Zapisz i Zakończ. Dla popup menu wpiszmy jedynie Zakończ, ale dodatkowo dla menu typu popup należy poinformować inny obiekt, który będzie te menu mógł wywoływać gdy już program uruchomimy. Robimy to szukając we Właściwościach danego obiektu zakładki PopupMenu, a następnie wybierając z listy nazwę naszego menu kontekstowego, u nas domyślne PopupMenu1 (rys.8). 6
rys.8 Po skompilowaniu i uruchomieniu (warto dodać, że jeśli już raz zapisaliśmy samodzielnie projekt, to w trakcie kompilacji wszystko się zapisuje automatycznie w naszym katalogu i nie musimy nic dodatkowo zapisywać) otrzymamy nasz program w postaci okienka z opcjami menu głównego jaki i kontekstowego (dla przypomnienia: popup wywołujemy prawym przyciskiem myszy na obiekcie, na którym zezwoliliśmy w naszym przypadku na oknie głównym, czyli całości naszego programu). Poniżej dwa screeny obrazujące (rys.9 i rys.10). rys.9 7
rys.10 Aby nasz program reagował na zaprogramowane przez nas opcje menu wiemy już (podobnie jak robiąc to dla przycisku), że należy utworzyć w Zdarzeniach w sekcji OnClick odpowiednie procedury. Zróbmy więc domyślne (podobnie: naciskamy na OnClick, następnie na trzy kropki i wpisy tworzą się automatycznie (rys.11). rys.11 8
Pozostaje już tylko wpisać odpowiednie instrukcje do odpowiednich procedur w kodzie Free Pascal. Zróbmy więc zamknięcie okna (dla trzeciego elementu podmenu Zakończ jak i kontekstowego) polecenie close();, zmianę nagłówka okna naszego programu (dla pierwszego elementu podmenu Nowy) polecenie Form1.Caption:='Nowe okno 2 ; Szerzej o tego typu odwołaniach powiemy sobie w następnej części kursu, podmenu Zapisz zostawmy bez akcji i bez żadnej procedury (rys.12). rys.12 Mamy więc gotowy program, pozostaje ponownie skompilować go i uruchomić (zielona strzałka), sprawdzić i cieszyć się! Na koniec polecam jeszcze znaleźć i uruchomić nasz program bez pośrednictwa środowiska Lazarus. (rys. 13) 9
rys.13 To koniec części II, w następnych będziemy kontynuować zagadnienia związane z programowaniem w opisywanym środowisku. 10