WiadomoÅ›ci wstÄ™pne Å›rodowiskoÞlphi


Wiadomości wstępne - środowisko Delphi

1. Istota programowania obiektowego

Pakiet Delphi jest zintegrowanym Å›rodowiskiem (ang. IDE - Integrated Development Environment) programowania zorientowanego obiektowo (autorem jest firma Borland ©). Delphi należy do grupy narzÄ™dzi „szybkiego tworzenia aplikacji” (ang. RAD - Rapid Application Development).

Pakiet Delphi podlega ciÄ…gÅ‚emu rozwojowi, starsze wersje 2.0, 3.0, 4.0 zas­tÄ…piÅ‚o Delphi 5.0, obecnie wkracza kolejna wersja, wykorzystujÄ…ca poszerzajÄ…ce siÄ™ możliwoÅ›ci systemu Windows w sieci. Delphi wystÄ™puje odmianach: Stan­dard, Professio­nal, Client/Server.

W pakiecie Delphi znajduje zastosowanie jÄ™zyk Object Pascal - obiektowa odmiana jÄ™zyka programowania Pascal. Podstawowe zasady znanego jÄ™zyka Turbo Pascal (struktura programu, deklaracje i definicje, typy danych, instrukcje: przy­pisania, warun­kowe, iteracyjne itd.) majÄ… swoje niezmienione znaczenie w Delphi.

Programowanie obiektowe pozwala przedstawić problem w postaci logicznie powiązanych ze sobą struktur danych, które wymieniają pomiędzy sobą informacje. Struktury te, nazywane obiektami, odpowiadają zwykle pojęciom z dziedziny problemu, którym zajmuje się aplikacja. Obiekty reprezentują elementy rzeczywistości, które najczęściej są opisane rzeczownikami.

Przykładowymi obiektami mogą być: samochód, pacjent, figura. W Delphi jest dostępnych wiele gotowych obiektów - wizualnych (graficznych) i innych (zwanych komponentami). Istnieje także możliwość tworzenia własnych obiektów.

Komponenty Delphi reprezentujÄ…:

Delphi jest środowiskiem zorientowanym obiektowo, co oznacza, iż dostępne są dla programisty następujące mechanizmy:

A. Tworzenie obiektów poprzez integrowanie powiązanych ze sobą danych i operującego na nich kodu (enkapsulacja).

Typ obiektowy jest to złożona struktura danych o określonej liczbie elementów, które nazywamy składowymi. Składowe te dzielimy na pola i metody.

Pole - zmienna, która może być różnego typu.

Metoda - czynność wykonywana na obiekcie w postaci procedury lub funkcji. Metoda obiektu operuje z reguły na polach (danych) obiektu.

Dodatkowymi składowymi typu obiektowego są właściwości i zdarzenia.

Właściwość (ang. property - l. mn. properties) jest rozwinięciem pola. Umożliwia ona wbudowanie kontroli zmian wartości oraz powiązanie ze sobą metody i pola. Metoda powiązana z właściwością jest automatycznie wykonywana przy odczycie lub zmianie wartości właściwości.

Zdarzenie (ang. event - l. mn. events) jest właściwością, która zawiera wskaźnik (adres) do metody. Po wystąpieniu w systemie zdarzenia, takiego jak np. kliknięcie przycisku myszy, informacja o nim jest wysyłana do odpowiedniego elementu sterującego. Jeśli w tym elemencie zdarzenie OnClick zawiera wskaźnik do metody, to metoda ta jest realizowana. Dzięki zdarzeniom tworzy się metody reagujące na polecenia użytkownika.

B. Tworzenie nowych typów (klas) obiektów na bazie klas już istniejących (dziedziczenie).

Typ bazowy nazywamy przodkiem, a typ tworzony potomkiem. Potomek przejmuje wszystkie składowe przodka, tzn. wszystkie jego pola, właściwości i metody, oraz zawiera nowe, własne składowe.

Dziedziczenie pozwala ustalić więzy między różnymi typami obiektów. Więzy te powinny jak najbardziej modelować rzeczywistość związaną z problemem, którym zajmuje się aplikacja. Przy określaniu powiązań bierze się pod uwagę te obiekty, które mają wspólne cechy.

Jeśli jako przykład weźmiemy obiekt pojazd, to wśród tego typu obiektów można wyróżnić m.in. obiekty: spalinowy i mechaniczny. Następnie wśród obiektów spalinowych wyróżniamy obiekty: ciężarowy, osobowy, autobus i inne. Natomiast wśród obiektów mechanicznych wyróżniamy obiekty: rower, hulajnoga i inne (Rys.1).

Określenie więzów dziedziczenia między obiektami prowadzi do powstania hierarchii obiektów. W naszym przykładzie na szczycie takiej hierarchii znajduje się obiekt pojazd. Dziedziczenie określa przynależność obiektu (np. osobowy) do innej klasy obiektu (np. spalinowy).

0x01 graphic

Rys.1. Przykład hierarchii obiektów

C. Wykorzystanie wspólnych elementów funkcjonalnoÅ›ci klasy macierzystej i po­chodnej (polimorfizm).

2. Struktura modułu i projektu aplikacji

Aplikację tworzoną w Delphi nazywamy projektem. Nowy projekt tworzymy za pomocą polecenia File | New Application. Każdy projekt składa się z co najmniej jednego pliku modułu i jednego pliku formatki (Form). Projekt zarządza swoimi składnikami. Tylko w wyniku kompilacji projektu otrzymamy gotową do uruchomienia aplikację.

W projekcie aplikacji znajdują się następujące pliki zawierające kod w języku Object Pascal:

2.1. Struktura modułu

W Delphi każdej formatce projektu odpowiada jeden moduł, który zawiera definicje odpowiednich typów, deklaracje zmiennych, definicje procedur obsługi zdarzeń. Wszystkie elementy są umieszczane w odpowiednich częściach modułu. Modułów używamy również do dzielenia projektu aplikacji na logiczne składowe.

Ogólna struktura modułu jest następująca:

unit nazwa_modułu;

interface

{część opisowa }

implementation

{część implementacyjna }

initialization

{część inicjująca - opcjonalna }

finalization

{część kończąca - opcjonalna }

end.

Moduł rozpoczyna się od słowa kluczowego unit, po którym następuje identyfikator będący nazwą modułu. Nazwa ta jest używana do deklaracji danego modułu w innym module. W jednym projekcie wszystkie moduły muszą mieć różne nazwy.

W części opisowej (interface):

W części implementacyjnej (implementation):

Część inicjująca (initialization) zawiera instrukcje, które będą wykonane w celu zainicjowania modułu. Moduły są inicjowane w takiej kolejności, w jakiej są zadeklarowane w pliku projektu (*.dpr). Część inicjująca jest opcjonalna i nie musi wystąpić.

