|
Tym razem zajmiemy się doświadczeniami z innej beczki tj. programowaniem. Zaawansowani programiści w Delphi(ego) mogą ten artykuł pominąć gdyż przedsawia on tylko podstawowe pojęcia z tej dziedziny i nie przechodzi do tajników pisania programów... Nie będę się rozpisywał, tylko zacznę od razu. Chciałbym tu przedstawić budowę modułu w Delphi. Otóż na początek przypnę, że moduł jest plikiem tekstowym (zawiera tekst :) i może być on kompilowany do postaci pliku wykonywalnego EXE. No właśnie, ale co to jest ta kompilacja ? Każdy doświadczony programista odpowie na to pytanie w taki sposób, że kompilacja to proces "tłumaczenia" kodu źródłowego programu (napisanego przez użytkownika) do pliku wykonywalnego EXE. W procesie kompilacji program kompilujący (kompilator) nasz program "zmienia" wszystkie instrukcje napisane przez programistę w język zrozumiały tylko dla procesora tzw. kod maszynowy ( i nie próbujcie otwierać plików exe przez wordpada :). Kompilator najpierw analizuje kod źródłowy (debuguje), jeżeli kod źródłowy zawiera błędy kompilator zatrzymuje proces debugowania i wskazuje błąd. Po analizie kodu źródłowego kompilator zaczyna proces translacji. Każdy język programowania używa innego kompilatora tj. gdybyście chcieli skopiować kod źródłowy programu napisanego w Delphi do kompilatora C++ wykryłby on w nim błędy i nie skompilowałby kodu. Każda platforma, czasami nawet procesor wymaga innego kodu źródłowego, zwykle więc istnieje kilka kompilatorów dla jednego języka programowania. OK, myślę, że wszyscy już wiedzą co to jest kompilator i jaką pracę wykonuje, teraz przejdziemy do budowy modułu w Delphi. Poniżej przedstawiam nowo utworzony moduł w Delphi. Wygląda on następująco: 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.
Kod w języku Delphi zawarty jest w procedurach, zwykle każde
zdarzenie ma swoją procedurę np. Jeśli najedziesz na przycisk kursorem
myszy wygenerowana zostanie procedura OnMouseEnter jednak jeśli kursor
opuści pole przycisku wygenerowana zostanie procedura OnMouseLeave
oznaczająca, że kursor myszy znalazł się poza obszarem przycisku.
Procedury taki umieszczane są po słowie implementation . Ale
zacznijmy analizować od początku, od pierwszego słowa które zaczyna
moduł, mianowicie jego nazwy. Tak, na samym początku zadeklarowana zostaje
nazwa modułu. Następnie, po słowie "uses" następuje wypisanie wszystkich
modułów wchodzących w skład naszego modułu, czyli jeżeli używamy
komponentu Menu w liście uses zostanie dodany moduł Menus, obsługujący ten
komponent. Jedziemy w dół i widzimy sekcje type gdzie deklarowane są nazwy
wszystkich komponentów które umieszczone są na formularzu np. przyciski,
pola tekstowe, etykiety itp. Słowo po lewej to nazwa naszego komponentu.
Można ja zmieniać według własnego uznania, zresztą łatwiej to zrobisz w
Inspektorze Obiektów, zaznaczając komponenet i w Inspektorze Objektów
modyfikując pole Name. Po prawej stronie zawarty jest typ komponentu np.
dla przycisku będzie to TButton, dla pola tekstowego TEdit itp. Każdy typ
komponentu poprzedzony jest litera "T" np. TEdit, TMemo, TButton itp.
Wszystko, co znajduje się po słowie "type" to Klasa. Po słowie "private" i
"public" istnieje możliwość wpisywania własnych procedur, zależnie gdzie
je wpiszemy będą one dostępne w innych modułach. Istnieje możliwość
deklarowania własnych Klas. Następnie, poniżej istnieje słówka "var" w tym
miejscu deklarujemy zmienne, które będą widoczne nie w jednej, lecz we
wszystkich naszych procedurach w tym module. Jeśli chcemy aby zmienna była
obecna tylko w jednej procedurze piszemy coś takiego procedure Moja_procedura; var x : String; begin end;Widzicie, teraz gdy spróbujecie się odwołać w innej procedurze do tej zmiennej kompilator wygeneruje błąd. Jeszcze słowo implementation, jak już wspomniałem tu umieszczane są wszystkie procedury. Procedury Procedura to wydzielony kod, który wykonuje określoną czynność i w przeciwieństwi do funkcji nie zwraca wyniku. Delphi sam generuje procedury. Nazwa procedury poprzedzona jest słowem "procedure". Następnie nazwa komponentu, którego dotyczy. Później słowo "Click" (lub jakiekolwiek inne zdarzenie np. "OnMouseMove"). Procedura TForm1.ButtonClick zostanie wykonana gdy użytkownik programu klikniecie na przycisk. Gdy na formie programu klikniemy na przycisk treść procedury wpisana zostanie w sekcji "Implementation". Funkcje Możliwe też jest deklarowanie własnych funkcji. Dla jasności funkcja różni się od procedury tym, że zwraca rezultat (wynik). Po słowie private należy zwykle dopisać taką linie oczywiście odpowiednio zmodyfikować trzeba typ zmiennych oraz typ rezyltatu. Tak przedstawia się deklaracja funkcji: function Moja_Funkcja(X, Y : Integer) : Integer;Nazwa funkcji Wartości funkcji (zmienne i ich typ) Wynik funkcji (typ) Słowo "function", mówi kompilatorowi, że ma do czynienia z funkcja. Następnie w nawisanie przedstawiane są dwie zmienne typu "Integer". Można się obyć bez tych zmiennych, lecz do tego przykładu potrzebne nam będą te właśnie zmienne. Na samym końcu typ wyniku, "Integer". Procedura wyglądała by tak: procedure Moja_Procedura(X, Y : Integer);Widzicie? Tak, procedura nie zwraca wyniku (rezultatu jej działania). Aby dodać taką funkcję do sekcji Implementation, najedź na nią kursorem i naciśnij kombinacje klawiszy: Ctrl + Shift + C. Tu możemy wpisać swój kod: function TForm1.MojaFunkcja(X, Y: Integer): Integer; begin // rezultat funkcji: Result := X + Y; end;Tak przedstawia się nasza funkcja. Słowo "Result" śluzy do zwracania wyniku. Rezultatem działania takiej funkcji będzie dodanie do siebie dwóch zmiennych: X i Y (oczywiście typu integer). Teraz napiszemy procedurę któraby eksportowała do funkcji liczby, a następnie importowała by wynik działania funkcji. A więc do dzieła! Utwórz na formularzu etykietę i przycisk i kliknij na niego dwa razy. Zostaniesz przeniesiony do edytora kodu. Teraz odwołaj się do naszej funkcji wpisując w procedurze takie instrukcje: Label1.Caption := IntToStr(Moja_Funkcja(2, 2));Funkcja IntToStr konwertuje typ Integer zmiennej na typ String, który można już wyświetlić w etykiecie. Możliwe są jeszcze inne konwersje:
I na tym skończymy! Uff! Ok, mam nadzieje, że czegoś się nauczyliście. Do neXt art! ...powrót |