Limbajul C++ si oop abc-doar


La executie se va lansa caseta de dialog utila pentru anularea unui



Yüklə 1,36 Mb.
səhifə18/18
tarix12.09.2018
ölçüsü1,36 Mb.
#81721
1   ...   10   11   12   13   14   15   16   17   18

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 -
Yüklə 1,36 Mb.

Dostları ilə paylaş:
1   ...   10   11   12   13   14   15   16   17   18




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin