Limbajul C++ si oop abc-doar


Lista->AddString("patru")



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

Lista->AddString("patru");

Lista->AddString("cinci");

};

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitMainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); };

int Owlmain(int,char* [])

{ return Aplicatie1().Run(); };

Compilati,construiti si executati aplicatia.

Observati ca in acest caz,datele sunt afisate pe mai multe coloane,

fara sa fie sortate alfabetic.Practic,datele vor fi afisate decrescator,

in ordinea in care sunt indexate,pana cand se ajunge la limita inferioara

a casetei,dupa care se trece la coloana urmatoare.Fiecare coloana afisata

va avea latimea egala cu cea specificata prin SetColumnWidth().Acest gen

de caseta se prefera atunci cand se lucreaza cu date care respecta un

anumit format (de exemplu siruri de numere cu valori apropiate).

Pentru a utiliza cel de al treilea tip de caseta listbox se poate uti-

liza proprietatea Attr.Style |= LBS_MULTIPLESEL.In acest cas,caseta de

dialog se prezinta la fel ca si cea simpla,dar permite selectarea simulta-

na a unui grup de date.Se utilizeaza pentru a efectua transferuri de date

din caseta listbox in alt obiect,sau pentru a putea realiza diferite

tipuri de setari in care se transfera grupuri de date catre un anumit

utilizator.Exista un numar mare de metode destinate acestui scop.Pentru

a prelua si transfera datele din caseta listbox,este necesara o procedura

dedicata si una dintre functiile Get...(exemple: GetSelString(),GetCount()

GetString(),GetItemData(),GetSelIndex() etc.).


-76-

EXEMPLU: (vezi si OWL_ABC / owl14 )

#include

#include

#include

#include

#include

#include

const uint16 ID_LISTA1 = 201;

class Fer1 : public twindow {

public: Fer1();

void SetupWindow();

void EvRButtonDown(uint,TPoint&);

protected:

TListBox* Lista;

DECLARE_RESPONSE_TABLE(Fer1); };

DEFINE_RESPONSE_TABLE1(Fer1,TWindow)

EV_WM_RBUTTONDOWN,

END_RESPONSE_TABLE;

Fer1::Fer1():TWindow(0,0,0) {

Lista = new (this,ID_LISTA1,50,50,200,100); };

void Fer1::SetupWindow()

{

Lista->Attr.Style &= ~LBS_SORT;

Lista->Create();

Lista->AddString("Prima linie din lista");

Lista->AddString("A doua inregistrare ");

Lista->AddString(".....................");

Lista->AddString("Ultima inregistrare ");

};

void Fer1::EvRButtonDown(uint,TPoint& point)

{

char text1[80];

Lista->GetSelString(text1,20);

TClientDC dc1(*this);

dc1.TextOut(point,text1,20);

};

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitMainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); };

int OwlMain(int,char* [])

{ return Aplicatie1().Run(); }

Compilati,construiti si executati aplicatia.

Selectati una dintre inregistrari cu un click de mouse stang si apoi

executati un click de mouse drept,in orice loc in afara casetei listbox.

Textul selectat va fi transferat la locatia respectiva.Functia GetSel-

String() a preluat datele in tamponul temporar "text1",apoi functia

TextOut() a afisat continutul tampunului.In mod similar se poate utiliza

memoria Clippboard,un stream oarecare,sau tamponul de memorie alocat

unui alt obiect(se transfera datele direct in alt obiect),etc.


-77-

Un alt tip de caseta de dialog este caseta "combobox" definita in fila

"combobox.h" prin clasa TComboBox si prin clasa TComboBoxData.Este un

obiect compus dintr-un obiect de tip TListBox,combinat cu un obiect TEdit.

Ca rezultat,se poate utiliza atat pentru a introduce date,cat si pentru

a selecta o optiune,dintr-un set de optiuni prestabilite.

EXEMPLU: (vezi si OWL_ABC / owl15 )

#include

#include

#include

#include

#include

const uint16 ID_COMBOBOX = 201;

class Fer1 : public TWindow {

public: Fer1();

void SetupWindow();

protected:

TComboBox* Caseta1; };

Fer1::Fer1() : TWindow(0,0,0) {

Caseta1 = new TComboBox(this,ID_COMBOBOX,50,50,400,200,CBS_SIMPLE,25);

};

void Fer1::SetupWindow()