Część kończąca (finalization) zawiera instrukcje, które będą wykonane przed końcem działania aplikacji w celu zwolnienia zasobów. Części kończące w poszczególnych modułach będą wykonywane w odwrotnej kolejności niż części inicjujące. Część kończąca jest opcjonalna, ale może wystąpić tylko wówczas, jeśli moduł zawiera część inicjującą.

2.2. Struktura projektu

Działanie aplikacji rozpoczyna się od wykonywania instrukcji zawartych w bloku projektu (Project). Blok projektu znajduje się w pliku projektu, który jest automatycznie tworzony przy konstrukcji nowego projektu. Kod bloku głównego projektu obejrzeć możemy przez uaktywnienie opcji menu Project | View Source, zawiera on instrukcje, które są wykonywane po uruchomieniu aplikacji. Blok projektu jest automatycznie tworzony przez Delphi i zawiera instrukcje służące np. do: inicjowania aplikacji, utworzenia okien, uruchomienia działania aplikacji. Bardzo rzadko modyfikujemy jego postać.

Struktura bloku projektu jest następująca:

program nazwa_projektu;

{deklaracje modułów}

{część opisowa}

begin

{blok główny}

end.

Po słowie kluczowym program znajduje się identyfikator będący nazwą projektu aplikacji. Następnie występuje deklaracja modułów wchodzących w skład projektu. Deklaracja ta różni się nieznacznie od deklaracji występującej w module i może być następująca:

uses Modul1 in 'Plik1.pas',

Modul2 in 'Plik2.pas';

Po słowie uses występuje lista nazw modułów zakończona średnikiem. Dla każdego modułu po słowie in może być podany plik, w którym znajduje się kod modułu.

W części opisowej deklarujemy stałe, typy, zmienne, procedury i funkcje, które będą dostępne w bloku głównym. Zwykle w tej części nic się nie znajduje, gdyż własne obiekty deklarujemy w modułach.

Najczęściej część wykonawcza bloku głównego projektu wygląda następująco:

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(Tform2, Form2);

Application.Run;

end.

Część inicjująca w modułach jest wykonywana przed blokiem głównym. Część kończąca w modułach jest wykonywana po zakończeniu instrukcji w bloku głównym.

3. Definicja typu obiektowego

Typ obiektowy definiuje siÄ™ podobnie jak typ rekordowy. W typie obiektowym definiuje siÄ™ dodatkowo metody.

Typ obiektowy definiuje się w części interface modułu. Dzięki temu typ będzie mógł być dostępny w innych modułach. Definicja typu obiektowego rozpoczyna się od słowa kluczowego class, po którym następuje lista składowych typu. Poszczególne składowe oddzielamy średnikami. W definicji typu obiektowego wszystkie pola muszą występować przed metodami. W ramach typu obiektowego metody można tylko zadeklarować w postaci nagłówka procedury lub funkcji.

Szczegółowe działanie metod definiuje się w części implementation modułu. W definicji metody jej nazwę poprzedza się nazwą typu obiektowego, w którym została zadeklarowana metoda, ponieważ różne typy obiektowe mogą posiadać metody o takiej samej nazwie. Nazwę typu i nazwę metody oddziela się kropką.

Przykład:

W części interface modułu znajduje się definicja typu TForm1, która reprezentuje formatkę. Typ zawiera trzy komponenty graficzne: Label1 (etykieta umożliwiająca wypisywanie tekstu na formatce), Edit1 (pole edycji jednowierszowej), Button1 (przycisk). Metoda Button1Click jest wywoływana po kliknięciu przycisku przez użytkownika.

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

procedure Button1Click(Sender: TObject);

end;

W części implementation tego samego modułu znajduje się definicja metody Button1Click. Nazwa metody poprzedzona jest nazwą typu TForm1.

procedure TForm1.ButtonlClick(Sender: TObject);

begin

Editl.Text := 'Nowy tekst';

end;

Do właściwości obiektów wewnątrz metody odwołujemy się podobnie jak do pól rekordu, według następującego schematu:

NazwaObiektu.NazwaWłaściwości

Wewnątrz definicji metody właściwość Text komponentu Edit1 otrzymuje nową wartość dzięki użyciu instrukcji przypisania.

4. Projekt aplikacji

0x08 graphic
Rys.2. Interfejs środowiska Delphi

W celu rozpoczęcia pracy nad nowym projektem aplikacji wybieramy polecenie File | New Application. Pojawia się wówczas jedna pusta formatka, okno edytora kodu i okno Inspektora Obiektów (Object Inspector). Nowy projekt można również utworzyć przy użyciu polecenia File | New. Wówczas jednak należy wybrać w Object Repository na karcie New element - Application. Aplikacja w Delphi jest utożsamiana z projektem i podczas tworzenia nowego projektu automatycznie zostaje utworzony plik projektu, standardowo nazwany Project1.dpr.

4.1. Podstawowe narzędzia programisty

Po uruchomieniu Delphi ukazują się okna zintegrowanego środowiska Delphi (rys.2). Środowisko jest zintegrowane, ponieważ zawiera w sobie wiele narzędzi do tworzenia aplikacji: paletę komponentów, edytor kodu, wizualne edytory właściwości, kompilator, debugger i inne.

Formatki są podstawowym elementem Delphi. Przy pierwszym uruchomieniu tworzona jest formatka, która stanie się oknem głównym aplikacji. Na początku jest ona pusta i posiada standardową nazwę Form1. Na formatce układamy potrzebne komponenty, zarówno wizualne jak i niewizualne. Okno formatki jest fundamentem przy projektowaniu graficznego interfejsu użytkownika: menu, okien dialogowych itp.

Po uruchomieniu Delphi, obok paska narzędzi dostępna jest paleta komponentów (po prawej stronie poniżej paska menu). Komponenty są podzielone na karty według spełnianych funkcji. Komponenty przedstawiają elementy graficzne systemu Windows, takie jak: przyciski, pola edycyjne, pola wyboru, menu i wiele innych, ale reprezentują również takie elementy aplikacji, które nie są widoczne po jej uruchomieniu (np. czasomierz systemowy).

Okno Inspektora Obiektów jest umieszczone tuż pod paskiem narzędzi. Współpracuje z komponentami umieszczonymi na formatce i daje możliwość łatwego ich przystosowywania do potrzeb aplikacji. Komponenty są dostępne na liście rozwijanej, która znajduje się tuż pod paskiem tytułu okna Inspektora Obiektów.

W oknie Inspektora Obiektów znajdują się dwie karty: Properties (Właściwości) i Events (Zdarzenia). Inspektor Obiektów służy do sprawdzania i korygowania początkowych właściwości statycznych dla obiektów (Properties) oraz ustalenia jakie procedury (metody) będą wykonywane dla poszczególnych zdarzeń (Events).

