Wykład 7: Lazarus GUI



Podobne dokumenty
Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Wprowadzenie do systemu Delphi

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Tworzenie własnych komponentów

Delphi podstawy programowania. Środowisko Delphi

Niniejszy ebook jest własnością prywatną.

Zaprojektuj grę logiczną NIM. Program losuje w każdym rzędzie od 1 do 10 grzybów. Gracz

Widok po uruchomieniu. Widok w trakcie gry

Lazarus dla początkujących, część II

Ćwiczenie z wykorzystaniem zmiennych i komponentu TGauge. TTimer co pewien czas. Gra. A jednak odlicza. Stoper. Aktualny czas, czyli zegar

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

Instrukcja laboratoryjna cz.3

Ćwiczenie 1 Proste aplikacje - podstawowe komponenty.

1. Otwórz swój program. 2. Przejdź do źródła. Posłuży ci do tego funkcja Toggle Form/Unit lub naciśnięcie klawisza F12. [rys.1]

Programowanie obiektowe

Darmowa publikacja dostarczona przez

16) Wprowadzenie do raportowania Rave

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Robert Szmurło. Projektowanie Graficznych Interfejsów Użytkownika

Ćwiczenie 6 Proste aplikacje - podstawowe komponenty.

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

LIVE Gra w życie. - wpisz do niej polecenie z ramki. - uruchom program poleceniem F9

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Podstawy Programowania 2

Praktyczny kurs programowania w Delphi na przykładzie wygaszacza ekranu Windows

Programowanie w środowiskach RAD Język C++ w środowiskach RAD

Lazarus dla początkujących, część III

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Programowanie Obiektowe GUI

Programowanie obiektowe

Instrukcja laboratoryjna nr.4

Programowanie Wizualno Obiektowe - zajęcia 2 (PWO_BCPP_2_2) Tworzenie i kompilowanie projektów Programowanie Wizualno Obiektowe Zajęcia 2, część 2

ejestr systemu Windows jest bazą danych, w której system i aplikacje mogą przechowywać swoje dane, w szczególności parametry konfiguracyjne.

Darmowa publikacja dostarczona przez Złote Myśli

Obliczenie azymutu ze współrzędnych wersja C++ Builder

Ćwiczenie 5 Menu programu

Podstawy programowania obiektowego

PROGRAMOWANIE W SYSTEMIE WINDOWS

Lokalizacja Oprogramowania

PODSTAWY PROGRAMOWANIA

Programowanie w środowisku graficznym GUI

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Jak napisaś edytor tekstowy w Delphi (wersja Delphi 2009)

Programowanie RAD Delphi

Gdy z poziomu programu Delphi otworzysz folder pierwszy program, zauważysz tylko dwa pliki [rys.1]:

Darmowa publikacja dostarczona przez

Dialogi, Memo i Image. Modified właściwość typu Boolean. Jest automatycznie ustawiana na True kaŝdorazowo po dokonaniu zmian treści wpisanej w Memo.

Nr: 15. Tytuł: Kancelaris w systemie Windows 8 i Windows 8.1. Data modyfikacji:

Podstawowe kontrolki graficzne. Obsługa plików poprzez kontrolki

Program powinien otworzyć się z pierwszym formularzem. Jeśli nie, otwórz pierwszy formularz, wybierając go z listy - Shift+F12.

Obszar Logistyka/Zamówienia Publiczne

Amortyzacja obliczenia ekonomiczne w informatyce.

Założenia projektu: Projekt ma zadanie pokazać praktyczne zastosowanie App Inventor 2, poprzez stworzenie prostej aplikacji do nauki słówek.

Laboratorium 8 ( Android -pierwsza aplikacja)

Borland to firma, która stworzyła kilka środowisk programistycznych: Turbo Pascal Borland Pascal Objekt Pascal Borland Delphi C++ Builder C++

Zapis programu z wykorzystaniem modułu (Podstawy Delphi 2.1, 2.2, 2.3 str11 )

HELIOS pomoc społeczna

Visual Studio instalacja

KROK 17 i 18. Cel: Tworzymy oddzielne okno - O autorze. 1. Otwórz swój program. 2. Skompiluj i sprawdź, czy działa prawidłowo.

Spis treści. Rzut okiem na środowisko...m... 9 Projektant formularzy...m... 11

Król Łukasz Nr albumu:

PIERWSZE URUCHOMIENIE PROGRAMU ITNC PROGRAMMING STATION

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

5.9 Modyfikacja gry Kółko i krzyżyk

Programowanie obiektowe

Skopiuj plik do katalogu macierzystego serwera Apache (C:/xampp/htdocs). Uruchom przeglądarkę i wpisz w polu adresowym następujący ciąg:

Rozdział II. Praca z systemem operacyjnym

Spis treści TRYB GRAFICZNY SYSTEMU WINDOWS - PODSTAWY OBSŁUGI WYBRANEGO ŚRODOWISKA PROGRAMISTYCZNEGO. Informatyka 2

Zasady Programowania (Projektowanie) C++ - część 6 1/9 Programowanie Wizualno Obiektowe (3)

W kodzie modułu Unit1 zdefiniuj dwie metody - składowe komponentu formatki TForm1:

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Programowanie modułowe

R o g e r A c c e s s C o n t r o l S y s t e m 5. Nota aplikacyjna nr 016 Wersja dokumentu: Rev. A. obecności w VISO

Wprowadzenie do projektu QualitySpy

Użycie Visual Basic for Applications ("VBA")

1. Przypisy, indeks i spisy.

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Programowanie w środowisku graficznym. Ćwiczenia 01 Wprowadzenie do C++Builder VCL

Zaawansowane aplikacje internetowe - laboratorium

Zastosowanie komponentów EJB typu Session

Instrukcja obsługi aplikacji MobileRaks 1.0

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

PODRĘCZNIK UŻYTKOWNIKA PROGRAMU INTERCLINIC MODUŁ SZPITAL

Pamiętałeś o kopiowaniu i zapisywaniu swojego programu do kolejnych folderów? Jeżeli tak, to:

Unity 3D - własny ekran startowy i menu gry

Wydział: ZiMK Przedmiot: Programowanie - Delphi Semestr 5

W kolejnym odcinku zajmiemy się umieszczaniem w naszym projekcie zestawu ikon służących szybkiemu korzystaniu z opcji programu.

Wprowadzenie 5 Rozdział 1. Środowisko programisty IDE C++Builder

I. Spis treści I. Spis treści... 2 II. Kreator szablonów Tworzenie szablonu Menu... 4 a. Opis ikon Dodanie nowego elementu...

Transkrypt:

Kurs języka Object/Delphi Pascal na bazie implementacji Free Pascal. autor Łukasz Stafiniak Email: lukstafi@gmail.com, lukstafi@ii.uni.wroc.pl Web: www.ii.uni.wroc.pl/~lukstafi Jeśli zauważysz błędy na slajdach, proszę daj znać! Wykład 7: Lazarus GUI Kompilowanie. Przegląd komponentów. 1

GUI w Lazarus Component Library Możemy zbudować GUI z komponentów Lazarus Component Library (LCL) bez pomocy Lazarus IDE. LCL dostarcza obiektu Application, w programie głównym go inicjalizujemy, tworzymy okno, i uruchamiamy obsługę zdarzeń (event loop). program hello_no_ide0; uses Interfaces, Forms; var Form : TForm; begin Application.Initialize; Application.CreateForm(TForm, Form); Form.Caption := Hello World 0 ; Application.Run; end. Interfaces dostarcza implementacji GUI. Forms dostarcza TForm i zmiennej Application. Tworzy okno główne. Tytuł okna. Uruchamia pętlę obsługi zdarzeń. Żeby skompilować przez fpc, musimy ręcznie podać ścieżki do LCL, np.: fpc -Fu/usr/lib/lazarus/0.9.30.4/lcl/units/i386-linux -Fu/usr/lib/lazarus/0.9.30.4/lcl/units/i386-linux/gtk2./hello_no_ide0.pas 2

Moduł Interfaces dostarcza implementacji interfejsu graficznego przy pomocy konkretnego toolkitu okienkowego jak gtk2, qt czy win32. Moduł Forms dostarcza klas okien TForm, okien/ ramek TFrame, oraz klas i ich instancji dla ekranu Screen i aplikacji Application. Moduł StdCtrls dostarcza najczęściej używanych gadżetów jak TButton, TLabel, TEdit, TCheckBox, TGroupBox, TListBox. Moduł ExtCtrls to użyteczne gadżety jak TImage, TPanel, TCheckGroup, TTimer. Moduły te używają wielu modułów z bardziej podstawowymi klasami: Classes, Controls,... Pętla obsługi zdarzeń monitoruje zdarzenia jak np. kliknięcie myszką na komponencie OnClick i wywołuje procedurę przypisaną danemu zdarzeniu we właściwości (property) danego komponentu. 3