{

Caseta1->Create();

Caseta1->AddString("Prima linie din lista");

Caseta1->AddString("A doua inregistrare ");

Caseta1->AddString(".....................");

Caseta1->AddString("Ultima inregistrare ");

};

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitMainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); };

int OwlMain(int,char* [])

( return Aplicatie1().Run(); }

Compilati,construiti si executati proiectul.

Observati ca obiectul de interfata contine o caseta de editare,in care

se pot introduce date,si o lista de optiuni prestabilite.Selectarea uneia

dintre optiuni copiaza automat textul in caseta de editare,ca si cand ar

fi fost introdus de la tastatura.Din caseta de editare,textul poate fi

preluat cu una dintre metode (GetText(),GetEditSel(),GetItemData(),etc.).

La fel ca si pentru TListBox,toate metodele se vor apela cu ajutorul

unei functii distincte,diferita de constructor (functia Setup).

Exista trei tipuri de caseta "combobox": simpla,cu defilare a listei

de optiuni si combinata.Pentru selectarea tipului de caseta se utilizeaza

in constructor unul dintre urmatorii parametri: CBS_SIMPLE (caseta simpla)

CBS_DROPDOWN(caseta cu defilarea listei) si CBS_DROPDOWNLIST(caseta combi-

nata).Caseta simpla afiseaza lista de optiuni permanent,iar celelalte doua

afiseaza lista doar in momentul selectiei.Alegerea tipului de caseta se

va face in functie de spatiul existent in interfata si in functie de

aspectul grafic dorit.

-78-

Pentru introducerea si editarea datelor exista si un obiect specializat

definit prin clasa TEdit in fila "edit.h".Contine o caseta de dialog in

care se pot introduce date activ,sau se pot prelua date din alta locatie

(dintr-o fila,dintr-un stream,dintr-un alt obiect,dintr-un port etc.).

EXEMPLU: (vezi si OWL_ABC /owl16 )

#include

#include

#include

#include

#include

const uint16 ID_EDIT = 201;

class Fer1 : public TWindow {

public: Fer1();

void SetupWindow();

protected:

TEdit* Editor1; };

Fer1::Fer1():TWindow(0,0,0) {

Editor1 = new TEdit(this,ID_EDIT1,"TEXT INITIAL:",50,50,400,200,TRUE);

};

void Fer1::SetUpWindow()

{

Editor1->Create();

};

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitMainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); };

int OwlMain(int,char* [])

{ return Aplicatie1().Run(); }

Compilati,construiti si executati proiectul.

Caseta de editare poate fi astfel dimensionata incat sa corespunda cat

mai bine scopului propus.Pentru ca in caseta sa se poata edita texte pe

mai multe randuri,este necesar ca parametrul "multiline" sa fie setat

TRUE (vezi definitia constructorului din fila edit.h).Daca acest parametru

lipseste,se va utiliza valoarea implicita,care este "FALSE",caz in care

caseta de editare nu va accepta decat un singur rand de text.

Prin metodele sale,caseta se poate utiliza atat pentru a introduce

date de la tastatura,cat si pentru a prelua date de la un alt obiect,sau

de la o alta locatie de memorie.Clasic,se utilizeaza pentru a prelua date

de la tastatura si a le arhiva intr-o fila,sau a le transmite catre un

alt obiect de interfata.

Obiectele utilizate pentru realizarea interfetei grafice pot fi inlan-

tuite intre ele,printr-o serie de proceduri,astfel incat datele introduse

intr-un obiect sa fie preluate,filtrate si procesate de mai multe alte

obiecte,pentru a obtine un anumit rezultat.

In mod similar,se pot combina datele preluate de la una sau mai multe

casete de dialog,cu date introduse de la tastatura,pentru a forma un text

final.De exemplu,se poate utiliza un obiect TEdit si pentru a grupa o

serie de date preluate din mai multe casete de tip ListBox si ComboBox,

pentru a forma o noua selectie,sau pentru a configura o unitate hardware.


-79-

EXEMPLU: (vezi si OWL_ABC / owl17 );

#include

#include

#include

#include

#include

#include string.h>

class Fer1 : public TWindow {

public: Fer1();

void SetupWindow();

void EvRButtonDown(uint,TPoint&);

protected:

TListBox* Lista;

TEdit* Editor1;

DECLARE_RESPONSE_TABLE(Fer1);

};

DEFINE_RESPONSE_TABLE1(Fer1,TWindow)

EV_WM_RBUTTONDOWN,

END_RESPONSE_TABLE;