Kartę Properties wykorzystuje się do ustawiania wielu właściwości, takich jak rozmiar, położenie, kolor, czcionka, widoczność i wiele innych. W pierwszej kolumnie wyświetlone są alfabetycznie nazwy dostępnych właściwości komponentu natomiast w drugiej kolumnie przypisane im wartości, które można modyfikować. Wartości te można nadawać również w kodzie źródłowym aplikacji.

KartÄ™ Events wykorzystuje siÄ™ do szybkiego poruszania siÄ™ miÄ™dzy pewnymi ustalonymi częściami kodu programu i do generowania „szkieletu” kodu procedur zwiÄ…zanych ze zdarzeniami. W procedurach tych definiuje siÄ™ zachowanie elementu pod wpÅ‚ywem wystÄ…pienia zdarzeÅ„ w systemie. W pierwszej kolumnie wyÅ›wietlone sÄ… wszystkie systemowe zdarzenia, na jakie może reagować komponent. W drugiej kolumnie mogÄ… być wpisane nazwy procedur, które bÄ™dÄ… zwiÄ…zane ze zdarzeniami. W ten sposób można Å‚atwo sprawić, że procedury przez nas napisane bÄ™dÄ… reagowaÅ‚y na zdarzenia systemowe (np. obsÅ‚ugi myszy, klawiatury itp.).

Edytor kodu jest edytorem tekstowym, przy jego pomocy pisze się te części kodu, których nie da się utworzyć za pomocą narzędzi wizualnych. Przy pierwszym uruchomieniu Delphi edytor ukazuje się z otwartym plikiem UNIT1.PAS, który zawiera kod pierwszego modułu, wchodzącego w skład aplikacji. Moduł ten zawiera definicję typu obiektowego, który odpowiada formatce Form1. Po umieszczeniu każdego nowego komponentu kod modułu będzie automatycznie uzupełniany o odpowiednie zapisy, natomiast dodatkowe deklaracje, definicje oraz instrukcje dotyczące działania metod będziemy pisać samodzielnie.

Przechowalnia szablonów stanowi specyficzny „magazyn” różnych szablonów do tworzenia elementów Delphi (formatek, modułów, komponentów, bibliotek DLL itp.), które można przyÅ‚Ä…czać do aplikacji. Zawarte w niej szablony sÄ… zgrupowane tematycznie na kartach, a przechowalnia ma tak nimi zarzÄ…dzać, aby szablony byÅ‚y pomocne przy ponownym użyciu ich w innej aplikacji. OszczÄ™dza to czas poÅ›wiÄ™cony na projektowanie standardowych elementów oraz pisanie kodu. Gotowe szablony sÄ… dostÄ™pne w poleceniu File | New.

Project Manager zawiera listę wszystkich elementów projektu oraz przyciski do uruchamiania najważniejszych poleceń związanych z zarządzaniem projektem. Okno Project Manager wyświetlamy za pomocą polecenia View | Project Manager i może być ono stale otwarte.

W oknie Project Manager wyświetlona jest pełna lista modułów i formatek, z których złożony jest projekt i można łatwo się między nimi przełączać. Przy użyciu menedżera projektu można również dodawać (lub usuwać) moduły i formatki z projektu.

Na pasku stanu wyświetlana jest ścieżka dostępu do pliku projektu oraz liczba modułów i liczba formatek wchodzących w skład projektu. Lista zawiera nazwy modułów (kolumna Unit) oraz nazwy obiektów formatek (kolumna Form). Kolumna Path zawiera ścieżkę dostępu do pliku modułu (i ewentualnie pliku formatki). Jeśli kolumna ta jest pusta, to dany plik znajduje się w tym samym folderze, co plik projektu.

Używając menedżera projektu, mamy łatwy dostęp do wszystkich modułów i formatek wchodzących w skład projektu. Jeśli dwukrotnie klikniemy w nazwę modułu, to Delphi przeniesie nas do okna modułu Jeśli dwukrotnie klikniemy w nazwę formatki, to Delphi przeniesie nas do okna formatki.

Zawarte w Delphi narzędzia są rozlokowane w jego menu głównym. Dokładne poznanie możliwości środowiska, narzędzi ułatwiających pracę, rozmieszczenia tego w menu głównym pozwala na efektywne tworzenie aplikacji.

Pasek narzędzi znajduje się po lewej stronie okna głównego tuż pod paskiem menu. Pasek składa się z przycisków, które są stale i łatwo dostępne w środowisku. Każdy przycisk po kliknięciu wywołuje pewne polecenie (otwórz plik, zapisz projekt itp.).

Nowy Otwórz Zapisz Zapisz Otwórz Dodaj do Usuń

0x08 graphic
wszystkie projekt projektu z projektu

0x01 graphic

Lista Lista Przełącz Nowa Uruchom Trace Step

formatek modułów form./moduł formatka into (F7) over (F8)

Rys.3. Pasek narzędzi

Menu podręczne jest dostępne po kliknięciu prawym przyciskiem myszy - zawartość menu zależna jest od elementu ekranu, w który klikamy.

Różne rodzaje menu są dostępne są dla:

Menu podręczne zawiera zwykle najczęściej używane opcje menu głównego. Czasami menu podręczne zawiera opcje niedostępne w żaden inny sposób i umożliwia szybki do nich dostęp, dlatego poleca się jego stosowanie w celu przyspieszenia pracy.

Delphi zawiera rozbudowaną pomoc (niestety w języku angielskim), aktywowaną kilkoma sposobami:

  1. F1 - pomoc ogólna,

  2. Menu Help (Contents - zawartość, Index - klucz alfabetyczny)

  3. CTRL+F1 - pomoc kontekstowa na temat słowa wskazanego w oknie kodu.

  4. automatyczne wspomaganie pisania tekstu (Code Completion, Code Templates):

4.2. Otwieranie projektu

Do otwarcia zapisanego wcześniej na dysku projektu służy polecenie File | Open. W celu wyświetlenia w oknie wyboru tylko plików projektu należy wybrać w polu Pliki typu filtr o nazwie Delphi project.

4.3. Otwieranie plików

Do otwarcia formatki lub pliku w edytorze służy polecenie File | Open. W polu Plik typu okna wyboru znajduje się kilka filtrów oznaczających następujące typy plików:

Plik typu *.pas oraz otwarte pliki tekstowe są widoczne na nowej karcie w edytorze kodu. Plik formatki po otwarciu jest widoczny w postaci okna formatki. Otwarcie pliku projektu powoduje zamknięcie bieżącego projektu i otwarcie wybranego. Inne typy plików po otwarciu są widoczne na nowej karcie w edytorze kodu. Delphi rozpoznaje tylko format plików własnych i tekstowych, więc każdy inny plik odczytuje jako plik tekstowy. Do otwarcia pliku służy również przycisk Open file na pasku narzędzi.

