artykuły

Delphi - Budowa modułu

18:39
Tue, 1 January 2002
Artykuł opisuje podstawowe pojęcia związane z programowaniem. Wyjaśnia proces programowania i terminologię z tym związaną. Opisuje również budowę modułu w Delphi.

Witam!

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ątku przypomnę, ż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, Variants, 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 wywołana zostanie procedura OnMouseEnter jednak jeśli kursor opuści pole przycisku wywołana zostanie procedura OnMouseLeave oznaczająca, że kursor myszy znalazł się poza obszarem przycisku (tak naprawdę są to procedury obsługujące tzw. komunikaty systemowe - można o nich poczytać w artykule "Delphi - Komunikaty"). Procedury takie umieszczane są po słowieimplementation. 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ństwie 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 rezultatu.
Tak przedstawia się deklaracja funkcji:

function Moja_Funkcja(X, Y : Integer) : Integer;

Po słowie function następuje nazwa funkcji, w nawiasie podane są zmienne o typie danych określonym po dwukropku, które zostaną przekazane do funkcji podczas jej wywoływania, następnie (już po nawiasie) określony jest typ zwracanej przez funkcje wartości. 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óra by 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:

  • IntToStr - konwertuje zmienna "Integer" na "String"
  • StrToInt - "String" na "Integer"
  • StrPCopy - "String" na "PChar"
  • StrPas - "PChar" na "String"
  • FloatToStr - typ zmiennoprzecinkowy (np. 0.3) na "String"
  • StrToCurr - "String" na "Currency" (typ zmiennoprzecinkowy)
  • TimeToStr - zmienna "Time" na "String"
  • DateToStr - zmienna "Date" na "String"
  • StrToDate - "String" na "Date"
  • StrToTime - "String" na "Time"
  • CurrToStr - typ zmiennoprzecinkowy Currency (np. 0.5) na "String"

I na tym skończymy! Uff! Oki, mam nadzieje, że czegoś się nauczyliście.

12345
Delphi - Budowa modułu Autor opinii: Czytelnicy, data przesłania: 4

Podobne artykuly:

Skomentuj

Aby zamieścić komentarz, proszę włączyć JavaScript - niestety roboty spamujące dają mi niezmiernie popalić.






Komentarze czytelników

    • TomRiddle
    • Mon, 27 December 2010, 12:30
    • Witam, już mozna powiedzieć jestm stałym bywalcem ale jest problem i prosiłbym żeby pan uaktualnił artykuł.

      Otóż z tego co mi się wydaje nie ma tu nic o dodaniu do projektu innego modułu (napisanego przez siebie).
      Np. przez dodanie do"uses" nazwy tegoż modułu.
Dexter