Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

A Delphi programozási nyelv

Hasonló előadás


Az előadások a következő témára: "A Delphi programozási nyelv"— Előadás másolata:

1 A Delphi programozási nyelv
Kovács Péter 2011. április 14.

2 A Delphiről általában Adatbázis alkalmazások készítése
Vezérelv: Legyen látható (és elkészíthető) tervezési időben, ami csak lehet! Vizuális tervezés és kódgenerálás szervesen összekapcsolódik Komponens: egy osztály, amely valamely látható vagy nem látható erőforrás interfészét valósítja meg

3 Rapid Application Development
Teljes integritás Automatikus kódgenerálás és kódszinkronizáció Integrált debugger Gyors és intelligens fordító Újrahasznosíthatóság

4 Egyebek Ami kimaradt: ActiveX komponensek Broker Technologies
makrórögzítő a gyakran használt tevékenységek automatizálására ActiveX komponensek kliensoldali fejlesztés Broker Technologies szerveroldali fejlesztés

5 Adatbázis-kezelés Borland Database Engine – Adatbázis Motor
Database Wizard – Egyszerű karbantartó program készítése Database Desktop – Adatbázis böngésző Database Explorer QuickReport – Report készítő

6 Nyomkövetés Beépített debugger lehetőségei: Hibák típusai:
A program végrehajtásának ellenőrzése A változók értékének figyelése Az adatok értékének változtatása nyomkövetés közben Hibák típusai: Fordítási idejű hibák Logikai hibák Futási idejű hibák