4.4. Zamykanie elementów projektu

Pojedyncze okno zawierające element projektu zamykamy podobnie jak każde inne okno w systemie Windows, używając standardowego przycisku do zamykania. Pojedynczą kartę w edytorze kodu, zawierającą moduł zamykamy za pomocą polecenia Close Page w menu podręcznym lub za pomocą polecenia File | Close w menu głównym. Zamknięcie karty zawierającej moduł powoduje również zamknięcie okna formatki i odwrotnie. Zamknięcie okna formatki i karty zawierającej moduł nie wiąże się z zamknięciem całego projektu. Do zamknięcia projektu oraz wszystkich otwartych formatek i modułów służy polecenie File | Close All.

4.5. Zapisywanie elementów projektu

Projekt oraz wszystkie otwarte pliki (moduły, formatki) wchodzące w jego skład zapisujemy na dysku za pomocą polecenia File | Save All. Polecenie to jest również dostępne przez użycie przycisku Save all na pasku narzędzi. Polecenie File | Save zapisuje w pliku formatkę (zapisywany jest również odpowiadający jej moduł) w aktywnym oknie lub moduł w aktywnej karcie edytora kodu. Polecenie to jest również dostępne poprzez kombinację klawiszy CTRL+S lub za pomocą przycisku Save file na pasku narzędzi. Do zapisu plików pod inną nazwą używamy poleceń typu Save as... . Polecenie File | Save Project As... zapisuje projekt w pliku o innej nazwie niż dotychczasowa. W standardowym oknie do przeglądania plików należy podać nową nazwę pliku. Polecenie File | Save As... zapisuje aktywną formatkę lub moduł w pliku o innej nazwie. Przy zapisie modułu do pliku o innej nazwie zapisywana jest również formatka w pliku o podanej nazwie. Plik projektu otrzymuje rozszerzenie dpr (Delphi Project). Moduły mają rozszerzenie pas. Formatka zostaje zapisana automatycznie w tym samym folderze co moduł. Nazwa pliku formatki jest taka, jak nazwa modułu z rozszerzeniem dfm (Delphi Forms).

Oprócz trzech wymienionych plików, przy zapisywaniu projektu Delphi zachowuje jeszcze inne pliki związane z tworzoną aplikacją. W folderze, w którym jest zapisany projekt, znajdzie się również plik wykonywalny (*.exe) aplikacji.

Każdy projekt należy zapisywać w odrębnym folderze, zachowując kontrolę nad całością projektu.

4.6. Kompilacja i uruchomienie projektu

Projekt jest automatycznie kompilowany przed każdorazowym jego uruchomieniem za pomocą polecenia Run | Run. Delphi umożliwia dodatkowo wykonanie samego procesu kompilacji projektu za pomocą polecenia Project | Compile (lub CTRL+F9). Polecenie to kompiluje wszystkie moduły wchodzące w skład projektu, plik projektu oraz dostępne moduły źródłowe, zadeklarowane po słowie uses. Każdy skompilowany moduł znajduje się w pliku o rozszerzeniu dcu, a po pomyślnym zakończeniu kompilacji wszystkich modułów zostaje wygenerowany plik wykonywalny exe o nazwie takiej, jak nazwa projektu. Ewentualne błędy kompilacji obejrzeć możemy w oknie komunikatów poniżej okna kodu.

Projekt uruchamiamy za pomocą polecenia Run | Run, naciskając klawisz F9 (tak w Borland Pascalu program był kompilowany), lub przycisk na pasku narzędzi Run (uruchom - rys.3). Jeśli projekt nie został wcześniej skompilowany lub od ostatniego procesu kompilacji został zmodyfikowany, to przed uruchomieniem następuje jego kompilacja. Dość często tworzy się programy, które wymagają, aby podczas ich uruchamiania podać określone parametry. Uruchamiając aplikację z poziomu kompilatora, wpisujemy wymagane parametry w oknie, które otwieramy za pomocą polecenia Run | Parameters.

4.7. Dodawanie nowych elementów

Do projektu możemy dodać nowe elementy. NajproÅ›ciej jest użyć w tym celu polecenia File | New. Szablony wybranych elementów sÄ… dodatkowo dostÄ™pne za pomocÄ… odrÄ™bnych poleceÅ„ menu. JeÅ›li dodawanym elementem ma być formatka, to możemy użyć bezpoÅ›rednio polecenia File | New Form. Wówczas zostanie do­dana nowa formatka i nowy odpowiadajÄ…cy jej moduÅ‚. ModuÅ‚ nie zwiÄ…zany z for­matkÄ… dodajemy za pomocÄ… Object Repository: wybieramy File | New, nastÄ™pnie w oknie dialogowym New Items (nowe elementy) na karcie New wybieramy element Unit i klikamy przycisk OK. W edytorze kodu zostaje utworzona nowa karta zawierajÄ…ca szkielet moduÅ‚u.

4.8. Dołączanie gotowych elementów

Jeśli chcemy dodać do projektu wcześniej utworzony moduł lub formatkę, używamy polecenia File | Add to Project lub Project | Add to Project - dodaj do projektu. Polecenie to jest również dostępne za pomocą przycisku Add file to project - dodaj plik do projektu (rys.3) na standardowym pasku narzędzi. Interesujący nas plik modułu lub formatki musimy wskazać w otwartym oknie. Jeśli do projektu dodajemy moduł powiązany z formatką, to automatycznie dodawana jest również ta formatka. Jeśli do projektu dodajemy formatkę, to automatycznie dodawany jest również moduł z nią powiązany.

4.9. Usuwanie elementów

Jeśli chcemy z projektu usunąć jego element składowy (formatkę lub moduł) używamy polecenia File | Remove from Project lub Project | Remove from Project - usuń z projektu. Polecenie to możemy wywołać za pomocą przycisku Remove file from project (usuń plik z projektu) na standardowym pasku narzędzi (rys. 3). Wywołanie polecenia powoduje otwarcie okna zawierającego listę elementów projektu. Z listy wybieramy elementy do usunięcia i klikamy przycisk OK. Nie można z projektu usunąć formatki bez usunięcia powiązanego z nią modułu i odwrotnie. Usunięcie elementu nie powoduje fizycznego usunięcia odpowiedniego pliku z dysku.

4.10. Lista otwartych okien

W Delphi możemy jednocześnie otworzyć wiele okien, łatwo się wśród nich pogubić. Wywołanie polecenia menu View | Window List powoduje otwarcie okna dialogowego, zawierającego listę aktualnie otwartych okien (które nie są dialogowe). Za jego pomocą możemy się poruszać między pozostałymi oknami. Jeśli chcemy przejść do jednego z okien, wystarczy, że wybierzemy je na liście i naciśniemy przycisk OK. Okno Window List można otworzyć również używając kombinacji klawiszy ALT+O.

