|
La executie se va lansa caseta de dialog utila pentru anularea unui
|
səhifə | 18/18 | tarix | 12.09.2018 | ölçüsü | 1,36 Mb. | | #81721 |
| La executie se va lansa caseta de dialog utila pentru anularea unui
proces de imprimare a datelor.In mod similar,puteti realiza si apela
orice resursa de tip dialog,sau puteti apela cele predefinite.Atentie
ca identificatorul resursei sa fie definit inainte de a fi apelat si sa
corspunda cu cel utilizat in fila de resurse ( IDD_ABORTDIALOG in exemplul
de mai sus).Eventual,identificatorul poate fi inlocuit direct prin codul
sau numeric (32599 in exemplul de mai sus).Pentru resursele create de
d-voastra este bine sa utilizati codurile numerice mici (0-256) pentru
a nu supraincarca resursele standard ale sistemului de operare.
Tipic,clasa TDialog si resursa aferenta se utilizeaza pentru a prelua
informatii de la utilizator,prin intermediul unor obiecte specializate de
tip caseta de dialog(TEdit,TListBox,TComboBox etc.).Obiectele de tip
TDialog sunt ferestre care pot fi afisate in orice loc al ecranului (spre
deosebire de ferestrele de tip "Child" obisnuite,care nu pot fi afisate
decat in interiorul ferestrei "Parent").
Obiectele de tip TDialog pot fi de doua tipuri: modale si modeless.
Cele modale intrerup activitatea din fereastra parinte atat timp cat se
desfasoara operatii in fereastra de tip TDialog.Ca rezultat,nu se pot
face nici un alt fel de operatii in restul obiectelor din program pana
cand nu se inchide fereastra de tip TDialog.Cele de tip modeless,permit
efectuarea de operatii si in obiectele situate in afara ferestrei de tip
TDialog.Pentru a crea un obiect de tip modal se apeleaza metoda: Execute,
iar pentru a crea un obiect de tip modeless,se apeleaza metoda: Create.
Cele doua tipuri au constructori diferiti.
In situatiile in care resursa de tip DIALOG contine componente de tip
vdbt(care nu au constructor),se va include intr-un nod de tip SourcePool.
-116-
Asadar,pentru a utiliza componentele de tip vdbt este necesara o resursa
de tip DIALOG si un obiect de tip TDialog.Pentru ca obiectele din fe-
reastra deschisa sa fie interactive (sa primeasca si sa emita mesaje de
tip Windows) este necesara si o tabela de raspunsuri si un obiect de tip
TVbxEventHandler,care sa preia mesajele obiectului de tip TBIVbxLibrary
utilizat pentru manevrarea obiectelor de tip Vbx.
In exemplul Animals(din Examples/Vdbt),aceste structuri sunt imple-
mentate in patru file diferite (2 file .cpp si doua file header).Pentru
a simplifica putin acest exemplu puteti edita urmatoarea fila .cpp:
( vezi si OWL_ABC / vdbt6)
#include
#include
#include
#include
#include
#include
#include
#include
#define IDD_ANIMALS 1
#pragma hdrstop
class Anim1 : public TDialog,public TVbxEventHandler{
public:
Anim1(TWindow* parent,TresId = IDD_ANIMALS,TModule* module=0);
virtual ~Anim1();
DECLARE_RESPONSE_TABLE(Anim1); };
DEFINE_RESPONSE_TABLE2(Anim1,TDialog,TVbxEventHandler)
END_RESPONSE_TABLE;
Anim1::Anim1(TWindow* parent,TresId resId,Tmodule* module)
:TDialog(parent,resId,module) { };
Anim1::~Anim1(){ Destroy(); };
class Aplicatie1::InitMainWindow(){
SetMainWindow(new TFrameWindow(0,"Test",new Anim1(0,1,0),true));};
int OwlMain(int,char*[]) {
TBIVbxLibrary Biblioteca;
return Aplicatie1().Run; }
Formati un nod de tip SourcePool(cu Project/New Target),adaugati fila
.cpp de mai sus si resursa de la exemplul Animals,apoi includeti nodul
SourcePool in executabil (apasati tasta Alt si trageti cu mouse apasat).
In final compilati si executati aplicatia.
Exemplul de mai sus,contine toate elementele necesare.Observati ca
pentru clasa Anim1 s-a utilizat o mostenire multipla,iar tabela de
raspuns controleaza mesajele atat pentru fereastra TDialog cat si pentru
obiectul TVbxEventHandler.Ca rezultat,toate actiunile din fereastra
TDialog vor transmite mesaje care vor avea vizibilitate pentru intregul
program.
Acest gen de implementare,este mai laborios decat in Delphi,dar
ofera avantajul de a avea acces nemijlocit la codul aplicatiei,cat si la
tabela de raspunsuri.Astfel,programatorul poate avea controlul absolut al
evenimentelor din aplicatie (in Delphi,tabela de raspunsuri este generata
automat,iar functiile de tratare a evenimentelor sunt predefinite).
In mod similar se poate apela orice resursa de tip DIALOG.
-117-
Pentru a deschide un alt tabel,sau pentru a modifica modul de prezen-
tare a datelor,fila de resurse se poate modifica dupa bunul plac.
EXEMPLU: ( vezi si OWL_ABC /vdbt7 )
Copiati intr-un director nou,fila .cpp si fila de resurse din exemplul
anterior,apoi adaugati un nod de tip SourcePool si adaugati cele doua
file,iar in final adaugati nodul SourcePool la fila executabila.
Apoi deschideti fila .rc (cu Open sau cu dublu click),executati un
click drept de mouse pe fila DIALOG:IDD_ANIMALS(1) si alegeti optiunea
Edit...
Pentru a elimina componentele vizuale,executati un click de mouse
drept pe componentul selectat si apoi alegeti Delete.Eliminati din
resursa toate componentele de tip TDBText si cel de tip TDBImage,apoi
adaugati un component de tip TDBGrid(SSView).
Pentru a alege tabelul dorit,selectati componentul TTable1 si executati
un click drept de mouse,apoi alegeti Properties.In Property Inspector,
setati: DatabaseName=DIVEPLAN si TableName = sites.db,apoi Active = True.
Pentru a inlantui si restul componentelor,alegeti TDataSource1 si setati
DataSet = TTable1,apoi alegeti Sheet1 si TDBNavigator1 si setati Data-
Source = DataSource1.Inchideti si salvati resursa.
Compilati,construiti cu Build,apoi cu Make si executati aplicatia.
Daca analizati fila de definitii beastwin.rh,puteti observa ca nu au
fost sterse codurile de identificare IDC_VBCONTROL de la componentele
eliminate din resursa,dar au fost adaugate coduri noi,pentru componentele
nou adaugate.Din acest motiv,nu este bine ca o fila de resurse sa fie
modificata prea des,deoarece exista riscul de a bulversa codurile de
identificare a resurselor.Mai mult,nu pot exista doua variante de
resursa cu acelasi nume si de acelasi tip.Daca doriti sa utilizati intr-un
proiect mai multe variante de prezentare a datelor,va trebui creata cate
o fila de resurse separata,pentru fiecare varianta de prezentare.
In situatii limita,codurile de identificare pot fi inlocuite cu valori
numerice (alegeti Edit as Text si modificati linia de definitie).In acest
caz nu va mai fi necesara o fila auxiliara in care sunt definite codurile
handle,dar exista riscul sa utilizati aceeasi valoare numerica pentru
doua sau mai multe componente.Cel mai simplu,este sa lasati programul
sa-si gestioneze singur codurile handle.
Pentru a crea o fila de resurse noua,se utilizeaza editorul de resurse
din meniul File.Alegeti File,apoi New,apoi Resource Project si apoi
Resource Script.Pentru ca sa adaugati o resursa de tip dialog,executati
un click drept de mouse in fereastra "noname00.rc" si alegeti optiunea
Show,apoi List by Type.Din lista tipurilor de resurse alegeti DIALOGEX
si executati un nou click de mouse drept,apoi alegeti New.
In fereastra "New Resource" alegeti DIALOGEX si confirmati cu OK.
Eventual puteti utiliza si butonul Options pentru a realiza o versiune
personalizata a ferestrei de dialog.
Se va deschide fereastra IDD_DIALOG1 in care puteti adauga componentele
dorite dupa bunul plac.Pentru a avea acces la paleta de controale si la
paleta de instrumente,executati un click drept de mouse in zona alba si
alegeti una dintre optiunile: Control Palette,ToolPalette,Property Inspec-
tor,sau Grid (de obicei alegeti Control Palette).
Puteti utiliza toate cele trei butoane implicite: OK,Cancel si Help,
sau le puteti elimina cu click drept + Delete.
-118-
EXEMPLU: (vezi si OWL_ABC / vdbt8 )
Pentru a crea o resursa noua,procedati ca mai sus,apoi:
Adaugati un component de tip TQuery (din DataAccess),executati un click
drept,alegeti Properties si setati in Property Inspector urmatoarele
campuri: DatabaseName = DIVEPLAN ,apoi alegeti SQL,executati un click
pe butonul cu trei puncte(...) si in fereastra de editare SQL adaugati
urmatorul Text: SELECT * FROM biosite.db,iar in final alegeti Active
si setati Active=True.
Apoi adaugati un component de tip TDataSource si in Property Inspector
setati DataSet =TQuery1.
Observati ca am inlocuit TTable prin TQuery.Acest tip de component
permite formularea de solicitari in limbaj SQL,prin care se pot selecta
doar un anumit tip de date din baza de date,se pot ordona datele dupa
un anumit criteriu,sau se pot executa o serie de operatii automate asupra
datelor (suma,selectie,filtrare,selectie incrucisata din doua sau mai
multe tabele,etc.).Pentru detalii despre limbajul SQL si despre compo-
nentele vizuale,puteti consulta si manualul: "Limbajul Delphi ABC-doar",
sau orice alta sursa de informare.
Pentru afisarea datelor,adaugati un component de tip SSView(Sheet1)
din grupul DataAware si setati in Property Inspector proprietatea
DataSource = TDataSource1.
Pentru a putea naviga cat mai usor in tabel,adaugati si un component de
tip TDBNavigator si setati proprietatea DataSource = TDataSource1.Acest
obiect permite operatii complexe,cum ar fi: adaugarea sau inserearea unei
inregistrari noi,stergerea definitiva a unei inregistrari,navigarea in
tabel etc.Pentru a adauga o inregistrare noua,apasati butonul cu semnul
plus,iar pentru a sterge inregistrarea curenta,apasati butonul cu semnul
minus,etc.Fiecare buton are in Property Inspector un camp special destinat
prin care poate fi setat "activ" sau poate fi inactivat.De exemplu,pentru
a bloca orice operatie de stergere a datelor,selectati BtnDelete si
alegeti optiunea Off sau Disabled.
Dimensionati si redimensionati fiecare component dupa bunul plac.
Apoi puteti utiliza restul proprietatilor pentru a adauga o amprenta
personala.De exemplu adaugati un text oarecare cu un component de tip
TDBtext,alegeti fonturile si culorile preferate etc.
In final,inchideti fereastra de dialog si salvati resursa.
Apoi copiati fila .cpp si resursa intr-un director nou,adaugati nodul
de tip SourcePool,construiti si executati proiectul la fel ca si cel
precedent.In fila .cpp puteti inlocui IDD_ANIMALS prin IDD_DIALOG1,sau
puteti utiliza direct un cod numeric oarecare de tip INT.
Pentru fiecare resursa nou construita,este bine sa respectati toate
elementele standard si sa utilizati elemente care vor putea fi utilizate
si in alte proiecte,sau de catre alti utilizatori.Din acest motiv,este
bine ca fiecare component sa fie spatiat cu atentie,sa fie amplasat cat
mai simetric,sa prezinte datele cat mai clar,sa evidentieze datele cele
mai importante si daca se poate sa fie realizate in culori placute,usor
de distins.Denumirile si codurile handle sa fie cat mai clare si sa ex-
prime cat mai sugestiv continutul resursei pe care o ordoneaza,pentru a
fi cat mai usor de identificat intr-un program.Cu cat sunt mai complexe,
cu atat se pot strecura mai usor eventualele greseli de conceptie sau de
implementare.
-119-
Pentru actualizarea datelor dintr-un tabel: se poate utiliza TNavigator
pentru a adauga si insera inregistrari,iar datele se pot introduce direct
in tabel.O alta modalitate,mult mai eleganta,este sa utilizati componente
specializate (Exemplu: TDBEdit) care preiau si actualizeaza doar un anumit
camp de date din tabel si exculd orice eroare accidentala de selectare a
casetei dorite.
EXEMPLU: (vezi si OWL_ABC /vdbt9 )
Realizati o resursa noua astfel:
1.Adaugati un component TTable si setati: DatabaseName = DIVEPLAN,
TableName = biolife.db si Active = True
2.Adaugati un component TDataSource si setati: DataSet =TTable1
3.Adaugati un component SSView si setati: DataSource = TDataSource1
4.Adaugati un component TDBImage si setati: DataSource = TDataSource1 si
DataField = Graphic
5.Adaugati un component TDBMemo si setati: DataSource = TDataSource1 si
DataField = Notes
6.Adaugati un component TDBEdit si setati: DataSource = TDataSource1 si
DataField = Common Name
7.Adaugati alt component TDBEdit si setati: DataSource = TDataSource1 si
DataField = Length(cm)
8.Adaugati un component TDBNavigator si setati: DataSource = TDataSource1
Dimensionati fiecare component dupa bunul plac,apoi alegeti pozitia
in fereastra,culorile etc.Eventual adaugati si texte explicative cu
ajutorul unor componente de tip TDBText (textul se scrie in Caption).
Inchideti si salvati resursa.Copiati resursa si fila .cpp intr-un director
nou,apoi adaugati nodul de tip SourcePool si construiti proiectul la fel
ca si cele precedente(copiati fila .cpp din proiectul anterior).
Construiti proiectul cu Make si executati aplicatia.
Daca doriti sa modificati continutul tabelului,selectati cu mouse
caseta dorita si introduceti datele dorite.Alternativ,puteti sa utilizati
cele doua casete de tip TDBEdit,pentru a modifica doar denumirea comuna,
sau lungimea in centimetri a fiecarei specii.
Modul de implemenetare difera dupa tipul de utilizator.In general,pentru
programele realizate pentru uz propriu,se prefera tipul de implementari
care ofera acces complet,direct si nemijlocit la toate datele din aplica-
tie.Pentru cele realizate pentru uzul unor utilizatori neavizati,se vor
prefera implementarile in care utilizatorul nu poate avea aces decat la
un numar limitat de campuri,si/sau in anumite conditii,pentru a evita la
maximul dezorganizarea datelor (accidental sau intentionat).
De exemplu,pentru a bloca complet editarea si/sau actualizarea date-
lor se poate seta in TTable1 proprietatea ReadOnly = True.In acest caz
utilizatorul va putea utiliza resursa doar pentru a citi datele iar
programatorul va utiliza o alta resursa pentru a actualiza datele.
Fiecare component are o serie intreaga de proprietati specifice prin
care seteaza caracteristicile de editare si/sau imprimare,modul de acces,
etc.Studiati cu atentie fiecare proprietate si documentatia sa,pentru a
putea distinge eventualele aplicatii practice.Exemplu:componentele de tip
DataAware au si o proprietate denumita Visible prin care pot fi afisate
sau eliminate din fereatra de dialog,interactiv (de exemplu cu un buton
de control).Nu ezitati sa incercati cat mai multe variante posibile.
-120-
Pentru a utiliza un tabel izolat,care nu este inclus intr-o baza de
date,copiati tabelul in directorul BIN,construiti resursa de tip dialog,
apoi construiti proiectul si copiati tabelul si in directorul curent.
(vezi si OWL_ABC / vdbt10 ) (in TTable setati direct TableName).
CONCLUZII
Acest manual nu epuizeaza resursele programului C++.Daca deschideti
directorul INCLUDE,puteti observa si restul bibliotecilor incluse in
versiunea Borland C++ 5.0A (Classlib,GI,Ideaddon,Ocf,Osl,Owlcvt,Services,
Sys,Win16,Win32 si Winsys).Ramane sa explorati singuri aceste biblioteci
si sa alegeti functiile,componentele si clasele ca va sunt utile.Mai mult
decat atat,exista o gama extrem de variata de biblioteci si componente
noi,care pot fi adaugate din diverse surse (Internet,CD-uri etc.).
Cu notiunile de pana acum,ar trebui sa fiti capabili sa continuati
studiul pe cont propriu.Explorati cu atentie fiecare fila,studiati cu
atentie toate referintele bibliografice si mai ales incercati sa utilizati
in exemple si programe fiecare dintre facilitatile programului.
Nu va descurajati atunci cand gresiti ceva.Corectati cu rabdare fiecare
eroare returnata de compilator,pana cand programul merge perfect.Nu igno-
rati mesajele de avertisment,chiar daca programul merge aparent "perfect".
In etapa de studiu este extrem de improbabil sa puteti edita un program
intreg,fara nici o greseala.Fiecare mesaj de eroare,va arata de fapt ce
notiuni va sunt inca insuficient de clare,sau chiar complet necunoscute.
Pentru fiecare eroare,studiati bibliografia,faceti o mica fisa,sau o
scurta sinteza in scris.Exista si inevitabilele erori generate de o simpla
neatentie,greseli de ortografie,etc.
Limbajul C++ si descendentul sau Visual C++,utilizeaza extensiv con-
ceptul modular si structurile de tip obiect.Este bine sa utilizati aceste
concepte,pentru orice program de interes general,pentru filele de resurse,
si pentru orice component sau modul care considerati ca va putea fi inclus
si in alte aplicatii si programe.Pentru exemplele si exercitiile "de unica
folosinta",nu are rost sa va complicati cu concepte prea sofisticate,ci e
preferabil sa alegeti cea mai simpla cale care rezolva problema propusa.
Atunci cand programul va fi structurat modular,e bine sa aveti o schema
de ansambu a proiectului,diagrame grafice sau tabele si o schita a lega-
turilor dintre module (link-uri),astfel incat fiecare modul adaugat sa se
incadreze intr-un concept global.Nu abuzati de modularitate,doar pentru
ca "este la moda".Fiecare modul nou,inseamna pentru sistemul de operare
o referinta in plus,care va incarca memoria de operare cu un cod suplimen-
tar si va reduce din viteza globala de executie.
Daca realizati programe ce urmeaza sa fie utilizate de alte persoane,
nu contati pe conostiintele software sau pe experienta utilizatorului.
Programele trebuie sa contina tot ce este necesar pentru executie,sa se
instaleze cat mai simplu (preferabil prin simpla copiere) si sa poata fi
executate imediat,fara nici o alta operatie preliminara.
Acest abecedar nu este o garantie a succesului.Pentru ca sa puteti
scrie programe bune si foarte bune,trebuie sa depuneti un efort individual
sustinut(toti am studiat acelasi abecedar,dar nu scriem toti ca Eminescu).
- S F A R S I T -
Dostları ilə paylaş: |
|
|