280 likes | 567 Views
Programowanie w środowisku DELPHI. Wstęp do środowiska Delphi Proste typy danych Funkcje i procedury- pojęcie podprogramu. Wstęp do środowiska Delphi. Elementy środowiska Delphi Pliki projektu Główne bloki projektu Etapy tworzenia aplikacji
E N D
Programowanie w środowisku DELPHI Wstęp do środowiska Delphi Proste typy danych Funkcje i procedury- pojęcie podprogramu
Wstęp do środowiska Delphi Elementy środowiska Delphi Pliki projektu Główne bloki projektu Etapy tworzenia aplikacji Podstawowe komponenty komunikacji :człowiek-program-człowiek Proste aplikacje
Elementy środowiska Delphi Widok środowiska • Podstawowe narzędzia to: • formatka- to graficzny obraz widoku okna tworzonej aplikacji, na który można osadzać przy pomocy myszki dowolne komponenty pobranez palety • edytor kodu- to edytor tekstu, w którym pisze się ciało programu stosując identyczne operacje edycyjne jak w popularnych edytorach tekstowych • komponenty- to obiekty, które przyśpieszają tworzenie aplikacji, można podzielić ja na wizualne i niewizualne, ich liczba może być rozbudowywana, programista sam może je tworzyć • inspektor obiektów-to narzędzie służące do wizualnego ustawiania podstawowych właściwości aktywnego komponentu jak i do oprogramowania zdarzeń związanych z tym komponentem
Główne bloki projektu • W projekcie aplikacji znajdują się plik zawierające kod w języku Object Pascal: • pliki modułów(*.pas), które zaczynają się od słowa kluczowego unit ; plików tych może być więcej niż jeden • plik projektu (*.dpr), który zawiera główny blok zaczynający się od słowa kluczowego program ; istnieje tylko jeden taki plik w obrębie danego projektu
Etapy tworzenia aplikacji • Wybrać z menu File\New\Application lub wykorzystać już istniejąca, która standardowo tworzona jest przy uruchomieniu środowiska • Umieścić komponenty na formatce zgodnie z zapotrzebowaniem • Oprogramować zdarzenia i właściwości związane z tymi komponentami • Oprogramować własne procedury i funkcje związane z tworzonym projektem • UWAGA nie ma reguły kiedy i w którym momencie tworzonego projektu należy go zapisać, ale należy pamiętać o możliwości stracenia całej swojej pracy jeżeli nie będzie ona co jakiś czas zapisywana. • Kompilacja odbywa się za pomocą polecenia z menu Run\Run lub klawisza F9; sama kompilacja bez uruchomienia pliku *.exe to CTRL+F9; sprawdzenie czy moduły są prawidłowo zbudowane to menu Project\Syntax Check • Na pracowni przed kompilacją zapisz swój projekt w utworzonym przez siebie folderze
Podstawowe komponenty komunikacji: człowiek-program-człowiek TLabel- odpowiada Pascalowej instrukcji WRITE- wyświetla tekst TEdit- odpowiada Pascalowej instrukcji Read, służy do wprowadzania danych TButton- to komponent standardowego klawisza
Proste aplikacje Zad 1: Standardowe zamknięcie programu Zad 2: Zamknięcie programu z TButton Zad 3: Zamknięcie programu z klawisza ESC lub dowolnie innego Zad 4: Zamknięcie programu z komunikatem ostrzegawczym Zad 5: Suma dwóch liczb zapisanych w komponentach TEdit
Zad 1: Standardowe zamknięcie programu • Wybierz z menu File\New\Application • Zapisz projekt • Skompiluj i uruchom projekt (klawisz F9)- wynikiem będzie czyste okno aplikacji a w folderze gdzie zapisałeś projekt pojawi się plik z rozszerzeniem EXE, jest to Twój program • Zamknij swój program kombinacją klawiszy ALT+F4
Zad 2: Zamknięcie programu z Tbutton • Wybierz z menu File\New\Application • Zapisz projekt • Dodaj do formatki komponent Tbutton • W Inspektorze obiektów zmień właściwość CAPTION (zakładka Properties) komponentu TButton na : ZAMKNIJ • W inspektorze obiektów przejdź do zakładki EVENTS. Odszukaj zdarzenia OnClick i dwa razy szybko kliknij na białym polu obok nazwy tego zdarzenia • W edytorze kodu w pisz komendę close; procedure TForm1.Button1Click(Sender: TObject); • begin • close; • end; • Skompiluj projekt i kliknij myszką w obszarze klawisza
Zad 3: Zamknięcie programu z klawisza ESC lub dowolnie innego Idea zadania to wykorzystanie tablicy kodów ASCII klawiszy do zamknięcia aplikacji przy pomocy wybranego klawisza oraz wykorzystaniu zdarzenia wciśnięcia klawisza wykrywanego przez formatkę aplikacji. • Powtórz czynności z zadania 1 • Możesz wykorzystać zdarzenie KeyPress lub KeyDown • procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); • begin • if key=#27 then close; • end; • procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; • Shift: TShiftState); • begin • if key=27 then close; • end; • Jeżeli na formatce istnieje np komponent TButton to należyjego zdarzenie KeyPress lub KeyDown podpiąć do zdarzeń formatki używając inspektora obiektów w przypadku innych komponentów można wykorzystać „ogniskowanie”aktywności po ich wykorzystani używając właściwości SetFocus wskazanego komponentu tu Button1.SetFocus;
Zamknięcie programu z komunikatem ostrzegawczym • Powtórz czynności z zadania 2 • Uzupełnij procedurę klikniecia klawisza na • procedure TForm1.Button1Click(Sender: TObject); • begin • if MessageBox(handle,'Czy na pewno chcesz zamknąć','Komunikat',mb_OkCancel+mb_IconQuestion)=idOk then • close else exit; • end; • Jeżeli w Twoim programie chcesz się odwoływać do powyższego zdarzenia to wystarczy że wywołasz procedurę tego zdarzenia przykładowo: if key=#27 then Button1Click(Sender);
Suma dwóch liczb zapisanych w komponentach Tedit • Powtórz czynności z zadania 2 lub 3 • dodaj 2 komponenty TEdit, 1 Tlabel i 1 Tbutton • W inspektorze obiektów ustaw TEdit.Text na 0; Tlabel.Caption na puste, TButton na + • Zdarzenie OnKeyPress Edit1 i Edit2 • procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); • begin • if (key=#8)or(key='-') then exit; • if key=#27 then Button1Click(Sender);//skok do proc. wyjscia • if (key<'0')or(key>'9')then key:=#0; • end; • Procedurę kliknięcia w klawiszu Button2 oprogramuj jak poniżej • procedure TForm1.Button2Click(Sender: TObject); • begin • Label1.Caption:=IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text)); • end;
Podstawowe informacje Deklaracja danych Proste typy danych Funkcje konwersji Konwersja- proste zadanie
Deklaracja danych Nie zależnie od rodzaju danych obowiązują ścisłe reguły ich deklaracji. W zależności od miejsca deklaracji zmienna może mieć zasięg globalny, lokalny lub istnieć tylko w wybranej procedurze bądź funkcji. Sposób deklaracji Przykład Rodzaj zmiennej stała zmienna const g=9.81; s=‘szkola’; var a:real; t:word;
Przykład lokalizacji zapisu zmiennych unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const s:string=‘Szkoła’; //zasięg globalny var Form1: TForm1;//zasięg globalny implementation var i:integer;//zasięg tylko w obrebie unitu, czyli lokalny {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); const //zasięg tylko wewnatrz procedury g=9.81; var a, t :real; i:word; begin end; end.
Funkcje konwersji Konwersja to proces zamiany jednego typu danych w drugi. Najczęściej wykonywana jest przy zwracaniu wyników ( liczby zamieniane są na tekst) • Wybrane funkcje konwersji • Val(tekst:string,var zmienna,kod błędu:integer);-zamiana tekstu na liczbę • Str(liczba,tekst:string); można tez podac dokładność po przecinku Str(t:8{długość w znakach }:3{liczba znaków po przecinku},s); • FloatToStr- z liczby rzeczywistej na tekst; StrToFloat- z tekstu na liczbę rzeczywistą • IntToStr- z liczby całkowitej na tekst; StrToFloat- z tekstu na liczbę całkowitą
Konwersja- proste zadanie Utwórz aplikacje, która zamieni wczytany nr z klawiatury na znak z tablicy kodów ASCII (zakres liczbowy od 0 do 255) Przykładowa funkcja wykonująca zadaną konwersję: procedure TForm1.Button1Click(Sender: TObject); var i:byte; kodBledu:integer; begin Val(Edit1.Text,i,kodBledu); if kodBledu<>0 then begin Messagebox(handle,'Podaj liczbę z zakresu 0-255','Komunikat',mb_IconError); exit; end; Label1.Caption:=Char(i); end;
Funkcje i procedury- pojęcie podprogramu Podprogram jest to ciąg instrukcji mogący zawierać własne deklaracje zmiennych określony jednym identyfikatorem (nazwą). W programie głównym jedna instrukcja pozwala wykonać podprogram. Podprogram może być wywoływany kilka razy w programie głównym. Ważną właściwością podprogramu są parametry - czyli pewne wartości (lub zmienne) dla których zostaje wykonany ciąg instrukcji w podprogramie.W Pascalu istnieją dwa typy podprogramów: funkcje i procedury. Funkcje różnią się od procedur tym, że można je traktować jako wartość określonego typu (inaczej określa się to że funkcje zwracają wartość) - oznacza to że mogą występować w wyrażeniach. Przykładem funkcji są funkcje SIN, COS, ORD itp.Procedury traktowane są jako nowa instrukcja języka - nie mogą być używane w wyrażeniach.Funkcje i procedury mogą mieć lub nie mieć parametrów. Ewentualne parametry przekazuje się w wywołaniu podprogramu w nawiasach okrągłych (np. x:= SIN(2*y)). Uwaga: Funkcja zwraca wynik przez nazwę lub przez słowo kluczowe result:= Patrz zadanie ZADANIE
Postać procedury i funkcji A)Bez parametrów FUNCTION nazwa:typ funkcji; VARczęść deklaracyjnaBEGINinstrukcje funkcjiEND B) Z parametrami FUNCTION nazwa(parametr1:typ;parametr2:typ;...):typ funkcji; VARczęść deklaracyjnaBEGINinstrukcje funkcjiEND A) Bez parametrów PROCEDURE nazwa ; VARczęść deklaracyjnaBEGINinstrukcje proceduryEND; B) Z parametrami PROCEDURE nazwa (parametr1:typ; parametr2 : typ;...); VAR część deklaracyjnaBEGINinstrukcje proceduryEND;
Uwagi • Parametry przekazywane do funkcji lub procedury mogą być przekazywane na kilka sposobów: • procedure nazwa(x,y:integer); • procedure nazwa(const x,y:integer); to samo dotyczy funkcji • procedure nazwa(var x,y:integer); • Procedury jak i funkcje mogę mieć własne podprocedury lub podfunkcje • procedure nazwa(x,y:integer); • procedure nazwa1(var x:integer); • begin • end; • Var • begin • end;
Zasięg procedury lub funkcji • O zasięgu działania procedury lub funkcji decyduje miejsce jej deklaracji • Zasięg globalny • ..... • procedure a1; //deklaracja nagłówka procedury • .......... • implementation • ............ • {$R *.DFM} • procedure a1; // implementacja procedury, zasięg lokalny uzyska się w tedy jeżeli nie zastosuje się deklaracji nagłówka • begin • end; • Zasięg wewnątrz klasy i poza klasą • tMapa=class (TOmegaSurface) • private • procedure Rysuj;// wewnątrz klasy • public • procedure Ruch(const AVX,AVY:single);//Dostępna poza klasą • end; • Uwaga : w części implementacyjnej należy opisać cała tych procedur
Zadanie Utwórz aplikację, która przy pomocy 4 funkcji wykonujących podstawowe działania matematyczne (+, -, *, /) na dwóch zmiennych pokaże wynik tych działań (z dokładnością do 3 miejsca po przecinku) po wciśnięciu odpowiedniego klawisza działań. Funkcje działań zadeklaruj jako funkcje globalne z parametrem, na przykład : function Dodaj(a,b:real):real; var wynik:string; Form1: TForm1; function Dodaj(a,b:real):real; implementation {$R *.DFM} function Dodaj(a,b:real):real; begin result:=a+b; end; procedure TForm1.Button1Click(Sender: TObject); begin str(Dodaj(StrToFloat(Edit1.Text),StrToFloat(Edit2.Text)):0:3,wynik); LAbel3.Caption:=wynik; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key='.' then key:=','; end;