4.11. Przełączanie się między formatką a edytorem kodu

Przełączanie się między formatkami a edytorem kodu ogromnie ułatwiają polecenia i skróty klawiszowe. Służą do tego następujące polecenia znajdujące się w podmenu View:

5. Etapy tworzenia aplikacji

5.1. Tworzenie nowego projektu aplikacji

Po pierwszym uruchomieniu środowiska Delphi jest automatycznie tworzony nowy projekt. Po uruchomieniu Delphi polecenie File | New Application również tworzy nowy projekt aplikacji. W skład nowego projektu wchodzą: formatka, moduł, główny plik projektu oraz inne mniej znaczące pliki.

Przed uruchomieniem projektu należy zapisać jego pliki na dysku za pomocą polecenia File | Save, osobno moduł (lub moduły), osobno projekt.

5.2. Umieszczanie komponentów na formatce

Komponenty reprezentują elementy sterujące systemu Windows. Różnice między tymi elementami powodują, że komponenty można podzielić na kilka kategorii. Wszystkie komponenty dzielą się na dwie podstawowe kategorie: niewizualne i sterujące (wizualne). Komponenty sterujące dzielą się z kolei na: okienne i graficzne.

Komponenty niewizualne

Komponenty niewizualne reprezentują elementy aplikacji, którymi użytkownik bezpośrednio nie steruje, czyli nie są one interakcyjne. W czasie projektowania aplikacji są przedstawione na formatce jako małe ikony. Dzięki temu można zmieniać ich właściwości i tworzyć procedury obsługi zdarzeń za pomocą Inspektora Obiektów. Do tej kategorii należą również komponenty, które nie są bezpośrednio widoczne poprzez swoją reprezentację na formatce (np. menu, menu kontekstowe, okienko do otwierania plików). Stają się one elementami interfejsu użytkownika w czasie wykonania aplikacji. Ikony reprezentujące komponenty zawierają opis, na którego podstawie uruchomiona aplikacja tworzy wizualną wersję komponentu.

Komponenty sterujÄ…ce (wizualne)

Komponenty sterujące, zwane również wizualnymi, są widoczne dla użytkownika programu. Wyglądają tak samo w czasie projektowania, jak w czasie wykonania aplikacji. Są to np. przyciski, okienka edycyjne, etykiety. Tylko te komponenty reprezentują elementy sterujące.

Komponenty okienne

Komponenty okienne reprezentują elementy sterujące, które mogą znajdować się w ognisku wejścia (są w danej chwili aktywne), oznacza to, że można poruszać się między nimi za pomocą klawisza TAB. Są to np.: przyciski w oknach dialogowych, pola edycyjne. Każdy taki element sterujący ma swój uchwyt, który jest dostępny przez właściwość Handle. Do tej kategorii należy również formatka (w czasie działania jest oknem).

Komponenty graficzne

Komponenty graficzne nie mogą się znajdować w ognisku. Są pożyteczne dla złożonych formatek, które muszą wyświetlić wiele elementów sterujących. Nie posiadają uchwytu, dzięki czemu zajmują mało zasobów systemu. Przykładowymi elementami graficznymi są: etykiety, przyciski na pasku narzędzi, ikony.

Uchwyt okna (ang. window handle) to identyfikator, na którego podstawie system rozpoznaje każde okno i okienny element sterujący. Jest to jak gdyby klucz do okna. System posiada uchwyty dla wszystkich okien oraz elementów sterujących, które w danej chwili istnieją, oraz dysponuje pewnymi danymi o każdym z nich. Informacje te zajmują pamięć systemu i są przechowywane w części pamięci zwanej zasobami systemowymi (dokładnie są to zasoby użytkownika, ang. user resources).

Paleta komponentów jest podzielona na kilka kart. Na każdej karcie znajdują się przyciski, które reprezentują komponenty. Po krótkim przytrzymaniu wskaźnika myszy nad przyciskiem zostaje wyświetlona etykietka z nazwą komponentu.

Aby umieścić np. pole edycyjne na formatce, najpierw klikamy w przycisk reprezentujący komponent Edit na palecie komponentów a następnie klikamy w formatkę w miejscu w którym chcemy umieścić komponent.

Po umieszczeniu komponentu na formatce, w module poszerzana jest deklaracja klasy TForm o nowe pole typu obiektowego.. Jeżeli na formatce umieścimy np. pole edycyjne, to z punktu widzenia programowania pole edycyjne jest obiektem, z punktu widzenia projektowania formatki - komponentem, natomiast z punktu widzenia interfejsu użytkownika aplikacji - elementem sterującym (kontrolką).

Można przenosić i zmieniać rozmiary komponentu umieszczonego na formatce. Do przenoszenia używamy techniki zwanej „przeciÄ…gnij i upuść” (ang. drag and drop).

Umieszczanie, a później rozmieszczanie i zmiana rozmiarów komponentów na formatce nazywamy wizualnym projektowaniem formatki. Taką postać, jaką każdemu komponentowi nadamy na formatce, przybierze on w oknie uruchomionej aplikacji. Dzięki temu można bardzo szybko zaprojektować wygląd okna. Wszystkie potrzebne do tego elementy znajdują się na palecie komponentów. Na wizualne projektowanie formatki składa się dodatkowo nadawanie wartości odpowiednim właściwościom formatki i komponentów.

Zmiana właściwości w czasie projektowania

Każdy komponent i formatka posiada zbiór właściwości, które są widoczne na karcie Properties w Inspektorze Obiektów. W lewej kolumnie znajdują się nazwy właściwości, w prawej - pola edycyjne zawierające aktualne wartości tych właściwości. Wszystkie właściwości posiadają wartości domyślne.

Modyfikacji dokonujemy, wpisując nową wartość w odpowiednim polu lub wybierając z rozwijanej listy. Każda właściwość określa jakąś cechę komponentu, np. właściwość Color określa kolor komponentu. Dzięki ustawianiu nowych wartości dostosowujemy komponenty i formatki do własnych potrzeb. Ta metoda zmian właściwości jest nazywana zmianą w czasie projektowania.

Aby zmienić właściwości komponentu, musimy najpierw spowodować, by Inspektor Obiektów je wyświetlił. W tym celu klikamy komponent znajdujący się na formatce, a następnie wybieramy kartę Properties w Inspektorze Obiektów. Zostaną wówczas udostępnione właściwości tego komponentu. Drugim sposobem jest wybranie obiektu odpowiadającego komponentowi z rozwijanej listy obiektów w Inspektorze Obiektów. Lista ta znajduje się tuż pod paskiem tytułu okna Inspektora i zawiera wszystkie obiekty odpowiadające komponentom, które zostały umieszczone na formatce, oraz samą formatkę (lub formatki).