Własności komponentów do obsługi zdarzeń mają typ wskaźnika na metodę procedure(sender: TObject) of object. Wskaźniki na metody są używane się tak samo jak wskaźniki na procedury (tyle że wywołają metodę instancji). <rant> Różnica jest więc techniczna. Podobnie jak domknięcia funkcyjne (function closures) z języków funkcyjnych, wskaźniki na metody pozwalają zapakować dane potrzebne wywołaniu, które w przypadku wskaźników na procedury często musiałyby być w zmiennych globalnych. </rant> Zazwyczaj procedury obsługi zdarzeń są implementowane jako metody okna na którym leży dany komponent (tzn. klasy pochodnej z TForm/TFrame). 4

program hello_no_ide1; uses Interfaces, Forms; type TEvents = class procedure CloseApp (Sender : TObject); end; var Form : TForm; Events : TEvents; procedure TEvents.CloseApp (Sender : TObject); begin Form.Close end; begin Events := TEvents.Create; Application.Initialize; Application.CreateForm(TForm, Form); Form.Caption := Hello World 1 ; Form.OnClick := @Events.CloseApp; Application.Run; Events.Free; end. Klasa pomocnicza, bo zdarzenia wymagają......wskaźników na metody. 5

program hello_no_ide2; uses Interfaces, Forms; type TForm1 = class (TForm) procedure CloseApp (Sender : TObject); end; var Form : TForm1; procedure TForm1.CloseApp (Sender : TObject); begin Close end; begin Application.Initialize; Application.CreateForm(TForm, Form); Form.Caption := Hello World 2 ; Form.OnClick := @Form.CloseApp; Application.Run; end. Metody okien zwykle obsługują zdarzenia. 6

LCL ma dwie hierarchie zawierania: hierarchię Owner zarządzania pamięcią i hierarchię Parent wyświetlania komponentów. Właściciela (Owner) ustawiamy w konstruktorze komponentu, zwolnienie właściciela zwolni wszystkie komponenty które on posiada. Zamiast ręcznie wywoływać Create, możemy użyć procedure TApplication.CreateForm(InstanceClass: TComponentClass; out Reference); podając potrzebną clasę oraz zmienną gdzie zapisać komponent. Okna TForm powinno się tworzyć przez CreateForm zawiera ona kod wywoływany specjalnie gdy tworzymy TForm. Rodzica (Parent) ustawiamy przez właściwość Parent przypisanie włoży komponent graficznie w rodzica. W odróżnieniu od (starszych wersji?) Delphi, nie ma znaczenia kolejność ustawiania rodziców. 7

program hello_no_ide3; uses Interfaces, Forms, StdCtrls; type TForm1 = class (TForm) procedure CloseApp (Sender : TObject); end; var Form : TForm1; Button : TButton; procedure TForm1.CloseApp (Sender : TObject); begin Close end; begin Application.Initialize; Application.CreateForm(TForm1, Form); Form.Caption := Hello World 3 ; Button := TButton.Create(Form); Button.Caption := Hello! ; Button.Parent := Form; Button.OnClick := @Form.CloseApp; Application.Run; end. Okno jest zarówno właścicielem jak i rodzicem przycisku. 8

program hello_no_ide4; uses Interfaces, Forms, StdCtrls; type TForm1 = class (TForm) procedure CloseApp (Sender : TObject); end; var Form : TForm1; Button : TButton; procedure TForm1.CloseApp (Sender : TObject); begin Close end; begin Application.Initialize; Application.CreateForm(TForm1, Form); Application.CreateForm(TButton, Button); Form.Caption := Hello World 4 ; Button.Caption := Hello! ; Button.Parent := Form; Button.OnClick := @Form.CloseApp; Application.Run; end. Właścicielem przycisku jest aplikacja natomiast rodzicem okno. 9

