|
|
səhifə | 17/18 | tarix | 12.09.2018 | ölçüsü | 1,36 Mb. | | #81721 |
| trei parametri distincti.
Cu cat utilizati mai putine mesaje si mai putine functii de raspuns,cu
atat aplicatia se va executa mai simplu si mai rapid.Cu cat creste numarul
de obiecte,si respectiv numarul de mesaje procesate,cu atat procesorul nu
va mai putea face fata si va trebui ca mesajele sa fie arhivate in stiva
de asteptare,de unde vor fi prelucrate succesiv.
In cazul procesoarelor cu linii paralele de procesare,sau a procesoare-
lor paralele,se pot prelucra simultan mai multe mesaje,sau se poate dedica
un procesor specializat pentru fiecare obiect din aplicatie.Acest gen de
operatii se desfasoara in servere,sau in centralele mari de distributie,
pentru a permite accesul simultan la o anumita arhiva de date (Exemplu:
router-ele pentru reteaua Internet).
Pentru fiecare aplicatie,planificati cu atentie fiecare operatie si
fiecare mesaj exploatat,astfel incat sa evitati operatiile inutile.Pe cat
posibil,evitati "obiectele decorative","artificiile" si "mesajele de aver-
tizare de tip reclama,etc.Cu cat un program este mai economic si mai efi-
cient,cu atat se va bucura de mai multi utilizatori.Evitati sa editati
functii de raspuns care nu vor fi utilizate in program ("de rezerva").
-110-
VDBT (Visual Database Tools)
Versiunile mai recente ale Borland C++ includ si biblioteca Vdbt,care
include file destinate pentru utilizarea datelor organizate tabelar sub
forma de baza de date.Pentru acest scop,au fost realizate o serie de
componente software,organizate sub forma de obiecte vizuale.Constructia
acestor obiecte se bazeaza pe arhitectura de tip COM (Component Object
Model) care sta la baza arhitecturii de tip OLE (Object Link Embadded).
Ca rezultat,aceste componente pot fi utilizate pe platforme diferite.
Pentru vizualizarea acestor obiecte,cea mai clara implementare este cea
realizata de platforma Delphi,unde componentele sunt afisate vizual si
pot fi incluse in aplicatie cu ajutorul indicatorului mouse.In Borland C++
aceste obiecte sunt definite in filele cuprinse in biblioteca Vdbt si
trebuiesc introduse explicit in program.Mai mult,obiectele de acest tip
nu au constructorul si destructorul clar definit,astfel incat nu pot fi
incluse in program decat cu ajutorul unor structuri denumite SourcePool.
Source Pools sunt structuri de date in care unul sau mai multe noduri
din program sunt excluse de la etapa de "constructie".Astfel nu se va
apela constructorul pentru obiectele declarate in aceste structuri,iar
componentele de tip Visual Database Tools nu vor mai returna un mesaj de
eroare.Structurile de tip SourcePoola au si alte aplicatii practice.Se
pot utiliza pentru a partaja o fila de resurse intre mai multe aplicatii,
sau pentru a realiza mai multe versiuni ale aceleiasi aplicatii ( de
exemplu o versiune in format de 16 biti si o versune in format de 32 de
biti).SourcePools se pot utiliza si pentru a partaja aceleasi file de
antet (headers) sau pentru a utiliza in comun aceleasi optiuni de setare a
proiectului (daca proiectul contine mai multe executabile distincte).
Pentru a introduce in proiect o astfel de structura,alegeti din meniul
Project optiunea New Target iar in caseta Type alegeti SourcePool.In
caseta Name introduceti numele dorit,apoi confirmati cu OK.In proiectul
deschis se va realiza un nou nod de genul "Numele [SourcePool]".
Exemplu: ( vezi si OWL_ABC / vdbt1 )
Deschideti un director nou cu numele vdbt1.Salvati in acest director o
fila .cpp oarecare (de la un program anterior).Apoi din meniul New alegeti
Project si deschideti un nou proiect pe o platforma de 32 de biti (in
caseta Platform alegeti Win32).Eliminati din proiect filele .rc si .def,
apoi compilati si construiti proiectul.Executati proiectul.
Pana in acest moment,este un proiect asemanator cu toate celelalte.In
continuare,alegeti din meniul Project optiunea New target si introduceti
Name = Sursa1 si Type = SourcePool.Confirmati cu OK.In continuare,pentru
a adauga file la nodul creat apasati tasta Insert,sau executati un click
de mouse drept si alegeti Add node.Adaugati fila de tip .cpp din proiect.
Repetati operatiile de mai sus si realizati inca un nod de tip Source-
Pool denumit sss1,la care adaugati un anumit numar de file.
Pentru a realiza si o varianta pe 16 biti a proiectului,puteti sa
alegeti din nou din File,New si Project,apoi selectati pentru platforma
optiunea Windows 3.x(16) si acelasi nume cu proiectul realizat pe 32 de
biti,apoi confirmati cu OK (sau utilizati un nume diferit). Adaugati si
la acest nod fila de tip .cpp.In acest moment,proiectul d-voastra va
contine doua noduri executabile de tip .exe si doua noduri de tip
SourcePool,care contin cate o versiune a filei .cpp.
-111-
Pentru a observa avantajele nodului SourcePool deschideti una dintre
filele .cpp si efectuati o serie de modificari (actualizari).Inchideti
fila si puteti constata ca toate filele .cpp au fost actualizate.Din
acest motiv,nodurile de tip SourcePool se prefera atunci cand mai multe
aplicatii partajeaza aceeasi fila de resurse sau de cod.Daca proiectul
contine executabile diferite,actualizarea va interesa doar versiunile de
proiect care au acelasi nume.Acest gen de implementare se utilizeaza
mai ales in etapa de programare a unei aplicatii,cand se utilizeza
simultan una sau mai multe variante ale proiectului,sau etape de proiect
aflate in diferite stadii de dezvoltare.
Dupa construirea unui nod de tip SourcePool,acesta poate fi inclus in
proiect la orice nivel,cu o operatie simpla de tip Drag and Drop.Tineti
apasata tasta Alt,alegeti nodul de tip SourcePool dorit si apoi trageti
cu butonul mouse apasat pana la nivelul de program in care doriti sa
includeti nodul respectiv (vezi OWL+ABC /vdbt2 ).De exemplu,in proiectul
realizat in directorul vdbt1,puteti elimina fila de tip .cpp din nodul
executabil si apoi puteti sa includeti la acest nivel intregul nod de
tip SourcePool salvat in Sursa1.Construiti apoi proiectul cu Make si
executati aplicatia.
Acest gen de implementare,este necesar pentru toate componentele de
tip Tool,si in toate situatiile in care fila sursa contine declaratia
obiectelor dar nu include si constructorul sau destructorul implicit.
Pentru exemplificarea nodului de tip SourcePool studiati si exemplul
Srcpool din Examples/IDE.
Pentru a edita o aplicatie simplista,care utilizeaza o baza de date,
editati urmatoarea fila .cpp.
#include
int PASCAL WinMain( HINSTANCE,HINSTANCE,LPSTR,int)
{
PTTable table = new TTable;
table -> DatabaseName = string( "DivePlan" );
table -> TableName = string( "divestok.db" );
table -> Open();
int count = table->FieldCount;
int i; for (i = 0; i < count; i++)
{ MessageBox( 0,table->Fields[i]-AsString->c_str(),
table->Fields[i]-FieldName->c_str(),MB_OK); };
if (table) delete table;
return 0;
}
Salvati fila intr-un director nou (vdbt3).Construiti proiectul cu New si
Project (bifati si Controls: VBX,respectiv Libraries: OLE).Eliminati
din proiect fila .def si fila .cpp,apoi adaugati un nod de tip SourcePool.
Adaugati la nodul de tip Sourcepool fila .cpp de mai sus,apoi adaugati
din biblioteca Lib si filele ajutatoare bdtof.lib si bdtcfi.lib.Apoi
alegeti fila executabila .exe si cu un click drept de mouse selectati
View options hierarchy.In caseta,alegeti nodul .ide,apasati butonul Edit
iar pentru optiunea Make selectati Autodependencies = None.Confirmati cu
Ok apoi cu Close si construiti proiectul cu Make.Executati aplicatia si
observati primele inregistrari din tabelul "divestoc.db"(din SAMPLEDB).
-112-
Exemplul a fost dezvoltat prin simplificarea exemplului Calcfld din
Examples/Vdbt/Calcfld.Baza de date este inclusa in directorul Sampledb.
Acest exemplu contine cea mai simpla operatie posibila.In exemplu,se
declara si se utilizeaza un obiect de tip TTable,pentru a accesa baza
de date,apoi se utilizeaza o bucla de repetitie pentru a afisa datele
din fiecare inregistrare cu ajutorul unui mesaj de tip MessageBox.
Pentru a studia metodele si proprietatile fiecarui component visual,
utilizati in Help optiunea Data-access componets pentru obiectele uti-
lizate la accesare datelor (TBatchMove,TDatabase,TDataSource,TQuery,
TStoredProc si tTable) si respectiv Data Aware components pentru cele
utilizate la prezentarea si/sau actualizarea datelor(TDBCheckBox,TDBEdit,
TDBComboBox,TDBGrid,TDBImage,TDBListBox,TDBLookupCombo,TDBLookupList,
TDBMemo,TDBNavigator,TDBRadioGroup,TDBText).
Pentru utilizatorii de Delphi,selectarea si utilizarea acestor compo-
nente este mult mai usor de realizat,deoarece se poate face oricand un
control vizual direct (proiectati aplicatia in Delphi si apoi execu-
tati operatiile necesare pentru implementarea in C++).Bazele de date
pot fi utilizate in comun de catre aplicatii scrise in Delphi,C++ sau
respectiv in programele sursa (Fox,VisualFox,Excel etc.).
Biblioteca Vdbt nu este destinata pentru a realiza programe complexe
de tip baza de date ci doar pentru a putea realiza legatura dintre apli-
catiile de tip C++ si o baza de date oarecare.In special,se pot realiza
operatii de preluare,prelucrare si actualizare automata a datelor.Pentru
operatii complexe cu si asupra bazelor de date,se vor prefera intotdeauna
programele specializate (Borland C++ nu are tampoane de memorie proiec-
tate special pentru operatiile cu baze mari de date si exista riscul de
a suprascrie bazele de date cu informatii incorecte(tampoane suprascrise).
Componentele vdbt sunt de tip Vbx si pot fi vizualizate cu ajutorul
editorului de resurse.Pentru a utiliza aceste componente vizuale este
necesara o clasa de tip TDialog si o resursa (de tip .rc) care sa includa
si o resursa de tip DIALOG.Componentele de tip "Data access" pot fi
vizualizate doar in etapa de editare a resursei in timp ce componentele
de tip "Data aware" vor fi prezente si in timpul executiei programului.
Pentru a putea prelua si afisa datele stocate intr-o baza de date este
necesar sa se inlantuiasca cel putin trei componente vizuale: unul de tip
"data access" (TTable sau TQuery),unul de tip "Data aware" (TDBGrid,sau
TDBEDit...etc) si un component de legatura,denumit TDataSource.
Pentru a efectua legaturile necesare dintre obiecte,se poate edita
un algoritm in care se precizeaza proprietatile fiecarui obiect,sau se
poate utiliza obiectul grafic denumit "Property Inspector" care a fost
special realizat pentru acest scop (este similar cu Obiect Inspector din
Delphi).
Un exemplu destul de simplu se gaseste arhivat in Examples\Vdbt\Animals.
Construiti si executati proiectul,apoi deschideti fila IDE cu optiunea
Project/Open.Proiectul contine doua file executabile: animalssrc.exe si
un nod de tip SourcePool denumit "animalssrc".
Selectati fila beastwin.rc si executati un dublu click,apoi executati
un click de mouse pe semnul "+" care precede directorul beastwin.rc.
Din directorul beastwin.rc se va afisa fila resursa denumita :
DIALOG:IDD_ANIMALS(1)
Executati un click de mouse cu butonul drept,pe aceasta fila si alegeti
-113-
optiunea View.Se va deschide o fereastra denumita IDD_ANIMALS in care
sunt prezentate toate componentele vizuale ce formeaza resursa (la fel
ca si fereastra Form din Delphi).
Observati cele doua componente de tip "Data acces" suprapuse peste
obiectul TNavigator.Executati un click de mouse drept pe fiecare dintre
ele si alegeti optiunea Properties.Se va afisa fereastra denumita
Property Inspector in care sunt prezentate toate proprietatile obiectului
si modul in care sunt setate.
De exemplu,pentru obiectul TTable1 puteti observa urmatoarele proprie-
tati: DatabaseName = diveplan,TableName = ANIMALS.DBF si Active = True.
Acesta este obiectul prin care se acceseaza o baza de date oarecare.
Apoi executati un click drept de mouse pe obiectul TDataSource1 si
observati ca proprietatea DataSet este setata TTable1,adica obiectul
TDataSource are ca sursa de date obiectul TTable.
Toate celelalte obiecte vizuale sunt conectate la sursa de date prin
intermediul obiectului TDataSource.De exemplu,executati un click drept
pe obiectul grafic de tip TDBImage (desenul cu un peste exotic) si
alegeti Properties.Observati proprietatea DataSource = TDataSource1.
In mod similar,daca executati un click pe obiectul TDBText6 (cel care
contine textul "Angel Fish"),in Property Inspector puteti identifica
proprietatea DataSource=TDataSource1 si proprietatea DataField = NAME.
Pentru a deschide pe rand mai multe obiecte,puteti utiliza caseta de
dialog de tip TEdit,asociata cu obiectul Property Inspector(executati un
click pe butonul de scroll si alegeti obiectul dorit).Toate obiectele
legate de baza de date vor avea proprietatea DataSource = TDataSource1.
Daca doriti sa preluati si sa afisati date din mai multe baze de date
simultan,este necesar sa utilizati cate un obiect de tip TTable si cate
un obiect de tip TDataSource,pentru fiecare baza de date distincta.Apoi
obiectele care prezinta datele vor fi legate de sursa datelor prin pro-
prietatea DataSource si prin obiectrul TDataSource corespunzator.
Pentru a edita o astfel de fila de resurse,cel mai simplu este sa
modificati o fila de resurse gata existenta (vezi si exemplul vdbt4).
De exemplu,pentru a modifica resursa beastwin.rc,inchideti fereastra
IDD_ANIMALS,apoi executati din nou un click de mouse drept pe fila
DIALOG: IDD_ANIMALS(1) si alegeti optiunea Edit.Se va deschide o fereastra
similara,denumita tot IDD_ANIMALS ,dar de aceasta data,toate proprietatile
obiectelor vor fi editabile.Executati un click drept de mouse in fereastra
IDD_ANIMALS (in zona alba) si selectati optiunile: Control Palette,Tool
Palette si Property Inspector.
Optiunea Control Palette va adauga la meniul principal inca o bara de
meniu in care sunt incluse toate obiectele grafice utilizabile intr-o
resursa de tip DIALOG.Obiectele grafice sunt grupate in functie de tipul
lor in urmatoarele categorii: Standard,Common,BWCC,Data Access,Data Aware
si Custom.Grupele Standard,Common si BWCC contin obiectele Windows de tip
OWL prezentate in capitolul anterior.Se utilizeaza la fel,dar se poate
utiliza Property Inspector pentru setarea proprietatilor.
Grupele DataAccess si Data Aware contin componentele vizuale de tip
vdbt utilizate pentru operatii cu si asupra bazelor de date.
Pentru a a dauga in fila resursa un astfel de obiect,selectati obiectul
dorit,apoi apasati butonul cu sageata alba (denumit Select) si executati
un click de mouse in fereastra,in locul dorit.
-114-
De exemplu,pentru a adauga un obiect de tip TDBGrid in care sa fie
afisate toate datele din baza de date,executati urmatoarele operatii:
1.Selectati si extindeti fereastra Form5 (cea cu puncte mici)
2.Alegeti grupul de obiecte DataAware.
3.Selectati butonul SSView (ultimul).
4.Apasati si butonul Select (cel cu sageata alba).
5.Executati un click de mouse in locul dorit.
6.Selectati noul obiect.
7.Extindeti obiectul la dimensiunea dorita (cu mouse apsat).
8.Executati un click drept de mouse pe obiect si alegeti Properties.
9.In Property Inspector alegeti DataSource si apasati sageata
butonului de derulare (scroll) si alegeti TDataSource1.
10.Inchideti Property Inspector.
11.Inchideti fereastra IDD_ANIMALS.
12.Deschideti fila beastwin.rh si verificati daca obiectul
adaugat a fost adaugat si in lista de definitii (Exemplu:
#define IDC_VBCONTROLS 14 114 )
Pentru siguranta,comparati cu identificatorul utilizat in definitia
obiectului(in fereastra din dreapta verificati linia:
CONTROL "VTSSONLY.VBX;SSView;Sheet1,IDC_VBCONTROL14,"VBControl".....
In mod normal,daca proiectul este construit,fila se va actualiza
automat.In caz contrar,identificatorul trebuie specificat manual.
Fie editati fila beastwin.rh,fie editati resursa (cu optiunea Edit
Text),fie adaugati in fila .cpp #define IDC_VBCONTROL14 114.
13.Inchideti fereastra filei de resurse(confirmati schimbarile).
14.Reconstruiti si executati obiectul.
Pentru siguranta,este bine sa pastrati o copie a filei beastwin.rc
originale(copia de siguranta),inainte de a efectua modificarile de mai
sus.
In mod similar,se poate aduga orice alt component.Verificati insa cu
atentie codul de identificare al obiectului,astfel incat sa fie definit
in fila .cpp inainte de a fi apelat prin apelul filei de resurse.
Daca doriti,puteti sa stergeti toate componentele si sa reeditati
complet fila de resurse.
Pentru a selecta o alta baza de date,se procedeaza astfel:
In Property Inspector se selecteaza obiectul TTable1 si se seteaza pro-
prietatea Active = False,apoi se alege baza de date dorita in proprietatea
DatabaseName,iar apoi se alege tabelul dorit,setand proprietatea TableName.
In final se reseteaza proprietatea Active = True.Din acest moment,sursa de
date va fi tabelul setat in TableName si toate obiectele inlantuite cu
ajutorul obiectului TDataSource vor fi orientate spre aceasta sursa de
date.Ca rezultat,toate obiectele conectate cu aceasta sursa de date vor
trebui resetate pentru proprietatea DataField (exceptie fac situatiile in
care noua baza de date contine aceleasi campuri de date-Exemplu: in cazul
in care o baza de date este actualizata cu o baza de date structurata
identic,dar cu date noi).
Daca bazele de date contin aceleasi campuri,cu aceleasi denumiri,se pot
utiliza in paralel.Astfel,se va conecta cate un obiect de tip TTable si
cate un obiect de tip TDataSource pentru fiecare baza de date.Pentru a
schimba interactiv baza de date activa,in obiectele de prezentare a
datelor se va schimba doar proprietatea DataSource.
-115-
Dupa ce resursa de tip DIALOG are aspectul corespunzator,poate fi
apelata in cadrul constructorului unui obiect de tip TDialog,pentru a
fi inclusa in program.Obiectele de tip TDialog pot fi derivate din clasa
TDialog,definita in fila "owl/dialog.h".Clasa TDialog este derivata din
clasa TWindow,astfel incat poate fi utilizata la fel ca orice alta
fereastra,dar adauga si o serie de metode proprii(Create,DoCreate,Execute,
DoExecute,Destroy,Reposition.etc.).
EXEMPLU: ( vezi si OWL_ABC / vdbt5 )
Deschideti un proiect si editati urmatoarea fila .cpp.
#include
#include
#include
#include
#define IDD_ABORTDIALOG 32599
class Aplicatie1 : public TApplication {
public: Aplicatie1() : TApplication() {};
void InitMainWindow(); };
void Aplicatie1::InitMainWindow() {
SetMainWindow(new TFrameWindow(0,"Test",
new TDialog(0,IDD_ABORTDIALOG),true)); };
int OwlMain(int,char* []) { return Aplicatie1().Run(); };
Eliminati din proiect fila .DEF care nu este necesara si inlocuiti fila
de resurse cu fila "owl.printer.rc" (din INCLUDE/OWL ).
Compilati,construiti si executati proiectul (atentie ca fila .cpp si
fila .rc sa fie denumite la fel ca fila .ide).
Dostları ilə paylaş: |
|
|