Aby Inspektor Obiektów wyświetlił właściwości samej formatki, klikamy formatkę w miejscu, gdzie nie znajduje się żaden komponent lub wybieramy obiekt formatki z listy obiektów.

W sensie języka programowania właściwości są specyficznym rodzajem pól obiektu. Właściwość, podobnie jak zwykłe pole rekordu lub zmienna, jest określonego typu. Oznacza to, że właściwość można ustawić tylko na wartość zgodną z jej typem.

Zmiana właściwości w czasie wykonania

Ważną rzeczą jest dostęp do właściwości wewnątrz procedur obsługi zdarzeń. W procedurach występuje potrzeba zarówno zmiany wartości właściwości jak i odczytu tych wartości. Do właściwości obiektów odwołujemy się podobnie jak do pól rekordu, na przykład przypisanie wartości odbywa się według następującego schematu:

NazwaObiektu.NazwaWłaściwości := nowa_wartość;

Tytuł formatki i komponentów

Tytuł formatki (napis w szyldzie okna) oraz innych komponentów (np. napis na etykiecie Label lub na przycisku Button) to właściwość Caption. Początkowa wartość tej właściwości jest taka, jak nazwa obiektu formatki. Za pomocą Inspektora Obiektów w polu tej właściwości można wpisać nowy tytuł formatki. Tytuł może składać się z kilku słów (w tym polskie znaki diakrytyczne: ą, ę, ć itd.). Tylko niektóre komponenty posiadają tę właściwość.

Nazwa obiektu

Nazwa obiektu znajduje się we właściwości Name. Po umieszczeniu komponentu na formatce nazwa obiektu tworzona jest automatycznie i zostaje wpisana do tej właściwości. Ta sama nazwa zostaje użyta w deklaracji obiektu wewnątrz modułu.

JeÅ›li zmienimy za pomocÄ… Inspektora Obiektów nazwÄ™ np. obiektu Button1 na zmianaButton (jak każdy identyfikator, ciÄ…g znaków zaczy­najÄ…cy siÄ™ od litery, bez spacji), to nowa nazwa zostanie również automaty­cznie zmieniona w nastÄ™pujÄ…cy sposób:

procedure ZmianaButtonClick(Sender: TObject).

UWAGA: Nazwa obiektu nie jest zmieniana automatycznie w kodzie, który sami napisaliśmy.

Komponenty umieszczone na formatce można dowolnie ustawiać względem siebie i względem okna. Można w tym celu używać myszy, ale Delphi dostarcza dwa pomocne narzędzia: okienko dialogowe Alignment z opcjami porządkowania i paletę porządkowania Align. Wszystkie polecenia pomocne do układania komponentów na formatce znajdują się dodatkowo w menu podręcznym zaznaczonej grupy komponentów.

Rozmieszczanie komponentów przy użyciu myszy

Aby przemieÅ›cić wybrany komponent za pomocÄ… myszy, należy go zaznaczyć i „przeciÄ…gnąć” w odpowiednie miejsce. W ten sam sposób można przesunąć caÅ‚Ä… grupÄ™ komponentów, należy uprzednio zaznaczyć wszystkie elementy grupy.

Rozmieszczanie komponentów przy użyciu palety Align.

Paleta wyrównywania znajduje się w oknie Align, które wyświetlamy i ukrywamy za pomocą polecenia View | Alignment Palette. Paleta składa się z 10 przycisków. Paleta wyrównywania służy do rozmieszczania komponentów względem siebie i względem okna formatki. Przed jej użyciem należy zaznaczyć myszą odpowiednie komponenty. Każdy przycisk powoduje inny sposób rozmieszczenia komponentów.

Align left/right edges (wyrównaj do lewej/prawej krawędzi) - wszystkie wybrane komponenty zostają wyrównane do lewej/prawej krawędzi tego komponentu, który ma najwyższy priorytet, lub do krawędzi tego, który został pierwszy zaznaczony (jeśli komponenty były zaznaczone przy użyciu klawisza SHIFT i myszy). Listę komponentów dla danej formatki ułożoną według priorytetów można obejrzeć, używając polecenia Edit | Tab Order.

Align vertical/horizontal centers (wyrównaj środkowo w pionie/w poziomie) - zaznaczone komponenty zostają wyśrodkowane w pionie/poziomie względem komponentu o najwyższym priorytecie spośród zaznaczonych lub względem pierwszego zaznaczonego (jeśli komponenty byty zaznaczone przy użyciu klawisza SHIFT i myszy). Jeśli środkujemy pionowo, należy uważać, aby nie nakładały się one w poziomie, gdyż po wykonaniu operacji będą się nawzajem przesłaniały. Podobna sytuacja może wystąpić przy środkowaniu poziomym.

Center vertically/horizontally in window (ustaw na środku okna formatki pionowo/poziomo) - zaznaczone komponenty zostają ustawione na środku okna formatki w pionie/poziomie. Rozmieszczenie komponentów względem siebie nie ulega zmianie, zostają one przemieszczone, jako jedna całość, względem całego okna.

Space equally, vertically/horizontally (rozmieść równomiernie w pionie/poziomie) - zaznaczone komponenty zostają równomiernie rozmieszczone na obszarze prostokątnym wyznaczonym przez zaznaczone komponenty, odległość między sąsiadującymi komponentami będzie taka sama.

Align tops/bottoms (Wyrównaj w górę/dół) - wszystkie wybrane komponenty zostają wyrównane do górnej/dolnej krawędzi komponentu o najwyższym priorytecie lub względem pierwszego zaznaczonego (jeśli były zaznaczone przy użyciu klawisza SHIFT i myszy).

Rozmieszczanie komponentów przy użyciu okna Alignment.

Okno dialogowe Alignment otwieramy za pomocą polecenia Edit | Align w menu głównym lub za pomocą polecenia Align w menu podręcznym. Chcąc korzystać z funkcji tego okna musimy przed jego otwarciem zaznaczyć odpowiednie komponenty. Następnie wybrać rodzaj rozmieszczenia w poziomie oraz w pionie, a na końcu kliknąć przycisk OK. Funkcje okna podzielone są na dwie grupy przełączników. Przełączniki w grupie Horizontal odpowiadają za rozmieszczenie komponentów w poziomie, w grupie Vertical - w pionie.

No change (bez zmian) - poziome ustawienie komponentów nie ulega zmianie.

Left/Right sides (wyrównaj do lewej/prawej krawędzi) - wyrównuje do lewej/prawej krawędzi komponentu o najwyższym priorytecie spośród zaznaczonych lub względem pierwszego zaznaczonego (jeśli komponenty były zaznaczone przy użyciu klawisza SHIFT i myszy).

