|
Lista->AddString("patru")
|
səhifə | 12/18 | tarix | 12.09.2018 | ölçüsü | 1,36 Mb. | | #81721 |
| 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 {
Dostları ilə paylaş: |
|
|