Lazarus IDE Lazarus to wygodne IDE w którym możemy ręcznie zaprojektować wygląd aplikacji, wygodnie przeglądać właściwości (properties) komponentów i obsługiwane zdarzenia, wybierać komponenty klikając na sugestywne ikony, edytować źródła, często wskakując od razu do implementacji automatycznie zadeklarowanej metody, korzystać ze wsparcia edytora: podświetlanie składni, indentacja po naciśnięciu Enter (również wstawi end po begin), autouzupełnianie, w tym intellisense (wybór metody dla obiektu), refaktoryzacja, kompilować, uruchamiać i debugować projekty. 10

Klawisz f12 wywołuje aktualnie konstruowane okno (np. Form1). Wybieramy komponent z panelu powyżej i klikając na oknie (np. Form1) wstawiamy go w odpowiednim komponencie. Aktywny (np. kliknięty) komponent ma wyświetlone właściwości / zdarzenia w oknie Inspektor obiektów możemy tam też wybrać aktywny komponent z hierarchii zawierania. Dwuklik na wstawionym komponencie wskoczy do implementacji zdarzenia OnClick. Klikając na ikonce... na prawo od wybranego zdarzenia w inspektorze obiektów przechodzimy do implementowania jego obsługi możemy też wybrać procedurę obsługującą z listy. Warto zapoznać się z możliwościami Lazarus IDE i podstawowymi komponentami czytając http://wiki.lazarus.freepascal.org/lazarus_tutorial. Lazarus tworzy pliki: projektu.lpi (XML), programu.lpr, osobny moduł dla każdego okna i ramki programu.pas, dane komponentów (m.in. rozmieszczenie) na danym oknie.lfm (czytelny format). 11

program hello_with_ide; {$mode objfpc}{$h+} Plik.lpr. Te ustawienia są też w moim ~/fpc.cfg, więc nie włączałem ich do źródeł programów. uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Interfaces, // this includes the LCL widgetset Forms, hello_window { you can add units after this }; {$R *.res} begin RequireDerivedFormResource := True; Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. 12

unit hello_window; Plik.pas. {$mode objfpc}{$h+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(tform) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin Close; end; end. 13

object Form1: TForm1 Left = 304 Height = 240 Top = 142 Width = 320 Caption = Hello World ClientHeight = 240 ClientWidth = 320 LCLVersion = 0.9.31 object Button1: TButton Left = 42 Height = 25 Top = 33 Width = 75 Caption = Hello! OnClick = Button1Click TabOrder = 0 end end Plik.lfm. 14

Lazarus ma również IDE z linii poleceń w formie polecenia lazbuild. Przekazujemy mu nazwę pliku.lpi i ono kompiluje cały projekt. Dzięki lazbuild nie martwimy się m.in. o ścieżkę do LCL, ale potrzebujemy przynajmniej trywialny plik.lpi rzeczy w nim nie ustawione będą mieć wartości domyślne. <?xml version="1.0"?> <CONFIG> <ProjectOptions> <Units Count="1"> <Unit0><Filename Value="hello_lazbuild.pas"/></Unit0> </Units> <RequiredPackages Count="1"> <Item1><PackageName Value="LCL"/></Item1> </RequiredPackages> </ProjectOptions> </CONFIG> 15

Program może wtedy wyglądać tak samo jak przy ręcznym wywoływaniu fpc. program hello_lazbuild; uses Interfaces, Forms; var Form : TForm; begin Application.Initialize; Application.CreateForm(TForm, Form); Form.Caption := Hello from lazbuild ; Application.Run; end. Oczywiście lazbuild kompiluje też pełne projekty Lazarus IDE. 16

Dwuklik na TForm w inspektorze obiektów przenosi nas do implementacji FormCreate obsługującej zdarzenie OnCreate, gdzie inicjalizujemy co trzeba. OnCreate jest wywoływane po konstrukcji obiektu. W większych projektach często tworzy się własne komponenty graficzne które następnie instaluje się w Lazarus IDE jako równoprawne z wbudowanymi komponentami LCL. 17

Przykłady Pole tekstowe TMemo z pionowym paskiem przewijania, wczytaniem tekstu z pliku i zapisaniem do pliku. Rysowanie po Canvasie (fraktala z ChaosGame), z modyfikacją parametrów przez TTrackBar. Algorytmiczne wypełnianie formularza plansza do gry Saper. 18