Delphi programozás alapjai Nagyváradi Anett anettn@morpheus.pte.hu http://morpheus.pte.hu/~anettn PTE PMMK MIT
Borland Delphi fejlesztői környezet 2. ELŐADÁS Borland Delphi fejlesztői környezet Bevezetés Megjegyzés: a ppt-ben található színkódok: forráskód általános szintaxisa példaprogram részlet
Történelem 1968-70 Pascal nyelv és fordító 1983 Turbo Pascal 1.0 … 1995 Delphi 1.0 … 1998 Delphi 4.0 … 2001 Delphi 6.0 2002 Delphi 7.0, Delphi .NET 2003 Delphi 8.0 2004 Delphi 2005 2005 Delphi 2006
Borland Delphi 7.0 - Objektum orientált nyelvre épül: Object Pascal - IDE: Integrated Development Environment Integrált Fejlesztői Környezet - Eseményvezérelt programozás
OOP jellemzői Egységbe zárás - az adatstruktúra és az őt kezelő függvény egy egységet képez: objektum (osztály) Öröklés - meglévő osztályokból levezetett újabb osztályok öröklik a definiálásukhoz használt alaposztályok már létező adatstruktúráit és függvényeit Többrétűség - adott tevékenység (metódus) azonosítója közös lehet egy adott osztályhierarchián belül, ugyanakkor a hierarchia minden egyes osztályában a tevékenységet végrehajtó függvény megvalósítása az adott osztályra nézve specifikus
OOP - fogalmak Osztály – felhasználó által megadott adattípus Objektum –osztály példánya Mezők – objektum részét alkotó változók Metódus – függvények, eljárások, melyek valamely osztály vagy ősosztály objektumaira vonatkoznak Tulajdonság – mint egy mező, hatása metódus Öröklődés – egy osztály lehet egy másik osztály leszármazottja – örökli annak mezőit, metódusait, tulajdonságait
Egy Delphi program szerkezete Állomány neve Interfész szakasz (típusdeklarációkat tartalmaz) Leírja, hogy az alkalmazás többi része mit lát a unitban (változók, konstansok, hívható eljárások definíciói) Ez a rész nem futtatható kódot tartalmaz. Implementációs szakasz A kódot itt írjuk és futtatjuk. (az itt definiált eljárások, függvények csak itt használhatók) Erőforrás fordítási direktíva Állomány vége 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.
Osztályok szintaxisa TMyClass = class {osztálydeklaráció} End; TMyClass = class (TObject) {alosztály} Alapértelmezetten minden osztály őse a TObject osztály. A TObject osztály rendelkezik egy ClassName osztálymetódus névvel, tehát: ShowMessage(TMyClass.ClassName); megadja az osztály nevét egy ablaküzenetben
Példa 1. Állapot leírása: osztály tartalmazza a példányok ‘tervrajzát’ (tulajdonságok) pl.: TKutya osztály tulajdonságai: TKutya = class Szín: TColor; Faj: String; Nem: String; Súly: Double; end;
Type TKutyaSzin = (ksBArna, ksFekete, ksFehér); Példa – folyt.1 Szín: TColor; Itt a Szín tulajdonság bármely szín lehet, a TColor egy előre definiált típus (pl.: kék kutya – ami nem szerencsés) Megoldás: új (felsorolásos) típus Type TKutyaSzin = (ksBArna, ksFekete, ksFehér); Majd a Szín attribútum újradefiniálása: Szín = TKutyaSzin;
Példa – folyt.2 2. Képességek: osztályok képességeit a metódusok adják meg – mire képes az adott osztály Metódusok: osztályok tagjaiként deklarált eljárások, függvények Pl.: TKutya = class Szín: TColor; Faj: String; Nem: String; Súly: Double; Procedure Ugat; Procedure Fut; end;
Példa – folyt.3 Az így megadott eljárásokat az implemen-tációs szakaszban (az osztály nevével ellátva) definiáljuk: Implementation Procedure TKutya.Ugat; Begin //kód End;
Példa – folyt.4 3.Objektumpéldány létrehozása: a definiált osztály egy példányát létrehozva használhatjuk annak tulajdonságait: változónév:=osztálynév.create Pl.: var Dog: TKutya; begin Dog:= TKutya.Create; //memória foglalás Dog.Szín:= ksFehér; … Dog.Free; //memória felszabadítás end;
A Self kulcsszó Metódus: eljárások, függvények, és rendelkeznek egy paraméterrel, mely az aktuális objektumra mutat A metóduson belül ere az objektumra a Self kulcsszóval hivatkozhatunk. pl.: futási időben létrehozott komponens esetén a Create-nek meg kell adni a komponens tulajdonosát, szülőjét
Példa- Self ProcedureTForm1.FormMouseDown (Sender:Object; Button: TMouseButton; Shift: TShiftState; X,Y:Integer); //ez az esemény paraméterként megkapja akattintás pozícióját is ellentétben az onclick-kel Var Gomb:TButton; Begin Gomb:=TButton.Create(Self); Gomb.Parent := Self; Gomb.Left := X; Gomb.Top :=Y; Gomb.Width :=Gomb.Width + 50; Gomb.Caption := Format(‘Button at %d %d’,[X,Y]); End; //beinkludálni StdCtrls (unitba!)
Delphi környezet Indítóképernyő: Menu – components Object Inspector – properties, events Object Tree View Form Unit
Menü - komponensek - Szokásos menüpontok (file, edit, stb.) - Gyorsbillentyűk - Programfutáshoz szükséges funkciógombok - Komponenspaletta (standard, additional, win32, datacontrols, stb.)
Object Inspector „Objektumvizsgáló” Tervezési módban – adatbeviteli ablak objektumok alapértelmezett értékei részére 1. Properties (tulajdonságok) tervezésnél módosítható adatok 2. Events (események) üzenetekre reagáló szubrutinok
Object Tree View „Objektumok fanézete” Objektumok közötti hierarchia alapján navigálhatunk Az objektumokat kapcsolati rendszerben mutatja
Ablak és kódszerkesztő Form: (ablak) „külcsíny” ez a felhasználói felület a kapocs a külvilág és a program között Unit: (kódszerkesztő) „belbecs” itt található a tényleges forráskód
Munkakörnyezet konfigurálása Tools > Editor Options
Project beállítások Project > Options - aktív form beállítás - alkalmazás tulajdonságai - verzió információ
Delphi alkalmazások *.res ikonállomány (bináris) *.pas forráskód állomány (pascal) *.dfm form és adatmodul állományok *.dpr projectállomány (pascal) *.dof project, options beállítások - aktuális beállítások *.cfg alkalmazás fordítását érintő konfigurációs állomány ~ backup fájlok –biztonsági másolat
Komponensek - Standard Main Menu menüszerkesztés- duplaklikkel menüszerkesztő Popup Menu legördülő menü Label címke, felirat Edit szövegdoboz Memo szövegmegjelenítésre Button gomb CheckBox jelölőnégyzet RadioButton választógomb (csoportosítás) ListBox lista ComboBox listáról elem kiválasztása ScrollBar gördítősáv GroupBox összetartozó komponensek csoportosítására RadioGroup választógomb csoportosítására Panel panelterület ActionList műveletlista
Komponensek - Additional BitBtn gomb(ikon rendelhető) SpeedButton gombterület(eszköztár) MaskEdit formátumos bekérőmező StringGrid szövegtáblázat DrawGrid táblázat Images képek Shape rajz Bevel terület ScrollBox gördíthető terület CheckListBox jelölőnégyzetes listaablak Splitter felosztás StaticText keretezett szövegsor ControlBar jelölősor Chart grafika További komponensek: ApplicationEvent ValueListEditor LabelEdit ColorBox ActionManager ActiopnMainMenuBar ActionToolBar CustomizeDlg
Komponensek – win32 TabControl fül komponens (lapozáshoz) PageControl füles lapok ImageList képsorozat RichEdit szövegszerkesztő TrackBar csúszka ProgressBar folyamatjelző UpDown léptető (nyílgombokra kattintva – tovább előre) HotKey vezérlőgomb Animate animáció – néma videoklipp DateTimePicker dátum idő komponens MonthCalendar naptár TreeView fa (adatokat rajzos fa szerkezetben jeleníti meg) ListView adatokat oszlopba rendezve jeleníti meg HeaderControl mozgatható fejléc StatusBar állapotsor (a munkaterület aljára) ToolBar eszközsor CoolBar görgethető eszközsor PageScroller lapozható eszközpaletta
Komponensek – System Timer stopper időtartam mérésére PaintBox rajzterület MediaPlayer multimédia (video) OleContainer ügyfélterület létrehozása DdeClientConv ügyfél-kiszolgáló kapcsolat felépítésére DdeClientItem ügyféladat (elküldésére a kiszolgálónak) DdeServerConv ügyfélkommunikáció DdeServerItem kiszolgálóadat
Komponensek – DataAccess DataSource adatforrás (összefűző komponens) ClientDataSet egyéni többfelhasználós adatbázis DataSetProvider adatbáziskérő (szervertről) XMLTransform XMLTransformProvider XMLTransformClient
Komponensek – DataControls DBGrid adatbázis tábla DBNavigator navigátorgombok DBText szövegsor adat DBEdit adatbekérő DBMemo szövegsorok adat DBImages kép adat DBListBox lista adat DBComboBox bekérő lista adat DBCheckBox jelölőnégyzet adat DBRadioGroup választógomb adat DBLookUpListBox táblaoszlop DBLookUpComboBox táblaoszlop szerkesztés DBRichEdit formázott szöveg DBCtrGrid táblakészítő DBChart grafika adat
Komponensek – BDE Table bázistábla Query lekérdezés (SQL) StoreProc műveletek DataBase adatbázis Session adatbázis csoport BatchMove táblamásoló UpdateSQL frissítő NestedTable visszaíró
Események (events) duplaklikk : ObjectInspector>Events>… OnActivate aktiválás hatására OnClick ráklikkelés hatására OnCreate létrehozás hatására OnDbClick duplaklikk hatására OnDestroy megszűntetés hatására OnMouseDown egéglenyomás hatására OnMouseMove egér áthaladás hatására OnKeyPress billentyűzet lenyomására OnKeyUp billentyűzet felengedésére
Metódusok Application.Terminate; - az alkalmazás leállítása Close; - az aktuális ablak bezárása Show; - ablak előhozása ShowModal; - ablak előhozása Create; - objektum létrehozása
Még két apróság View>Toolbars >Customize Show tooltips beállítása a könnyebb tanulás érdekében. Delphi súgó használata! (kulcsszón:F1)
Feladatok Ismerkedés a kezelőfelülettel, komponensekkel. Készítsen formot komponensekkel – változtassa azok tulajdonságait – form neve, fejléce, mérete, a rajta lévő objektumok tulajdonságai (ObjectInspector>Properties). Vizsgálja meg az ObjectTreeView segítségével az osztályhierarchiát az adott alkalmazáson. Mentse el az alkalmazást – porjektként – vizsgálja az elmentett állományokat.
Feladatok Az elkészítet alkalmazás objektumainak eseményeit vizsgálja. Nézze át a 1delphi_tesztsor mappában található példaprogramot (az ott használt komponenseket, eseményeket, függvényeket, stb.) Készítsen alkalmazást, mely nyomógomb segítségével valamilyen eseményt vált ki (pl. egy szöveg, gombfelirat, panelszín megváltozik az onclick esemény hatására). Vizsgálja meg a MessageDlg függvényt a Delphi helpben, alkalmazza egy saját példán.