Fer1::Fer1():TWindow(0,0,0) {

Lista = new TListBox(this,201,50,50,200,100);

Editor1 = new TEdit(this,207,"",50,150,400,200,0,TRUE);

};

void Fer1::SetupWindow()

{

Editor1->Create();

Lista->Attr.Style &= ~LBS_SORT;

Lista->Create();

Lista->AddString("Prima linie din lista ");

Lista->AddString("A doua inregistrare ");

Lista->AddString("......................");

Lista->AddString("Ultima inregistrare ");

};

void Fer1::EvRButtonDown(uint,TPoint& point)

{

char text1[80];

Lista->GetSelString(text1,22);

Editor1->Insert(text1);

point.x=point.x; };

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitmainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); }

int OwlMain(int,char* [])

{ return Aplicatie1().Run(); }

Compilati,construiti si executati proiectul.

Puteti utiliza caseta "Editor1" pentru a edita textul dorit.Daca

doriti sa utilizati si date din caseta listbox "Lista",selectati cu un

click de mouse optiunea dorita si apoi executati un click de mouse drept

in afara casetei de editare.Similar,se pot inlantui mai multe obiecte.


-80-

Pentru a prelua,sau pentru a salva date,in si de pe file de tip text,

arhivate pe unitatea de disc,se poate utiliza o caseta de editare speciala

denumita TEditFile si definita in fila "editfile.h".Aceasta caseta de

editare are metode specializate pentru deschiderea si/sau salvarea datelor

pe disc (NewFile(),Open(),Read(),Save(),SaveAs(),SetFileName() etc.).

EXEMPLU: (vezi si OWL_ABC /owl18 )

#include

#include

#include

#include

#include

const uint16 ID_EDIT1 = 201;

class Fer1 : public TWindow {

public: Fer1();

void SetupWindow();

protected:

TEditFile* Editor1;

};

Fer1::Fer1():TWindow(0,0,0) {

Editor1 = new TEditFile(this,ID_EDIT,"TEXT:",20,20,500,300,0,0); };

void Fer1::SetupWindow()

{

Editor1->Create();

Editor1->Open();

};

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitMainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); };

int OwlMain(int,char* [])

{ return Aplicatie1().Run(); }

Compilati,construiti si executati aplicatia.

Metoda Open(),deschide automat o caseta de dialog,in care puteti cauta

si selecta orice fila de tip .txt de pe disc.Alegeti fila dorita si apoi

confirmati cu OK.Fila va fi deschisa automat in caseta de editare Editor1.

Daca doriti,puteti adauga un set de butoane,sau un meniu si apoi puteti

atribui cate o functie specifica,pentru fiecare buton sau optiune din

meniu.

Exista si alte clase de obiecte,destinate pentru operatii cu si

asupra filelor de tip document(vezi filele:docmanag.h,docview.h,richedit.h

stgdoc.h etc.).

Nu exista o regula generala,fixa.Fiecare programator va alege tipul

de obiect care corespunde cel mai bine preferintelor sale.Alegerea se

poate face,fie in functie de memoria consumata,fie in functie de metodele

specializate pe care le ofera fiecare clasa sau obiect.Pentru fiecare tip

de operatie,exista un numar mare de variante posibile de implementare.

Acest manual nu ofera decat o schita simplista,in care se utilizeaza doar

exercitii elementare.Pentru a realiza programe profesionale,trebuie sa

depuneti un efort individual,sa va formati rutine si standarde proprii,sa

va obisnuiti sa exploatati la maximum resursele oferite de program.


-81-

Un alt tip de obiect Windows,utilizat pentru proiectarea intefetelor

grafice il reprezinta bara de defilare de tip ScrollBar.Acest tip de

obiect este prezent pe marginea inferioara si laterala a tuturor ferestre-

lor de tip Windows si permite navigarea intr-o fila de tip text cu dimen-

siuni mai mari decat fereastra in care este afisata.Bara de defilare de

tip "scrollbar" este definita in fila "scrollba.h" prin clasa TScrollBar.

EXEMPLU: (vezi si OWL_ABC / owl19 )

#include

#include

#include

#include

const uint ID_SCROLL = 207;

const uint ID_SCROLL2 = 208;

class Fer1 : public TWindow {

public: Fer1();

void SetupWindow();

protected:

TScrollBar* Scroll1;

TScrollBar* Scroll2; };

Fer1::Fer1():TWindow(0,0,0) {

Scroll1 = new TScrollBar(this,ID_SCROLL,20,20,20,300,FALSE,0);

Scroll2 = new TScrollBar(this,ID_SCROLL2,50,150,400,30,TRUE,0);

};