7 Fordítók Borland cég CodeGear részlege
Embarcadero ( Lazarus: Delphi-szerű fejlesztő környezet (

8 Szabványos könyvtárak
Régebben: RTL (futási idejű könyvtár) VCL (vizuális komponenskönyvtár) CLX (platformfüggetlen komponenskönyvtár) Újabb verziók: egységesen VCL

9 Könyvtári egységek System SysUtils Types Windows Messages Classes

10 Párhuzamosság TThread absztrakt osztály Execute() virtuális metódus
Create konstruktor CreateSuspended Boolean típusú paraméterrel type TMyThread = class(TThread) protected procedure Execute; override; end;

11 Párhuzamosság Egyprocesszoros gépen ne használjunk 16 szálnál többet
Priority attribútum: tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical Suspend, Resume, WaitFor thread := TMyThread.Create(false); thread.WaitFor; // bevárjuk thread.Free; // felszabadítjuk

12 Párhuzamosság Terminated logikai tag Synchronize metódus
Lock – Unlock metóduspár, pl. TCanvas TCriticalSection osztály

13 Kritikus szakaszok var CriticalSection: TCriticalSection; begin CriticalSection := TCriticalSection.Create; … CriticalSection.Enter; … CriticalSection.Leave; … CriticalSection.Free; end;

14 Mutexek var MyMutex: TMutex; begin MyMutex := TMutex.Create(nil, false, ''); … MyMutex.Acquire; … MyMutex.Release; … MyMutex.Free; end;

15 Szemafor var MySemaphore: TSemaphore; begin MySemaphore := TSemaphore.Create(nil, 5, 5, ''); … MySemaphore.Acquire; … MySemaphore.Release; … MySemaphore.Free; end;

16 Komponensek dinamikus létrehozása
GUI építő eszközzel „felhúzunk” a formra egy komponenst -> a form konstruktorába bekerül egy hívás a komponens konstruktorára, és utasítások, melyek beállítják a propertyket name property: a komponensre mutató globális változó neve Dinamikus komponensek: name property helyett tároló konténereken keresztül érjük el

17 Komponensek megkülönböztetése
Különböző típusú komponensek tárolása megengedett, csak közös ős kell Ha tömbben tároljuk a komponenseket, a megkülönböztetésükre használhatjuk a Tag propertyt Az igazi megoldás a származtatás: az azonosításra szolgáló adattagot bővíthetjük többdimenziós tömbre

18 Komponensek megkülönböztetése
type TMyImage = class(TImage) posX: Integer; posY: Integer; end; var … kep: array[1..8,1..5] of TMyImage; kep[i].Tag := i; kep[i][j].posX := i; kep[i][j].posY := j;

19 Komponensek dinamikus megszüntetése
kep[i].Free; … kep[i] := TImage.Create(self); Csak akkor törlődik a komponens, ha más referencia nem mutat rá!

20 Végtelen engedélyezett hosszúságú lista bevitele
Komplex adatszerkezetből szeretnénk egy listányit bevinni Ne legyenek felesleges, üres mező-együttesek Két megoldás: Gomb hatására új mező-együttes jelenik meg Mezők kitöltöttségének függvényében mezők megszüntetése és létrehozása

21 Végtelen engedélyezett hosszúságú lista bevitele

22 Végtelen engedélyezett hosszúságú lista bevitele
type TFormPanel = class(TPanel) edit: TEdit; box: TCheckBox; combo: TComboBox; id: Integer; procedure Create(…); end;

23 Végtelen engedélyezett hosszúságú lista bevitele
procedure TForm1.Button1Click(Sender: TObject); var a: TFormPanel; begin a := TFormPanel.Create(self); list.Add(a); end;

24 Végtelen engedélyezett hosszúságú lista bevitele

25 Végtelen engedélyezett hosszúságú lista bevitele
procedure TForm1.FirstEditChange(Sender: TObject); begin if (sender as TEdit).Text <> '' then begin … end; // add new row end; procedure TForm1.SecondEditChange(Sender: TObject); begin if (sender as TEdit).Text = '' then begin … end; // delete last row end;

26 Grafikai alapok Eszközkörnyezet: a vászon, amire rajzolunk
Az API szintjén bonyolult lenne használni TCanvas osztály Canvas.Brush.Color := clRed; Canvas.Pen.Color := clBlue; Canvas.Ellipse(20, 20, 120, 120); Felszabadítja a nem használt erőforrásokat

27 TCanvas tulajdonságok
Brush ecsetszín vagy minta ClipRect a canvas jelenlegi vágó téglalapja CopyMode meghatározza a rajzolás módját Font a canvas ezzel a betűvel rajzol Handle a canvas leíró tulajdonság (Windows API direkt hívásához) Pen meghatározza a vonalak stílusát PenPos a rajzolás pozíciója (x,y koordináta) Pixels egy tömb a canvas pixeleiből

28 TCanvas eljárások Arc a jelenlegi tollal ívet rajzolhatunk BrushCopy
képet jelenít meg áttetsző háttérrel CopyRect képszeletet másol megadott helyre Draw a memóriából másol egy képet Ellipse ellipszis FloodFill kitölt egy területet az ecsettel

29 TCanvas eljárások LineTo vonalat húz megadott koordinátába MoveTo
beállítja a jelenlegi rajzpozíciót Pie körszeletet rajzol Polygon kitöltött sokszög rajzolása Polyline vonal rajzolása koordinátatömbből Rectangle kitöltött téglalap

30 TCanvas eljárások RoundRect lekerekített sarkú téglalap StretchDraw
kép másolása a memóriából TextExtent paraméterként megadott szöveg mérete pixelben TextWidth TextHeight paraméterként megadott szöveg szélessége, magassága pixelben TextOut szöveget rajzol megadott helyre TextRect szöveget rajzol téglalapon belülre

31 GDI objektumok Graphics Device Interface Objektumok: Toll Ecset Betű
Paletta Bitkép Terület (region)

32 Tollak Color a vonal színe Handle
a toll leíró tulajdonsága (GDI közvetlen meghívásához) Mode meghatározza a vonalrajzolás módját Style a toll stílusa Width a toll szélessége pixelben

33 Ecsetek Bitmap kép beállítása az ecset háttereként Color
az ecset színe Handle az ecset leírója (közvetlen GDI híváshoz) Stlye az ecset stílusa

34 Képek megjelenítése var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile('hatter.jpg'); Canvas.Draw(0, 0, Bitmap); Bitmap.Free; end; Kép méretének megváltoztatása: StretchDraw Kép részekre bontott megjelenítése: CopyRect

35 Standard dialógusok Előnyei: Hátrányai:
A felhasználónak minden alkalmazásnál ugyanaz az ablak jelenik meg A programozónak is egyszerűbb ezeket használnia Hátrányai: Egy bizonyos határon túl nem lehet őket megváltoztatni Ha magyar nyelvű programot angol Windows alatt futtatunk, akkor keveredik a két nyelv

36 OpenDialog, SaveDialog
Fájlok kiválasztására szolgálnak megnyitáshoz, illetve mentéshez Események: OnShow OnClose OnCanClose OnFolderChange OnSelectionChange OnTypeChange Metódusok: Execute

37 További dialógusablakok
OpenPictureDialog, SavePictureDialog A dialógusablak része a kép előnézetét mutató felület is (csak .bmp, .ico, .wmf vagy .emf kiterjesztésű képeknél látható) FontDialog Események: OnApply Metódusok: Execute

38 PrinterSetupDialog, PrintDialog
A nyomtató beállításait megjelenítő dialógusablakot nyit meg Execute metódus PrintDialog Tulajdonságok: Másolatok száma (Copies) Leválogatás módja (Collage) Kinyomtatandó oldalak száma (MinPage, MaxPage)

39 FindDialog, ReplaceDialog
Kizárólag adatok bevitelére szolgálnak Események: OnFind OnReplace Metódusok: Execute CloseDialog

40 DDE technológia Dynamic Data Exchange Ma már kicsit elavult
DDE szerver: információt nyújt más alkalmazásoknak A DDE kliens felelős a kapcsolat kialakításáért Téma: a kommunikáció pontosabb definiálása Elem: az átadott adatok legpontosabb identifikációja

41 DDE technológia DdeServerConv: a szerver témája
DdeServerItem: a szerver témájának egy eleme DdeClientItem: a kliens témájának egy eleme DdeClientConv: a kliens témája SetLink: megpróbál kapcsolatot kialakítani CloseLink: befejezi az aktuális konverzációt ExecuteMacro: parancsot küld a szervernek

42 OLE technológia Object Linking and Embedding
Szerkeszthetünk bitmapeket anélkül, hogy külön le kellene programoznunk OLE 1.0 1990 DDE koncepcióján alapul képes több aktív kapcsolatot fenntartani két dokumentum között OLE 2.0 Új funkciók: drag-and-drop technika, helyben történő aktiválás, OLE strukturált tárolás

43 OLE technológia OLE szerver: saját gépen futó alkalmazás, mely más alkalmazások részére felkínálja szolgáltatásait Lehetőséget ad más alkalmazásban definiált objektum megjelenítésére a saját programunkban Beszúrás (Embedding): az objektum fizikailag is az alkalmazásba kerül Csatolás (Linking): az alkalmazásba nem lesz fizikailag beszúrva az objektum, csak egy hivatkozás rá

44 A Delphi és az OLE Az OleContainer komponens jelképezi az OLE szervereket a Delphiben létrehozott alkalmazásokban Metódusok: InsertObjectDialog CreateObject CreateObjectFromFile CreateObjectFromInfo CreateLinkToFile

45 OLE objektum beolvasása
procedure TForm1.CreateObjectClick(Sender: TObject); begin OleContainer1.CreateObjectFromFile (ExpandFileName('teszt.doc'), false); end; procedure TForm1.LoadFromFileClick(Sender: TObject); begin OleContainer1.LoadFromFile('teszt.doc'); end;

46 OLE objektum mentése procedure TForm1.SaveToFileClick(Sender: TObject); begin OleContainer1.SaveToFile('teszt.doc'); end; procedure TForm1.SaveAsDocumentClick(Sender: TObject); begin OleContainer1.SaveAsDocument('teszt.doc'); end;

47 Menük összekapcsolása
Ha elhelyezünk egy MainMenu komponenst a formon, akkor az objektum szerkesztésekor ebben megjelennek az OLE szerverhez tartozó menüpontok De mi van akkor, ha az alkalmazásunkban is szeretnénk saját menüt kialakítani? GroupIndex tulajdonság 0, 2, 4… GroupIndex esetén az alkalmazás főmenüjének menüpontjai mindig láthatók lesznek 1, 3, 5… GroupIndex esetén az OLE szerver menüjével felül lesznek írva

48 DLL-ek A Windowsban kétféle futtatható állomány létezik:
Programok (EXE fájlok) Dinamikus csatolású könyvtárak (Dynamic Link Libraries, DLL fájlok) A DLL fájlok közvetlenül nem futtathatók, mégis tartalmaznak programkódot, és tartalmazhatnak erőforrásokat is DLL-ek előnyei: Több program használhatja ugyanazt a DLL-t Ekkor a DLL csak egyszer töltődik be a memóriába A Delphiben készített DLL-eket más programozási nyelven készült alkalmazásokban is felhasználhatjuk

49 DLL készítése library dll_pelda uses SysUtils, Classes, Math; function lnko(a,b: integer): integer; stdcall; var i: integer; begin i := min(a,b); while (a mod i > 0) or (b mod i > 0) do dec(i); result := i; end; exports lnko; begin beep(); end.

50 Statikus importálás Akkor töltjük be a DLL-t a memóriába, amikor az azt használó program első példánya elindul Minden további alkalmazás a már betöltött könyvtár alprogramjait használja Az alprogram neve alapján: function lnko(a,b: integer):integer; stdcall; external 'dll_pelda.dll'; Átnevezéssel: function LegnagyobbKozosOszto(a,b: integer):integer; stdcall; external 'dll_pelda.dll' name 'lnko';

51 Dinamikus importálás Az alkalmazás futása során betöltjük a DLL-t a memóriába LoadLibrary() Ha már nincs rá szükség, felszabadítjuk FreeLibrary() A hivatkozáshoz szükségünk van a DLL-függvény vagy eljárás belépési pontjának címére GetProcAddress()

52 MDI alkalmazások Multiple Document Interface Főform: szülő ablak
Azon belül megjelenő formok: gyermek ablakok Például: Szövegszerkesztők Fejlesztő programok Internetes böngészők

53 MDI alkalmazások

54 MDI működése a Windowsban
Delphi MDI sablonban több funkció van, ami eleve működik MDI alkalmazások felépítése a Windowsban: Az alkalmazás fő ablaka: keret vagy tároló MDI ügyfél: az MDI keretablak teljes területét befedi (a keret gyermeke) Gyermekablakok: nem közvetlenül a keretablakba helyeződnek, hanem az MDI ügyfél gyermekei

55 Keret- és gyermekablakok
procedure TMainForm.NewElement1Click(Sender: TObject); var ChildForm: TChildForm; begin WindowMenu := Window1; Inc(counter); ChildForm := TChildForm.Create(Self); ChildForm.Caption := ChildForm.Caption ' ' + IntToStr(counter); ChildForm.Show; end;

56 Keret- és gyermekablakok
Megnyitás, kis méret, teljes méret: OK Bezárás helyett lekicsinyíti az ablakokat Ahhoz, hogy valóban eltűnjön egy ablak, az OnClose esemény Action paraméterét caFree-re kell állítani: procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;

57 Ablak menü felépítése A Delphinek van előre elkészített MDI sablonja
Windows menü elemei: Cascade (lépcsőzetes elrendezés) Tile (mozaikszerű elrendezés) Arrange Icons (ikonok elrendezése) Jobb megoldás: Helyezzünk a formra egy ActionList komponenst, és rendeljük hozzá az előre meghatározott, kész MDI műveleteket Majd hozzuk létre a Windows menüben a megfelelő almenüket, és állítsuk be az action tulajdonságukat

58 Különböző gyermekablakok
procedure TChildOther.AddCircle1Click(Sender: TObject); var x,y: integer; begin randomize; x := random(300); y := random(300); Canvas.Ellipse(x-20, y-20, x+20, y+20); end; procedure TChildOther.Clear1Click(Sender: TObject); begin Refresh; end;

59 Különböző gyermekablakok
Állítsuk be az előbb definiált formot gyermekformnak Mivel MDI alkalmazásnál egy gyermekablaknak nem lehet saját menüje, ezért ez zavart okoz Megoldás: állítsuk be a menükhöz tartozó GroupIndexet File menü a MainFormon: 1 Circle menü a ChildOther formon: 2 Window menü a MainFormon: 3

60 Különböző gyermekablakok
Ha egy TChildOther típusú gyermekablak aktív, akkor megjelenik a hozzá tartozó menü:

61 Különböző gyermekablakok
Ha másik típusú ablakra váltunk, akkor a menü eltűnik:

62 Vége Köszönöm a figyelmet!


Letölteni ppt "A Delphi programozási nyelv"

Hasonló előadás


Google Hirdetések