Prof.nadzw.dr hab.inż. Władysław Brzozowski Cz*stochowa-Gliwice, 15.02.1999 r.
Politechnika Częstochowska
Instytut Elektroenergetyki
Wykłady z przedmiotu:
TECHNIKA PROGRAMOWANIA
studia magisterskie, kierunek Elektrotechnika,
specjalno** Informatyka w Elektroenergetyce, sem.VI
Wyk*ad 8. System Borland Delphi.
8.1. Og*lna charakterystyka systemu Borland Delphi
System Borland Delphi wywodzi si* g**wnie z Borland Pascal with Objects 7.0., jednak korzysta te* z pewnych rozwi*za* systemu Visual Basic.
Borland Delphi jest systemem typu RAD (Rapid Application Development), to znaczy mo*liwia b*yskawiczne tworzenie program*w u*ytkowych (aplikacji) o standardowym, profesjonalnym interfejsie. Aplikacje te s* przeznaczone do pracy w *rodowisku Windows. Podobnie i Borland Delphi dzia*a w tym *rodowisku; to znaczy obie platformy programowania (por. wyk*ad 3): IDE Platform oraz Target Platform s* typu Windows Environment. Borland Delphi od wersji 3.0 wsp**pracuje wy**cznie z Windows'95 oraz Windows NT, a w wersji 4.0 dodatkowo z Windows'98.
Borland Delphi wyr*cza programist* od *mudnych prac programowych nad tworzeniem r**nych podprogram*w narz*dziowych, w taki spos*b, *e tworzy kod *r*d*owy b*d*cy szkieletem programu i poszczeg*lnych jego modu**w, a tak*e podprogram*w tworz*cych r**ne struktury formalne (tzw. komponenty). Nie jest on jednak w stanie wygenerowa* kodu realizuj*cego stron* merytoryczn* programu. Z tego wzgl*du nadal programista musi opanowa* dobrze technik* programowania, szczeg*lnie obiektowego, najlepiej na bazie Borland Pascal w wersji co najmniej 7.0, a lepiej Object Windows.
Trzeba jednak zauwa*y*, *e j*zyk Borland Delphi jest prostszy (w zakresie struktury predefiniowanych obiekt*w) od Borland Pascal with Objects 7.0. - Object Windows, oferuj*c znacznie bogatsz* ofert* r**nych standardowych element*w (komponent*w). J*zykiem Borland Delphi jest Object Pascal. Jest on niemal identyczny jak Borland Pascal, jednak nazwy niekt*rych podprogram*w i funkcji standardowych mog* si* w nim nieco r**ni*, a tak*e mog* wyst*pi* nowe elementy tego j*zyka.
8.2. Modele aplikacji w systemie Borland Delphi
Z pomoc* Borland Delphi realizujemy programowanie zorientowane na obiekty (Object Oriented Programming) oraz r*wnocze*nie programowanie zorientowane na dokumenty (Document Oriented Programming). To drugie okre*lenie oznacza, *e u*ytkownik, realizuj*c aplikacj* b*dzie dzia*a* wy**cznie w obr*bie dokumentu. Dokument taki mo*e sk*ada* si* z jednego b*d* z wielu formularzy.
W systemie Windows (a tak*e odpowiednio w Borland Delphi) istniej* dwa podstawowe modele aplikacji: SDI (Single Document Interface) oraz MDI (Multiple Document Interface). Domy*lnym, a zarazem zalecanym modelem jest SDI. Bazuje on na pojedynczym dokumencie (jednak dokument taki, jak wspomniano, mo*e sk*ada* si* z wielu okien ekranowych - tzw. formularzy).
Model MDI bazuje na wielu dokumentach. Przyk*adem aplikacji w tym modelu jest edytor Word. W edytorze Word mo*na r*wnocze*nie otworzy* wiele dokument*w, jednak w danym momencie czasu praca odbywa si* tylko na jednym z nich. Dokumenty te s* od siebie ca*kowicie niezale*ne, cho*, korzystaj*c ze schowka (Clipboard), mo*na przenosi* pomi*dzy dokumentami pewne elementy - bloki tekstu, rysunki itp.
8.3. Elementy aplikacji SDI w systemie Borland Delphi
Aplikacja SDI w systemie Borland Delphi jest pakietem mikrokomputerowym, na kt*ry sk*adaj* si* nast*puj*ce g**wne pliki *r*d*owe:
Plik g**wny projektu (aplikacji) z rozszerzeniem .DPR. Jest to odpowiednik pliku *r*d*owego modu*u programowego w systemie Borland Pascal.
Pliki modu**w z rozszerzeniem .PAS. S* to odpowiedniki plik*w *r*d*owych modu**w programisty w systemie Borland Pascal. Zwykle jeden modu* zawiera kod generuj*cy jeden wyr**niony formularz (okno) aplikacji. Mog* by* jednak te* i modu*u nie zwi*zane z formularzem, np. modu*y danych.
Opr*cz powy*szych g**wnych plik*w *r*d*owych na pakiet sk*adaj* si* jeszcze pliki pomocnicze z rozszerzeniami .DFM, .DFO, .RES, .~DP, .~DF, .~PA, .HLP, .WMF, .BMP, .ICO.
Po kompilacji dochodzi jeszcze plik wykonawczy z rozszerzeniem .EXE oraz plik modu**w z rozszerzeniem .DCU.
Borland Delphi zapewnia automatycznie struktur* modu*ow* aplikacja i jej dzia*anie w trybie nak*adkowym.
Skompilowana aplikacja mo*e by* wykonana spod Borland Delphi (tj. opcj* RUN z menu systemu) lub spod Windows. W obu wypadkach uwidacznia si* ona jako pojedyncze lub wiele okien - formularzy. Okna te mo*na programowo w dowolnym momencie wizualizowa* lub ukrywa*. Wizualizowane okna mog* si* wzajemnie przys*ania*, jednak u*ytkownik mo*e nimi operowa* tak, jak wszystkimi innymi oknami w *rodowisku Windows (przesuwa*, powi*ksza* itd.).
W oknach formularzy uwidaczniaj* si* poszczeg*lne komponenty (przyciski, pola edycyjne itd.). Realizacja programu przez u*ytkownika polega wy**cznie na operowaniu w obr*bie tych komponent*w.
Przyk*adem aplikacji napisanej w systemie Borland Delphi jest program FILEATTR.EXE wizualizacji i zmiany atrybut*w plik*w dyskowych (Read Only, Hidden oraz Archive) z [5]. Program zosta* spolszczony oraz wzbogacony o komentarze przez autora wyk*adu.
Aplikacja sk*ada si* z jednego formularza (rys. 9.1, str. 228 z [5]) w kt*rym zawarto komponenty nast*puj*cego typu:
zag**biony prostok*t (Bevel);
skrzynk* dla grupy innych komponent*w (Group Box);
przycisk z rysunkiem (BitBtn);
pole wyboru (Check Box);
etykieta (Label);
pole edycji (Edit);
lista katalog*w wskazanego nap*du (Directory List Box);
lista plik*w wskazanego katalogu (File List Box);
wyb*r nap*du (Drive Combo Box).
Tekst pliku *r*d*owego g**wnego aplikacji FILEATTR.DPR
program Fileattr;
uses
Forms,
Attrscr in 'ATTRSCR.PAS' {Form1};
{$R *.RES}
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Tekst pliku *r*d*owego modu*u ATTRSCR.PAS
unit Attrscr;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, FileCtrl, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Bevel1: TBevel;
BitBtnOk: TBitBtn;
GroupBox1: TGroupBox;
BitBtnSave: TBitBtn;
BitBtnClose: TBitBtn;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
Label1: TLabel;
Edit1: TEdit;
DirectoryListBox1: TDirectoryListBox;
FileListBox1: TFileListBox;
DriveComboBox1: TDriveComboBox;
procedure BitBtnOkClick(Sender: TObject);
procedure BitBtnCloseClick(Sender: TObject);
procedure BitBtnSaveClick(Sender: TObject);
procedure FileListBox1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
Fname: String;
AttrByte: Byte {Integer};
procedure TForm1.BitBtnOkClick(Sender: TObject);
begin
Fname := Edit1.Text;
AttrByte := FileGetAttr(fname);
{pod zmienna AttrByte zostaje podstawiony byte tj.
ciag 8 bitow reprezentujacych atrybuty pliku
o fizycznej nazwie podstawionej do zmiennej Fname,
ktory jest wpisany w polu okienka edycyjnego.
W tym bajcie:
bit 0 - bit Read Only
bit 1 - bit Hidden
bit 2 - bit System
bit 3 - bit Volume ID
bit 4 - bit podkatalogu
bit 5 - bit Archive
bit 6 - nie uzywany
bit 7 - nie uzywany}
if AttrByte and faReadOnly = faReadOnly then
CheckBox1.Checked := True
else
CheckBox1.Checked := False;
{powyzsza instrukcja sprawdza czy w bajcie
AttrByte byl aktywny atrybut ReadOnly. Jesli
tak to nastepuje zaznaczenie odpowiedniego
pola wyboru (CheckBox). Metoda sprawdzenia
jest obliczenie iloczynu logicznego AND.
Tworzy sie iloczyn logiczny z wartosci
AttrByte (jesli atrybut ReadOnly byl wlaczony
to w tym bajcie na okreslonym miejscu jest
bit 1) i faReadOnly (jest to predefiniowana
stala rowna 1 byte, w ktorej na miejscu
zerowym jest bit 1, a wszystkie inne sa 0).
Jesli w AttrByte byl aktywny atrybut ReadOnly,
to iloczyn logiczny bedzie mial na miejscu
zerowym bit 1, a na pozostalych miejscach bity
0 (niezaleznie od stanu innych atrybutow) -
tj. bedzie identyczny jak faReadOnly. Ponizej
instrukcje analogiczne dla innych atrybutow.}
if AttrByte and faHidden = faHidden then
CheckBox2.Checked := True
else
CheckBox2.Checked := False;
if AttrByte and faSysFile = faSysFile then
CheckBox3.Checked := True
else
CheckBox3.Checked := False;
if AttrByte and faArchive = faArchive then
CheckBox4.Checked := True
else
CheckBox4.Checked := False;
end;
procedure TForm1.BitBtnCloseClick(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.BitBtnSaveClick(Sender: TObject);
begin
AttrByte := 0;
if CheckBox1.Checked = True then
AttrByte := AttrByte or faReadOnly;
{jesli pole wyboru dla atrybutu ReadOnly bylo
wcisniete, to obliczana jest nowa wartosc
AttrByte jako suma logiczna poprzedniej
wartosci AttrByte i faReadOnly. Wowczas w
nowej wartosci AttrByte pojawi sie bit 1 na
miejscu zerowym. Na wstepie AttrByte jest
zerowany, dlatego zostanie zapisany dokladnie
nowy stan przyciskow - jesli pole wyboru
nie bylo przycisniete to pozostanie 0.}
if CheckBox2.Checked = True then
AttrByte := AttrByte or faHidden;
if CheckBox3.Checked = True then
AttrByte := AttrByte or faSysFile;
if CheckBox4.Checked = True then
AttrByte := AttrByte or faArchive;
FileSetAttr(fname, AttrByte);
end;
procedure TForm1.FileListBox1DblClick(Sender: TObject);
begin
BitBtnOKClick(Self);
end;
end.
8.4. Elementy IDE (zintegrowanego *rodowiska programisty - Integrated Development Environment) w systemie Borland Delphi
Elementami IDE w systemie Borland Delphi (na przyk*adzie wersji 3.0) s*:
G**wne okno IDE z rozwijalnym menu systemu.
Mened*er projekt*w (Project Manager).
Inspektor obiekt*w (Object Inspector).
Edytor kodu.
Edytor graficzny.
Debugger.
Biblioteka komponent*w (VCL - Visual Component Library).
Generator baz danych.
Generator raport*w i wykres*w.
Generator help'u aplikacji.
Generator komponent*w VCL oraz ActiveX programisty.
Generator programu instalacyjnego aplikacji.
8.5. Komponenty systemu Borland Delphi (VCL)
8.5.1. Typy komponent*w
Ka*dy komponent systemu (przycisk, menu, pole edycji, pole wyboru itd.) jest opisywany zbiorem:
w*a*ciwo*ci (property);
zdarze* (event).
W*a*ciwo*ci komponentu i zdarzenia zwi*zane z komponentem s* wizualizowane w oknie Inspektora obiekt*w (Object Inspector). Mo*na je korygowa* w tym oknie lub zmienia* programowo (por.dalej).
Standardowe (programista mo*e te* wygenerowa* w*asne komponenty) komponenty systemu s* pogrupowane w poszczeg*lne karty (Standard, Additional, Win32, System, Internet, Data Access, Data Controls, Qreport, Dialogs, Win 3.1, Samples).
Oprogramowanie komponentu polega na:
wskazaniu, w g**wnym oknie IDE, karty zawieraj*cej wybrany komponent (mysz*);
wskazaniu komponentu na karcie (mysz*);
umieszczeniu komponentu w formularzu w wybranym miejscu (mysz*);
korekcie po*o*enia i/lub wymiar*w komponentu (mysz* lub przez zmian* w*a*ciwo*ci w oknie Inspektora obiekt*w);
zasymulowanie zdarzenia (takim zdarzeniem jest np. przyci*ni*cie przycisku) zwi*zanego z komponentem (przez klikni*cie mysz* w obr*bie komponentu) lub wybranie odpowiedniego zdarzenia w oknie Inspektora obiekt*w (przez klikni*cie mysz* w obr*bie zdarzenia w tym oknie), celem wygenerowania szkieletu kodu metody (tj. podprogramu lub funkcji) kt*ra b*dzie wykonywana po zaistnieniu zdarzenia;
edycja kodu w potrzebnym zakresie (dopisanie odpowiednich instrukcji).
Najcz**ciej stosowane komponenty umieszczone s* na kartach: Standard oraz Additional.
Na karcie Standard s* umieszczone nast*puj*ce komponenty:
MainMenu (g**wne menu aplikacji - rozwijalne);
PopupMenu (menu kontekstowe - nierozwijalne, normalnie niewidoczne - wizualizowane prawym klawiszem myszy);
Label (etykieta - napis, nag**wek pola);
Edit (pole edycyjne dla edycji jednego wiersza tekstu);
Memo (pole memo - pole edycyjne dla edycji wielu wierszy tekstu);
Button (przycisk);
CheckBox (pole wyboru o 2 stanach: w**czone, wy**czone. Kilka takich p*l mo*e s*u*y* do wyboru opcji nie wy**czaj*cych si* wzajemnie);
RadioButton (pole opcji s*u**ce do wyboru jednej z kilku wzajemnie wy**czaj*cych si* opcji);
ListBox (lista element*w, kt*re u*ytkownik mo*e zaznacza* lub wybiera*);
ComboBox (jak komponent ListBox, lecz z mo*liwo*ci* dopisywania element*w przez u*ytkownika);
ScrollBar (pasek przewijania);
GroupBox (komponent stanowi*cy grup* innych komponent*w, najcz**ciej typu RadioButton lub CheckBox);
RadioGroup (grupa komponent*w typu RadioButton);
Panel (komponent stanowi*cy grup* innych komponent*w, najcz**ciej typu pasek narz*dzi lub linia statusu).
Na karcie Additional s* umieszczone nast*puj*ce komponenty:
BitBtn (przycisk na kt*rym jest umieszczony napis i/lub rysunek);
SpeedButton (przycisk umieszczany w pasku narz*dzi, o 4 wyr**nionych stanach oraz z rysunkiem zmieniaj*cym si* w poszczeg*lnych stanach);
MaskEdit (maskowane pole edycji, umo*liwiaj*ce filtracj* i formatowanie danych wprowadzonych przez u*ytkownika);
StringGrid (arkusz, kt*rego elementami s* stringi);
DrawGrid (arkusz do wy*wietlania danych nie tekstowych);
Image (komponent wy*wietlaj*cy element graficzny - map* bitow*, ikon* lub metaplik);
Shape (figura geometryczna: prostok*t, ko*o, elipsa);
Bevel (zag**biony lub wybrzuszony prostok*t);
ScrollBox (przewijalne okienko);
CheckListBox (komponent b*d*cy po**czeniem listy i pola wyboru);
Splitter (komponent s*u**cy do podzia*u okna);
StaticText (komponent jak Label, lecz zaopatrzony w ramk*);
Chart (komponent do tworzenia wykres*w).
Koniec wyk*adu 8
Plik W8TEPR99.DOC
Edytor WORD 6.0 PL