void Fer1::SetupWindow()

{

Scroll1->Create();

Scroll2->Create();

};

class Aplicatie1 : public Tapplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitMainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); };

int OwlMain(int.char* [])

{

return Aplicatie1().Run();

}

Compilati,construiti si executati proiectul.

Deschideti fila owl/scrollba.h si observati constructorul clasei

_OWLCLASS TScrollBar.Pentru a crea o bara de defilare orizontala se va

utiliza pentru parametrul boolean valoarea TRUE,iar pentru a crea o bara

de defilare verticala se va utiliza valoarea FALSE.Valoarea implicita

este isHScrollBar(adica TRUE).

In obiectele utilizate pentru ediatrea unui text,barele de defilare

au rostul de a deplasa campul in care se face editarea sau citirea date-

lor.In aplicatiile realizate de d-voastra,barele de editare se pot utili-

za atunci cand doriti sa lucrati cu serii liniare de numere,pe care sa le

puteti selecta cu ajutorul indicatorului optic mouse.Prin metoda SetRange

se poate specifica domeniul de valori acceptabile(limita inferioara si

cea superioara) iar prin GetPosition() se poate determina pozitia butonu-

lui culisant,respectiv o anumita valoare din seria liniara de valori.


-82-

EXEMPLU: (vezi si OWL_ABC / owl20 ) Editati fila .cpp astfel:

#include

#include

#include

#include

const uint16 ID_SCROLL = 207;

const uint16 ID_SCROLL2 = 208;

class Fer1 : public TWindow {

public: Fer1();

void SetupWindow();

void EvRButtonDown(uint,TPoint&);

protected:

TScrollBar* Scroll1;

TScrollBar* Scroll2;

DECLARE_RESPONSE_TABLE(Fer1); };

DEFINE_RESPONSE_TABLE;

EV_WM_RBUTTONDOWN,

END_RESPONSE_TABLE;

Fer1::Fer1():TWindow(0,0,0) {

Scroll1= new TScrollBar(this,ID_SCROLL,20,20,90,300,FALSE,0);

Scroll2= new YScrollBar(this,ID_SCROLL2,120,250,400,90,TRUE,0);

};

void Fer1::SetupWindow()

{

Scroll1->Create();

Scroll2->Create();

};

void Fer1::EvRButtonDown(uint,TPoint&)

{ Scroll1->SetRange(0,250);

Scroll2->SetRange(0,250);

int orizontal,vertical;

orizontal = Scroll2->GetPosition();

vertical = Scroll1->GetPosition();

SetBkgndColor(RGB(250,orizontal,vertical));

UpdateWindow(); };

class Aplicatie1 : public TApplication {

public: Aplicatie1() : TApplication() {};

void InitMainWindow(); };

void Aplicatie1::InitmainWindow()

{ MainWindow = new TFrameWindow(0,"Test",new Fer1); };

int OwlMain(int,char* []);

{ return Aplicatie1().Run(); }

Compilati,construiti si executati aplicatia.

Deplasati butoanele de defilare,apoi executati un dublu click de mouse

cu butonul drept,in afara obiectelor.

In acest exemplu,butoanele au fost utilizate pentru a seta valori

numerice cuprinse intre 0 si 250,cu ajutorul carora se schimba culoarea

de fond,prin functiile RGB() si SetBkgndColor().In mod similar se poate

seta volumul sau frecventa unui dispozitiv de sunet,sau orice serie

liniara de valori numerice cuprinse intre limitele din SetRange().

Deschideti fila "scrolba.h" si evaluati toate metodele clasei TScrollBar.


-83-

Pentru a grupa mai multe controale si butoane,se pot utiliza obiecte

specializate cum sunt TControlBar si TStatusBar.Pentru aceste obiecte se

utilizeaza un tip diferit de fereastra denumit TDecoratedFrame,adica o

fereastra de tip TFrameWindow care accepta si un chenar in care se poat

grupa butoanele si obiectele necesare:

EXEMPLU: (vezi si OWL_ABC / owl21 ) Editati fila .cpp astfel:

#include

#include

#include

#include

#include

#include

#include

#define IDB_BITMAP1 1

#define ID_BUTTON 110

class Fer1 : public TWindow {

Yüklə 1,36 Mb.

Dostları ilə paylaş:
1   ...   8   9   10   11   12   13   14   15   ...   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