Centers (środkuj) - zaznaczone komponenty zostają wyśrodkowane względem komponentu o najwyższym priorytecie spośród zaznaczonych lub względem pierwszego zaznaczonego (jeśli komponenty były zaznaczone przy użyciu klawisza SHIFT i myszy).

Space equally (rozmieść równomiernie) - zaznaczone komponenty zostają równomiernie rozmieszczone na obszarze prostokątnym wyznaczonym przez zaznaczone komponenty, odległość między sąsiadującymi komponentami będzie taka sama.

Center in Window (ustaw na środku okna) - zaznaczone komponenty zostają ustawione na środku okna formatki. Rozmieszczenie komponentów względem siebie nie ulega zmianie, zostają one przemieszczone jako całość, względem całego okna.

Rozmieszczanie komponentów przy użyciu siatki.

Siatka (ang. grid) jest to zbiór równomiernie rozłożonych punktów na formatce. Zadaniem siatki jest pomoc w układaniu wizualnych komponentów na formatce. Właściwości siatki ustawiamy w opcjach środowiska w oknie Environment Options (polecenie Tools | Environment Options). Na karcie Preferences znajduje się grupa opcji Form Designer dotyczących siatki. W polu Grid Size X określamy gęstość poziomą siatki, a w polu Grid Size Y - gęstość pionową. Gęstość określa odległość w pikselach między dwoma sąsiednimi punktami siatki. Wszystkie elementy możemy rozmieścić tak, aby ich lewy, górny róg pokrywał się z jedną z kropek. Opcja Display Grid określa, czy siatka jest widoczna na formatce. Jeśli siatka jest uaktywniona (włączona opcja Snap to grid), to podczas przesuwania komponentów za pomocą myszy są one przyciągane do siatki. Najmniejszą odległością o jaką możemy przesunąć komponenty jest odległość pomiędzy punktami siatki. Polecenie Edit | Align to grid wyrównuje zaznaczone komponenty w ten sposób, że lewy górny narożnik każdego komponentu musi się pokryć z najbliższym punktem siatki.

Wielkość formatki oraz komponentów na niej umieszczonych możemy zmienić na trzy sposoby:

Po zaznaczeniu komponentu na jego krawędziach pojawiają się uchwyty rozmiaru. Każdy uchwyt służy do zmiany rozmiaru w odpowiednim kierunku techniką przeciągania (ang. drag).

Gdy chcemy zmienić rozmiar większej liczby komponentów używamy polecenia Edit | Size, które powoduje otwarcie okna dialogowego Size. Okno to umożliwia zmianę rozmiaru wszystkich zaznaczonych komponentów.

Okno Size zawiera dwie grupy elementów do zmiany szerokości (Width) i wysokości (Height) komponentów. Poszczególne elementy obu grup odpowiednio oznaczają:

Jeśli chcemy wielkość komponentu zmienić za pomocą Inspektora Obiektów, musimy interesujący nas komponent wybrać, a następnie ustawić jego właściwości Height (wysokość) i Width (szerokość) w odpowiednich polach. Jednostką jest piksel.

Skalowanie polega na pomniejszeniu lub powiększeniu rozmiaru (wysokości i szerokości) wszystkich (a nie zaznaczonych) komponentów znajdujących się na formatce oraz samej formatki. Skalowanie uruchamiamy za pomocą polecenia Edit | Scale. W polu Scaling factor podajemy procentową wartość z zakresu 25%÷400%, o jaką ma być zmniejszony lub zwiększony rozmiar komponentów i formatki. Jeśli chcemy skalować komponenty o wartość spoza podanego zakresu, musimy kilkukrotnie wykonać operację skalowania.

Są sytuacje, w których dwa wizualne komponenty nakładają się. Należy wówczas zdecydować, który z komponentów ma być na pierwszym planie, a który w tle. Do tego celu służą dwa polecenia znajdujące się w menu Edit: Bring to Front (przesuń do przodu) i Send to Back (przesuń do tyłu). Przed użyciem powyższych opcji należy wybrać odpowiedni komponent.

Wszystkie okienne komponenty znajdujące się na formatce są ułożone w ścisłym porządku (posiadają określony priorytet). Priorytet ten ustala kolejność poruszania się użytkownika między komponentami w gotowej aplikacji za pomocą klawisza TAB. Zmianę tej kolejności umożliwia okno Edit | Tab Order, które zawiera listę wszystkich okiennych komponentów sterujących, znajdujących się na formatce. Jeśli chcemy jednemu z komponentów zmienić priorytet, wybieramy go na liście i przy użyciu przycisków ze strzałkami przesuwamy w dół (priorytet się zmniejsza) lub w górę (priorytet się zwiększa).

Gdy skończymy układanie komponentów na formatce, warto jest zabezpieczyć je przed przypadkowym przestawieniem. W tym celu istnieje polecenie Edit | Lock Controls. Włączenie funkcji blokowania komponentów jest sygnalizowane wciśniętym przyciskiem 0x01 graphic
przy nazwie polecenia. Jeśli zdarzy się, że komponenty na formatce nie chcą się przestawić, należy sprawdzić czy nie jest włączona ich blokada.

5.3. Procedury obsługi zdarzeń

Aplikacja w systemie Windows jest sterowana zdarzeniami. Po uruchomieniu aplikacji następuje wykonanie instrukcji inicjujących a następnie aplikacja wykonuje wielokrotnie pętlę, w której sprawdza czy wystąpiło jakieś zdarzenie systemowe. Zdarzeniem może być np. kliknięcie przez użytkownika przycisku lub naciśnięcie klawisza. Jeśli zajdzie odpowiednie zdarzenie, to zostaje uruchomiona procedura jego obsługi. Po wykonaniu procedury aplikacja znów wykonuje pętlę, oczekując na kolejne zdarzenie.

W trakcie działania pętli oczekującej na zdarzenie lub wykonywania procedury obsługi zdarzenia, system co jakiś czas przerywa działanie aplikacji. System wielozadaniowy musi dzielić czas procesora między wszystkie uruchomione aplikacje. Każdej aplikacji system przydziela czas procesora na bardzo krótki czas, zwany kwantem. Po tej chwili system przerywa wykonywanie aplikacji i zapamiętuje jej stan, następnie odtwarza stan innej aplikacji i jej przyznaje czas procesora, co odbywa się cyklicznie dla wszystkich uruchomionych aplikacji.

W ramach jednej aplikacji może być uruchomionych jednocześnie kilka procedur, nazywamy je wątkami. Jeśli aplikacja wykonuje tylko jedną procedurę, to znaczy, że posiada jeden wątek.

Każdy komponent i każda formatka posiadają zdarzenia, dla których możemy napisać procedurę obsługi. Szkielet procedury tworzy za nas Delphi. Zdarzenia dla danego komponentu są widoczne na karcie Events w Inspektorze Obiektów.

Przykładowo komponent Button, który reprezentuje przycisk, posiada zdarzenie OnClick. Kiedy użytkownik w czasie działania aplikacji kliknie w przycisk, to zostanie wykonana procedura obsługi zdarzenia OnClick.

W fazie projektowania aplikacji umieszczamy na formatce odpowiednie, niezbÄ™dne komponenty i ustawiamy ich wÅ‚aÅ›ciwoÅ›ci poczÄ…tkowe, korzystajÄ…c z uprzednio wymienianych sposobów (rozmieszczenie i rozmiar przy użyciu myszy, te i inne wÅ‚aÅ›ciwoÅ›ci przez odpowiednie zapisy na karcie Properties w Ins­pektorze Obiektów).

Niekiedy wygodne jest nadanie właściwości obiektom dopiero po zainicjowaniu aplikacji. Wówczas należy dokonać odpowiednich przypisań w oknie kodu wewnątrz procedury obsługi zdarzenia OnCreate dla formatki wybieramy w Inspektorze Obiektów formatkę (Form) przełączamy się na zakładkę zdarzeń Events i klikamy dwukrotnie w pole obok zdarzenia OnCreate. Okno kodu wzbogaca się o wzorzec procedury:

procedure TForm1.FormCreate(Sender: TObject);

begin

end;

którą uzupełniamy o odpowiednie przypisania lub aktywizację metod, np.:

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.Color:= clWhite; {1}

Label1.Font.Size:=10; {2}

Label1.Hide {3}

end;

W powyższym przykładzie pierwsza instrukcja to nadanie wartości (przypisanie) dla właściwości Color obiektu Form1. Odniesienie do właściwości odbywa się w sposób tzw. kwalifikowany (znany z typu rekordowego), najpierw piszemy nazwę zmiennej obiektowej, kropkę i nazwę właściwości (pola). W tym przypadku nadajemy wartość jednej z dostępnych stałych koloru (definiowanych w module standardowym Graphics), tu wartości clWhite (nazwa stałej dla koloru białego). Inne dostępne stałe kolorów możemy przejrzeć w Inspektorze Obiektów dla właściwości Color (nie wszystkie komponenty mają tę właściwość).

Niektóre właściwości obiektów są typu prostego, wówczas nadajemy im wartości liczbowe, tekstowe, wyliczeniowe (dostępne z listy) itp. Istnieją też właściwości typu złożonego, np. tablicowego:

Memo1.Lines[1]:= 'Kowalski';

Tu przypisano wartość tekstową dla właściwości Lines obiektu (komponentu) Memo1, stąd zapis charakterystyczny dla zmiennej tablicowej (indeks elementu tablicy w nawiasie kwadratowym)

Pewne właściwości obiektów są typu obiektowego lub rekordowego, zatem kwalifikacja jest złożona (druga instrukcja przykładu). Właściwość Font jest typu TFont (typ obiektowy), który posiada własne pola i metody (tu: Size - rozmiar).

Trzecia instrukcja w przykładzie jest ilustracją aktywizacji metody (procedury) Hide (ukryj). Procedura ta jest bezparametrowa. Jej działanie polega na ukryciu etykiety Label1.

Są też metody (procedury, funkcje) wymagające wpisania argumentów wykonania, np.

Memo1.Lines.Append('Nowak');

której działanie polega na dopisaniu (ang. Append - dopisz, dołącz) wiersza tekstu do komponentu Memo1. Tu właściwość Lines komponentu Memo1 posiada metodę Append.

Prawidłowe użycie odpowiednich właściwości i metod ułatwia system podpowiedzi w trakcie pisania tekstu w oknie kodu. Po napisaniu kropki odniesienia do pola lub metody, ewentualnie po otwarciu nawiasu po nazwie metody, pojawia się rozwijane okienko dostępnych właściwości i metod dla danego obiektu (komponentu) lub parametry i ich typy dla wybranej metody.

W oknie kodu możemy oczywiście używać mechanizmów znanych nam z języka Pascal (instrukcji warunkowych if, case, instrukcji iteracyjnych for, while repeat, instrukcji wiążącej with itp.). Wszystko zależy od algorytmu, który chcemy zapisać dla danego zdarzenia. Należy pamiętać, iż wszelkie pomocnicze zmienne muszą być deklarowane lokalnie lub globalnie.

Przykładowo, jeśli chcemy, aby po naciśnięciu przycisku Button odbyło się obliczenie sumy 10 pierwszych liczb całkowitych i ukazanie wyniku na etykiecie Label1, wykonujemy następujące działania:

  1. umieszczamy przycisk Button i komponent Label na formatce,

  2. dla wybranego w Inspektorze Obiektów przycisku Button wybieramy na zakładce Events zdarzenie OnClick - po dwukrotnym kliknięciu w drugą kolumnę (obok nazwy zdarzenia) tworzony jest szkielet procedury jego obsługi w oknie kodu (można też kliknąć dwukrotnie w przycisk Button),

  3. uzupełniamy szkielet procedury następująco:

procedure TForm1.Button1Click(Sender: TObject);

var suma, i:integer;

begin

suma:=0;

for i:=1 to 10 do suma :=suma + i;

Label1.Caption:=IntToStr(suma)

end;

Jak widzimy iteracja wymaga deklaracji zmiennej sterującej i oraz zmiennej suma. Wyprowadzenie wartości obliczonej to przypisanie do właściwości Caption komponentu Label1 wartości tekstowej. Ponieważ suma jest typu integer konieczna jest konwersja typu całkowitego na typ string, dokonywana przez funkcję IntToStr. Więcej o konwersjach typów dowiemy się w trakcie ćwiczeń.

18

17

okno formatki

okno modułu

komponenty

zakładka
z komponentami

przycisk uruchomienia

zakładka zdarzeń

zakładka właściwości

Inspektor obiektów



Wyszukiwarka

Podobne podstrony:
Matlab wiadomości wstępne
02 Wiadomości wstępne
K02 Wiadomości wstępne – część 2
wiadomości wstępne (1)
K01 Wiadomości wstępne – część 1
Test z wiadomości wstępnych
ściąga polan- zajebista, Wiadomości wstępne
Angielski FCE, Wiadomosci wstepne, JES
wiadomosci wstepne sciaga(2), Dokumenty w-f, Anatomia
Roboty mobilne, Wiadomości wstępne o robotach
Algebra Roszkowska, ALGEBRA LINIOWA CZI, WIADOMOŚCI WSTĘPNE
02 Rozdział 01 Wiadomości wstępne o równaniach różniczkowych
Wiadomości wstępne
69 Motoryka przewodu pokarmowego wiadomości wstępne
Kuźnictwo ZIP PTM Wiadomości Wstępne
Wiadomości wstępne, masaz, technik masazysta

więcej podobnych podstron