Professional Documents
Culture Documents
Reenje:
1. Pokrenite Borland C++ Buillder tako to kliknete na Windows ikonicu kao na slici.
Speed Bar
Paleta komponenti
osnovnih
svojstava
:
Caption Tekst u zaglavlju forme.
Po uslovu zadatka prazan tekst, te obriite
polje unosa.
BorderStyles Podesite da je
Single, a to znai da se prozor aplikacije ne
moe poveavati niti smanjivati. Imae tri
dugmeta u zaglavlju kao i svaki Windows
prozor.
Width itrina prozora
Height Visina prozora
Podesite kod oba dugmeta da je Size 12 a Font style Bold i kliknite na OK.
6. Unoenje programskog koda
Programski kod se sprovodi kroz dogaaje komponente. Na osnovu teksta zadatka
ustanovi se koji dogaaj je u pitanju. U ovom primeru kae se kada se klikne na dugme
desie se promena teksta u zaglavlju prozora aplikacije. Zakljuili ste da je dogaaj
dugmeta OnClick. Oznaimo dugme, preemo na ObjectInspector i karticu Events i u
polje napravimo dupli klik. U prozoru koda ugraen je dogaaj i kursor se nalazi u telu
dogaaja. ta tu napiemo desie se prilikom dogaaja klik na dugme.
Uglavnom se deavanja odvijaju pomou operatora dodele a to je znak =.
Sa leve strane je svojstvo a sa desne strane operatora dodele vrednost koju e to
svojstvo imati.
Form1->Caption="Pismo je LATINICA";
U naredbi dodele prvo se navodi naziv komponente u ovom sluaju je to Form1 a
nakon strelice svojstvo a to je Caption. Sa desne strane operatora dodele = je tekst koji
e biti zapisan u zaglavlju forme.
Caption je svojstvo tipa string, a string predstavlja tekst koji se nalazi izmeu
znakova navoda.
Naredba se zavrava sa znakom taka zarez.
if else naredba:
if(uslov) naredba1;
else naredba2;
U uslovu se nalaze relacioni i logiki operatori. Sada su nam bitni samo relacioni operatori.
Relacioni operatori su: < (manje), > (vee), <= (manje ili jednako), >= (vee
ili jednako), == (jednako) i != (razliito).
Kao rezultat relacione operacije je vrednost: true (uslov je zadovoljen) ili false
(uslov nije zadovoljen).
Ako je potrebno osim jedne naredbe, kada je uslov zadovoljen ili nije zadovoljen, izvriti,
potrebno je koristiti blokove ili sekvence. Sekvenca ili blok je niz naredbi koji se nalaze izmeu
zagrada { }.
if(uslov)
{
Naredba1;
Naredba2;
else{
Naredba 3;
Naredba4;
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "novi_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Prilikom postavljanja dugmadi, prvo postavite jedno dugme i izvrite sva potrebna
podeavanja. Sada oznaite komponentu, napravite desni klik, izaberete opciju Edit a iz
nje Copy. Pojavie se potpuno identino dugme samo sa novim nazibvom. Na ovaj nain
smo izbegli podeavanje svojstava. Kopiranje raditi kada niste podesili dogaaje, jer e
nova kopirana komponenta posedovati i iste dogaaje kao I komponenta od koje je
kopirana.
Kopirajte i trew dugme te izvrite samo promenu natpisa kod treeg i drugog
dugmeta. Vrednosti boje slova Labele treba u kodu promeniti. To se radi tako to piemo:
Label1->Font->Color=clBlue;
Prvo se navodi komponenta, nakon strelice bira opcija Font (boja slova je u
pitanju), pa nakon strelice svojstvo Color. Svojstvo Font je sloeno svojstvo i sastoji se
int br;
Brojaka promenljiva funkcionie tako to je njena poetna vrednost nula, a kada se stekne
uslov brojanja njena vrednost se naredbom dodele uveava za jedan.
br=br+1;
Metode koje vae za sva svojstva koja su tipa AnsiString a, su StrToInt(),
IntToStr(), StrToFloat() i FloatToStr(). Funkcija StrToInt() konveruje string u
celobrojni podatak, dok IntToStr() konvertuje celobrojni podatak u AnsiString.
Slino je i sa funkcijama StrToFloat() i FloatToStr().
br = StrToInt(Label1->Caption);
Ovom naredbom konvertuje se string koji se nalazi u komponenti Label1 u tip int i
kao takav dodeljuje promenljivoj br.
Label1->Caption = IntToStr(br);
Konvertuje se celobrojni podatak iz promenljive br I smeta kao tekst komponente
Label1.
//--------------------------------------------------------------------------#include "za26_o.h"
#include <vcl.h>
#pragma hdrstop
#include "za26_o.h"
#pragma package(smart_init)
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
10
#include "SvojstvaKontrola_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
Button1->SetFocus(); //Metodom SetFocus() komponenta postaje aktivna
//Podesavamo pismo gde se nalaze cirilicna slova.
Label1->Font->Charset= RUSSIAN_CHARSET;
Label1->Font->Color=clRed; //Podesavamo boju slova.
//Ispisujemo tekst. Prilikom unosa teksta mora se kao i kod rada sa wordom podesiti
//pismo sa tas bara na Serbian (Cyrilic.) Tekst je prekopiran iz polja Caption
//ObjectInspectora, i bez obzira to su nam ovde udna slova, na komponenti slova su u redu.
Label1->Caption=" \n OM!!";
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button2->SteFocus(); //Metodom SetFocus() komponenta postaje aktivna
//Podesavamo pismo gde se nalaze latinicna //slova
Label1->Font->Charset= EASTEUROPE_CHARSET;.
Label1->Font->Color=clBlue; //Podesavamo boju slova.
//Ispisujemo tekst. Prilikom unosa teksta mora se kao i kod rada sa wordom podesiti
//pismo sa tas bara na Serbian (Latin.) Tekst je prekopiran iz polja Caption
//ObjectInspectora, i bez obzira to su nam ovde udna slova, na komponenti slova su u redu.
Label1->Caption="OVO JE JEDAN DUGAAK TEKST\nNAPISAN LATINICOM!!";
}
//--------------------------------------------------------------------------Primer 6:
Napraviti aplikaciju koja se sastoji od forme i mia oblika peanog sata sa znakom pitanja.
U zaglavlju forme nalaze se trenutne koordinate mia.
11
Reenje:
Dogajaj OnMouseMove deava se prilikom premetanja mia nad komponentom.
Dogaaj se u ovom primeru odnosi na formu. Kao argument dogaaja nalaze se i
koordinate mia X i Y koji su celobrojnog tipa int. Ispis stringa kada je potrebno to uraditi u
nekom formatu radi se naredbom Format.
Naredba format sastoji se od dva dela: prvi deo je string koji se nalazi izmeu znakova
navoda i niza konstanti. U okviru stringa nalaze se I formati. Svaki format poinje sa karakterom
% iza koga sledi slovo konverzije. Slovo d oznaava da e se izvriti konverzija celobrojnog
podatka, dok slovo f da se radi o konverziji celobrojnog podatka. Broj konstanti koji se nalaze u
nizu konstanti mora odgovarati broju formata.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "mis_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
Caption=Format("X = %d Y = %d",ARRAYOFCONST((X,Y)));
}
//--------------------------------------------------------------------------Primer 7:
Napraviti aplikaciju koja omoguava unos teksta u komponenti Edit a pritiskom na dugme
uradi tekst se kopira u novu Edit komponentu koja slui samo ya itanje podataka. Pritiskom na
dugme brisi sadraji Edit komponenti se briu.
12
Reenje:
Unos podataka vri se najee pomou komponente Edit
na kartici Standard.
Komponenta Edit poseduje neka specifina svojstva:
Text
Sadri tekst u posmatranom okviru. Njegova vrednost moe da se
postavlja za vreme projektovanja, da se promeni za vreme izvravanja
kako iz programa, tako i kao posledica onoga to korisnik otkuca sa
tastature.
CharCase
Odreuje kako e se slova predstavljati u tekstu prilikom unosa.
Mogue vrednosti su: ecNormal (slova se prihvataju onako kako se
unose sa tastature), ecUpperCase (sva slova se pretvaraju u velika) i
ecLowerCase (sva slova se pretvaraju u mala).
PaswordChar
Predstavlja znak za lozinku. Podrazumevana vrednost #0 oznaava da
se u okviru normalno prikazuje tekst koji se unosi preko tastature.
MaxLength
Odreuje najvei broj znakova koji korisnik moe da unese preko
tastature u okvir za tekst. Podrazumevana vrednost 0 oznaava da ne
postoji ogranienje.
ReadOnly
Svojstvo je tipa bool pri emu vrednost true oznaava da korisnik u
dati okvir za tekst korisnik ne moe da unese podatke preko tastature.
Modified
Svojsto je tipa bool sa vrednou true ako je sadraj okvira za tekst
menjan od stvaranja komponente, odnosno od poslednjeg postavljanja
te vrednosti na false. Ovo svojstvo je raspoloivo samo za vreme
izvravanja aplikacije.
AutoSelect
Svojstvo je tipa bool sa vrednou true ako se sadraj teksta
automatski obelei kada komponenta dobije fokus.
HideSelection
Svojstvo je tipa bool sa vrednou false ako obeleeni deo teksta
unutar okvira ostaje obeleen i kada komponenta izgubi fokus.
SelectStart
Predstavlja indeks prvog znaka u obeleenom tekstu.
SelTextt
Predstavlja obeleeni deo teksta unutar okvira za tekst.
SelLength
Predstavlja broj znakova u obeleenom delu teksta.
Komponenta Edit poseduje sledee metode:
Clear
Brie sadraj Text svojstva.
ClearSelected
Brie samo sadraj teksta koji je selektovan.
CopyToClipboard
Kopira selektovani tekst u Clipboard.
CutToClipboard
Brie selektovani tekst i kopira ga u Clipboard.
PasteFromClipboard
Kopira sadraj Clipboarda na mesto kursora.
SelectAll
Selektuje kompletan tekst.
GetSetTextBuf
Kopira selektovani tekst u zadatu promenljivu.
SetSelTextBuf Zamenjuje selektovani tekst tekstom iz zadate promenljive.
.
Osnovna svojstva komponente Button
Default
su:
Svojstvo je tipa bool. Ako svojstvo ima vrednost true pritiskom na taster
ENTER aktivira se dugme kao da smo ga kliknuli miem bez obzira koja
komponenta ima fokus. Podrazumevana vrednost ovog svojstva je false.
Koristi se kada hoemo da napravimo dugme OK.
13
Cancel
Svojstvo je tipa bool. Ako svojstvo ima vrednost true pritiskom na taster
ESC aktivira se dugme kao da smo ga kliknuli miem bez obzira koja
komponenta ima fokus. Podrazumevana vrednost ovog svojstva je false.
Koristi se kada hoemo da napravimo dugme Cancel.
Podesiti prilikom projektovanja da oba dugmeta imaju svojstvo Default na vrednost true,
dok prvo dugme ima svojstvo Enabled true a drugo false.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "drugi_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit2->Text=Edit1->Text; //Kopira se tekst iy Edita1 u Edit2 dodelom vrednosti.
//Svojstvo Enabled odredjuje da li komponenta moye imati focus. Ako je vrednost false
//nemoze //imati focus. i sive je boje. Prilikom projektovanja postavili smo da je
prvo //dugme aktivno a drugo neaktivno.
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
Edit2->Clear();
Button1->Enabled=true;
Button2->Enabled=false;
}
//--------------------------------------------------------------------------Primer 8:
Napraviti aplikaciju koja
omoguaba unos imena korisnika
aplikacije i nakon pritiska na taster
POTVRDI
predaje
korisniku
pozdravnu poruku. U sluaju da
korisnik nije uneo svoje ime umesto
pozdravne
poruke
dobija
informaciju o greci.
14
Reenje:
#pragma hdrstop
#include "Zadatak1_o.h" //Ukljucuje se heder fajl gde se nalazi klasa koja opisuje formu.
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1; //Form1 je obekat (nasa forma) koja je tipa klase TForm1.
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//Ovde se obradjuje dogadjaj misa kada se klikne na dugme Button1.
// Do tela ove funkcije dolazi se duplim klikom na komponentu Button1 koja
//je postavljena na formu.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//Programer je imao zadatak da samo obradi ovaj dogadjaj. Sve komponente
//su objekti kojima se pristupa pomocu operatora -> sto smo imali i kod
//dinamickog programiranja. Komponenta Edit1 ima svojstvo Text koje nam daje
//sadrzaj edita (da li je korisnik uneo nesto ili ne). Ako nije svojstvo Text bice
//prazan string. Pozivanjem metode ShowMessage na ekranu ce se pojaviti poruka.
//Sadrzaj koji se nalazi kao string zapisan u ovoj metodi bice prikazan.
if(Edit1->Text=="") ShowMessage("Greska!! Niste uneli svoje ime?");
else{
//Za razliku od C-a gde smo morali koristiti funkciju strcat da bi nadovezali
// jedan string na kraj drugog stringa u programskom jeziku C++ koristi se
// operator +, sto predstavlja pojednostavljenje
ShowMessage("Zdravo "+Edit1->Text+"!!");
Edit1->Text="";
}
//Nakon zatvaranja poruke potrebno je obezbediti da korisnik programa moze
// ponovno unositi novo ime To se postize tako sto komponenta Edit1 postaje
//ponovno aktivna, a programeri kazu da je ponovno dobila fokus.
Edit1->SetFocus();
}
//--------------------------------------------------------------------------Primer 9:
Napraviti aplikaciku koja omoguava samo nenjanje
podataka mree (broja vorova i broja grana) i automatsko
menjanje broja jednaina po prvom (SKZ) i drugom (NKZ)
zakonu. Menjanje CSpinEdita iskljuivo se vri pomou
strelica gore i dole. Minimalni broj vorova je 2, a maksimalni
10, korak je 1. Minimalni broj grana je 3, maksimalni 10, a
15
korak 1. Ako se desi da broj grana postane jednak sa brojem vorova vri se resetovanje oba
CSpinEdita na minimalne vrednosti.
Reenje:
Komponenta SpinEdit
slui za unoenje celobrojnih podataka, ije vrednosti mogu
da se menjaju i pritiskanjem dva mala dugmeta, koja se nalaze uz desnu ivicu okvira. Svakim
pritiskom na dugme sa strelicom nagore, vrednost u okviru se poveava, a pritiskom na dugme
nadole smanjuje, za odreenu vrednost. Komponenta se nalazi na paleti komponenti na kartici
Samples.
Bitnija svojstva koja nisu pomenuta su:
Value
Oznaava vrednost broja u okviru za tekst. Podrazumevana vrednost je 0.
U object Inspectoru njegovim podeavanjem dobija se poetna vrednost
prilikom startovanja aplikacije.
Increment
Predstavlja iznos promene svojstva Value nakon pritiskanja malih
dugmadi. Pritiskom na malo dugme sa strelicom nagore vrednost Value se
poveava za vrednost Incrementa, a pritiskanjem na malo dugme sa
strelicom nadole smanjuje za vrednost Incrementa.
MaxValue Oznaava maksimalnu vrednost broja koja moe da se nae u okviru.
MinValue
Oznaava minimalnu vrednost broja koja moe da se nae u okviru
Podrazumevana vrednost 0 oznaava da ne postoji ogranienje.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za24_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
int brc,brg;
brc=CSpinEdit1->Value; //brc je brij cvorova.
brg=CSpinEdit2->Value; //brg je broj grana
if(brc>=brg)
{
ShowMessage("Broj grana mora biti ve'i od broja cvorova!!");
CSpinEdit1->Value=CSpinEdit1->MinValue;
CSpinEdit2->Value=CSpinEdit2->MinValue;
}else{
16
Label5->Caption=IntToStr(brc-1);
Label6->Caption=IntToStr(brg-brc+1);
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Doga]aj se desava prilikom kreiranja forme
//Podesava se tekst yaglavlja ShowMessage dialoga.
Application->Title="GRESKA..."; }
//--------------------------------------------------------------------------Primer 10:
Napisati aplikaciju koja omoguava unos dva operanda i izraunava njihov zbir. U polje
Edit komponente koja je ute boje treba upisati rezultat ili poruku da neki od operanada nije
unesen i toj komponenti dati fokus.
Reenje:
if naredba:
if(uslov) naredba;
Ako je potrebno osim jedne naredbe, kada je uslov zadovoljen, izvriti, potrebno je koristiti
blokove ili sekvence. Sekvenca ili blok je niz naredbi koji se nalaze izmeu zagrada { }.
if(uslov)
{
Naredba1;
Naredba2;
17
}
Aritmetiiki operatori su: + (sabiranje), - (oduzimanje), * (mnoenje), /
(deljenje), % (ostatak prilikom celobrojnog deljenja).
18
return;
}
//Da neki od podataka nije unesen naredbom return bi se izaslo iz dogadjaja. Kako to
nije //slucaj moze se izvrsiti konverzija podataka iz stringa u broj tipa float. Funkcija
StrToFloat //vrsi konverziju stringa zapisanog kao parametar poziva funkcije u broj i
dodelom se //prosledejuje odgovarajucoj //promenljivoj tipa float.
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
c=a+b;
Edit3->ReadOnly=false;
Edit3->Text=FloatToStr(c); //Konvertuje se broj u string i upisuje u Edit komponentu.
Edit3->ReadOnly=true;
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";// Oznaka "" predstavlja prazan string, odnosno nema teksta.
Edit2->Text=""; //Na taj nacin se brise sadrzaj Edit komponente.
Edit3->ReadOnly=false;
Edit3->Text="";
Edit3->ReadOnly=true;
Button2->Enabled=false;
Button1->Enabled=true;
Edit1->SetFocus();
}
//-------------------------------------------------------------------------Primer 11:
Napraviti aplikaciju koja predstavlja demonstraciju Omovog zakona iy predmeta osnove
elektrotehnike. Realizacija zadatka je slina sa ptolim zadatkom stim to je ovde posebnom
Labelom crvene boje predstavljen Omov zakon. Na pon se unosi u voltima a struja u mili
amperima. Rezultat se ispisuje u kilo oma.
19
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Om_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="" && Edit2->Text=="")
{
ShowMessage("Niste uneli napon i struju!!");
Edit1->SetFocus();
return;
}
if(Edit1->Text=="")
{
ShowMessage("Niste uneli napon!!");
Edit1->SetFocus();
return;
}
if(Edit2->Text=="")
{
ShowMessage("Niste uneli struju!!");
Edit2->SetFocus();
return;
}
float u,i,r;
u=StrToFloat(Edit1->Text);
i=StrToFloat(Edit2->Text);
if(u<=0)
{
ShowMessage("Podatak mora biti pozitivan!!");
Edit1->SetFocus();
20
return;
}
if(i<=0)
{
ShowMessage("Podatak mora biti pozitivan!!");
Edit2->SetFocus();
return;
}
r=u/i;
Label6->Caption=Format("%.2f",ARRAYOFCONST((r)));
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
Edit2->Text="";
Label6->Caption="";
Button1->Enabled=true;
Button2->Enabled=false;
}
//------------------------------------------------------------------Primer 12:
21
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Form1->Color==clGreen) Form1->Color=clWindow;
else Form1->Color=clGreen;
}
//--------------------------------------------------------------------------void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
Label1->Font->Size=CSpinEdit1->Value;
}
//--------------------------------------------------------------------------Primer 13:
Napraviti aplikaciju koja kada se pokrene ima oblik dijalokog prozora sa tri Edit
komponente u nizu izmeu kojih se nalaze dve Labele crvene boje sa po jednim znakom
pitanja. Klikom na dugme RADI koje je aktivno ili pritiskom na taster Enter umesto
znakova pitanja pojavljuje se odgovarajui znak poreenja; =, > ili <.
U programu pistoji zatita od ne unesenog podatka, tako to se orva komponenta
gde ppodatak nije unesen oboji u crven u boju. Klikom na tu komponentu crvene boje
nestaje.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Poredi_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
22
23
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit1->Color=clWhite;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit2Change(TObject *Sender)
{
Edit2->Color=clWhite;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit3Change(TObject *Sender)
{
Edit3->Color=clWhite;
}
//--------------------------------------------------------------------------Primer 14:
Napraviti aplikaciju koja predstavlja tablicu mnoenja. U
zaglavlju aplikacije stoji natpis TABLICA MNOZENJA.
Aplikacija se sastoji od deset Labela i jednog CspinEdita. Na prvoj
labeli iji je font 18 crne boje, a preostalih devet Labela su fonta
14 zelene boje.
CspinEdit ima poetnu vrednost 1, minimalnu vrednost 1, a
maksimalnu 9, stim to je i korak uveanja.
Prilikom startovanja aplikacije prikazana je tablica mnoenja
za broj 1.
Za komponentu CspinEdit potrebno je obraditi i dogaaj
OnClhange koji reaguje na promenu vrednosti u polju Edit
komponente klikom na strelice..
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Tablica.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
24
Primer 15:
Napraviti aplikaciju koja omoguava unos dva
operanda pomou komponenti Edit, a potom
izraunava operacije sabiranja, oduzimanja, mnoenja,
deljenja, ostatak prilikom celobrojnog deljenja i
poreenja. Prilikom poreenja izmeu operanada a i b
potrebno je staviti odgovarajui znak: >,< ili =.
Reenje:
#include <vcl.h>
#pragma hdrstop
#include "ljubica.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a,b,rez;
float rez1;
AnsiString s;
if(Edit1->Text==""&&Edit2->Text=="")
{
25
26
Label15->Caption=s;
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label9->Caption="???";
Label11->Caption="???";
Label10->Caption="???";
Label12->Caption="???";
Label4->Caption="???";
Label15->Caption="?";
Edit1->Text="";
Edit2->Text="";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------Primer 16:
Napraviti aplikaciju koja pokazuje kako se
pravi transparentnost. Na formi se nalaze dva
dugmeta. Na jednom je natpis plus, a na drugom
minus. Sa dugmetom plus Klikom na dugme plus
providnost se smanjuje sve dok ne postane
neprovidan i tada dugme postaje neaktivno.
Klikom na dugme minus providnost se poveava
sve dok ne postane totalno providan i tada dugme
postaje neaktivno.
Reenje:
Za reavanje ovog zadatka potrebno je poznavati sledea svojstva:
AlphaBlend
- Ako ima vrednost false forma je uvek neprovidna, a ako ima
vrednost true providnost forme se moe promeniti.
AlphaBlendValue
- Ima vrednost od 0 do 255 pri emu ako je 255 forma je
neprovidna.
promenljiva = izraz
promenljiva op=izraz
Promenljiva predstavlja simboliko ime adrese memorijske lokacije. U sluaju proste
operacije dodele promenljiva=izraz prvo se izraunava vrednost izraza pa se zatim direktnim
27
28
{
Button2->Enabled=false;
}else{
Form1->AlphaBlendValue-=25;
Button2->Enabled=true;
}
}
//--------------------------------------------------------------------------Primer 17:
Napraviti aplikaciju koja u zaglavlju forme nalazi
tekst KOORDINATE MISA. Forma je bele boje,. U
gornjem levom ugu nalazi se Labela iji je font 24
podebljan i plave boje, a predstavlja X koordinatu mia na
formi. U donjem desnom uglu nalazi se Labela koja sadri
Y koordinatu mia na formi, a ima iste karakteristike
gornje Labele. Na srednini nalazi se Labela sa fontom 48
crvene boje i teksta MIS. Labele koje sup lave boje uvek
sadre tri cifre, a ako je broj manji od stio prva cifra je
nula, a ako je broj manji od deset prve dve cifre su nula.
Svakim pomeranjem mia bilo gde na formi ili na nekoj od Labela moraju xse menjati coordinate
mia, a time i ispisi na Labelama.
Reenje
U ovoj aplikaciji koristie se dogaaj OnMouseMove, koji predstavlja dogaaj premetanja
mia. Kako se isto ponaanje aplikacije ili prikazivanje koordinata mia oekuje ne samo
prelaskom miem nad formom ve i prilikom prelaska miem nad labelama, da bi se to desilo
potrebnon je napisati isti kod i za dogaaje OnMouseMove nad formom.
Okruenje je omoguilo da se to ne mora raditi, ve se labelama samo prosledi dogaaj
OnMouseMove nad formom. Prosleivanje se vri tako to se u ObjectInspectoru kod dogaaja
OnMouseMove kod labela upie isto ime dogaaja kao i ime dogaaja OnMouseMove nad
formom, koji ste predhodno realizovali.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za22_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
29
if(X<10) Label1->Caption="00"+IntToStr(X);
else{
if(X<100) Label1->Caption="0"+IntToStr(X);
else Label1->Caption=IntToStr(X);
}
if(Y<10) Label2->Caption="00"+IntToStr(Y);
else{
if(Y<100) Label2->Caption="0"+IntToStr(Y);
else Label2->Caption=IntToStr(Y);
}
}
//--------------------------------------------------------------------------Primer 18:
Napraviti aplikaciju koja se sastoji od dve Edit
komponente. U prvoj se vri samo unos teksta.
Pritiskom na dugme Paste tekst se iz prvog Edita
kopira u drugi Edit.
Na forni postoje sedam dugmadi: SelectAll
selektuje tekst koji se nalazi u prvom Editu, UPLower
pretvara tekst iz velikih u mala slova, LowerUp
pretvara tekst iz malih u velika slova, Copz kopira
tekst iz prvog Edita u Cliboard, Cut katuje tekst iz
prvog Edita u Cliboard, Paste prebacuje tekst iz
Cliboarda u drugi Edit i Clerar brie sadraj prvog i
drugog Edita.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "RadEdit_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Modified==false)
{
ShowMessage("Nema se sta selektovati!!");
Edit1->SetFocus();
return;
30
}
Edit1->SelectAll(); //Vrsi se selektovanje teksta u Edit komponenti.
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(Edit1->Modified==false)
{
ShowMessage("Nema se sta pretvarati u velika slova!!");
Edit1->SetFocus();
return;
}
Edit1->CharCase=ecLowerCase; //Pretvaraju se sva slova Edit komponente u mala.
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(Edit1->Modified==false)
{
ShowMessage("Nema se sta pretvarati u mala slova!!");
Edit1->SetFocus();
return;
}
Edit1->CharCase=ecUpperCase; //Pretvaraju se sva slova Edit komponente u velika.
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(Edit1->Modified==false)
{
ShowMessage("Nema se sta kopirati!!");
Edit1->SetFocus();
return;
}
Edit1->CopyToClipboard(); //Vrsi se kopiranje sadrzaja Edit komponente u cliboard.
Button6->Enabled=true;
Button5->Enabled=false;
Button4->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button5Click(TObject *Sender)
{
if(Edit1->Modified==false)
{
ShowMessage("Nema se sta iseci!!");
Edit1->SetFocus();
return;
}
31
32
manjem, sadri vrednost apoena novanice i koliko je novanica dato prilikom isplate. Ako apoen
novanice nije dat prilikom isplate nee ga biti u izvetaju.
Klikom na dugme BRISI vraa se sve u prvobitno stanje i brise se sadraj Memo
komponente. Postoji zatita od neunosa vrednosti isplate i tada se komponenta za unos boji
crvenom bojom. Klikom na komponentu za unos boja se ponovno vraa u belo. Komponenta
Memo moe sluiti samo za prikaz izvetaja ali ne i za neko menjanje od strane korisnika
aplikacije.
Reenje
Komponenta Memo
je slina komponenti Edit s tim to za razliku od komponente
Edit slui za unos teksta u vie linija. Glavna mana je to moe prikazati samo jednu vrstu slova u
jednom trenutku. Komponenta Memo nalazi se na paleti komponenti na kartici Standard.
Komponenta Memo za razliku od komponente Edit ne poseduje svojjstvo AutoSelect, ali
poseduje sva ostala svojstva komponente Edit kao i svojstva:
Lines
Alignment
WorWrap
ScrollBars -
Klasa Tstrings odnosi se na niz iji su elementi tipa String. Vrednosti elemenata niza
mogu da se uzimaju i neposredno menjaju u toku izvravanja programa. Na primer komponenta
Memo ima svojstvo Lines koje je tipa Tstrings. Pristup k-tom redu komponente Memo vri se sa:
s=Memo->Lines->Strings[k-1];
Broj elemenata niza nalazi se u svojstvu Count i raspoloivo je samo za vreme izvravanja
aplikacije i ne moe se neposredno menjati iz programa. Stringovi (redovi) se mogu menjati iz
programa. Najvanije metode klase TStrings su:
Add
Smeta se tekst kao novi red i vrednost Count-a se poveava za
jedan. Ako je lista neureena dodavanje se vri na kraj liste, a
u suprotnom na mesto da lista i dalje ostane sortirana u
abecednom redosledu.
Insert
Vri se umetanje teksta u niz stringova na mesto gde je to
odreeno indeksom.
Move
Vri se pomeranje reda sa jedne na drugu poziciju. Moe da se
primenjuje samo za neureene liste.
Delete
Izbacuje se red iz niza stringova sa odreenog indeksa.
Clear
Briu se svi redovi iz niza stringova.
LoadFromFile
ita se tekst iz tekstualne datoteke i smeta u niz stringova.
SaveToFile
Snima se niz stringova u tekstualni fajl.
//--------------------------------------------------------------------------#include <vcl.h>
33
#pragma hdrstop
#include "Isplata_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
Edit1->Color=clRed;
return;
}
int novac=StrToInt(Edit1->Text);
if(novac<=0)
{
ShowMessage("Podatak mora biti pozitivan!!");
Edit1->Clear();
Edit1->SetFocus();
return;
}
int pom;
pom=novac/5000;
if(pom!=0)
{
Memo1->Lines->Add("5000din\t\t"+IntToStr(pom));
novac=novac%5000;
}
pom=novac/1000;
if(pom!=0)
{
Memo1->Lines->Add("1000din\t\t"+IntToStr(pom));
novac=novac%1000;
}
pom=novac/500;
if(pom!=0)
{
Memo1->Lines->Add("500din\t\t"+IntToStr(pom));
novac=novac%500;
34
}
pom=novac/200;
if(pom!=0)
{
Memo1->Lines->Add("200din\t\t"+IntToStr(pom));
novac=novac%200;
}
pom=novac/100;
if(pom!=0)
{
Memo1->Lines->Add("100din\t\t"+IntToStr(pom));
novac=novac%100;
}
pom=novac/50;
if(pom!=0)
{
Memo1->Lines->Add("50din\t\t"+IntToStr(pom));
novac=novac%50;
}
pom=novac/20;
if(pom!=0)
{
Memo1->Lines->Add("20din\t\t"+IntToStr(pom));
novac=novac%20;
}
pom=novac/10;
if(pom!=0)
{
Memo1->Lines->Add("10din\t\t"+IntToStr(pom));
novac=novac%10;
}
pom=novac/5;
if(pom!=0)
{
Memo1->Lines->Add("5din\t\t"+IntToStr(pom));
novac=novac%5;
}
pom=novac/2;
if(pom!=0)
{
Memo1->Lines->Add("2din\t\t"+IntToStr(pom));
novac=novac%2;
}
35
pom=novac;
if(pom!=0)
{
Memo1->Lines->Add("1din\t\t"+IntToStr(pom));
}
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Memo1->Lines->Clear();
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//-----------------------------------------------------------------------Primer 20:
Napraviti aplikaciju koja prilikom startovanja ima izgled kao
na slici..
Kada se pritisne dugme UGASITI SVETLO pojavljuje se
slika gde je svetlo uaeno a na natpisu dugmeta pojavljuje se natpis
UPALITI SVETLO i obrnuto.
Reenje
Komponenta Image
je komponenta bez prozora u koju mogu da se smeste slike.
Komponenta Image nalazi se na paleti komponenti na kartici Additional. Mogu se koristiti etiri
standardna formata za slike: *.ico, bitmapirana slika *.bmp, metadatoteke *.wmf i komprimovane
slike u JPEG formatu *.jpg i *.jpeg.
Bitnija svojstva koja nisu pomenuta su:
Center
Svojstvo je tipa bool i odreuje nain poravnavanja slike u odnosu na
komponentu. Podrazumevana vrednost je false oznaava poravnavanje
prema gornjem levom uglu, a true podrazuumeva centrirano smetanje.
AutoSize Svojstvo je tipa bool pri emu vrednost true oznaava da se veliina
komponente automatski prilagoava veliini slike koja se u nju stavlja.
Stretch Svojstvo je tipa bool, a vrednost
true oznaava da se dimenzija slike
prilagoava veliini komponente ako je
vrednost svojstva AutoSize ima vrednost false.
Slika e u celini biti vidljiva sa proporcionalno
izmenjenim dimenzijama. Ako oba svojstva
imaju vrednost false, deo komponente e ostati
prazan ukoliko je slika manja od komponente,
odnosno deo slike e biti odseen ako je ako je
36
37
#include <vcl.h>
#pragma hdrstop
#include " Zadatak4_o.h "
//--------------------------------------------------------------------------//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Button1->Caption=="UGASITI SVETLO")
{
Button1->Caption="UPALITI SVETLO";
//Louduje se novi fajl sa slikom
Image1->Picture->LoadFromFile("UGASILO.BMP");.
}else{
Button1->Caption="UGASITI SVETLO";
//Louduje se novi fajl sa slikom
Image1->Picture->LoadFromFile("UPALILO.BMP");
}
}
//--------------------------------------------------------------------------Primer 21:
Napraviti aplikaciju koja vri zamenu dve slike. Iznad prve slike nalazi se Labela sa
natpisom Prva slika a iznad druge Labela sa natpisom Druga slika. Klikom na dugme ZAMENA
slike i Labele menjaju mesta.
38
Reenje:
Ime komponente je string. Sve komponente unutar iste forme moraju imati
razliita imena. U razliitim formama mogu da postoje istoimene
komponente. Ime komponente ne treba menjati za vreme izvravanja
aplikacije.
Showing
Da bi se data komponenta u datom trenutku prikazuje na ekranu, moe se
doznati na osnovu svojstva Showing (prikazuje se), koje je tipa bool.
Vrednost true oznaava da se komponenta trenutno vidi na ekranu, a false
da se ne vidi. Ovo svojstvo je raspoloivo samo za vreme izvravanja
aplikacije i ne moe neposredno da se menja iz programa.
Visible
Sa ovim svojstvom kontrolie se vidljivost komponente i tipa je bool. Ako
svojstvo ima vrednost true komponentu treba prikazivati na ekranu, pod
uslovom da je i njen roditelj vidljiv na ekranu. Ako svojstvo ima vrednost
false komponentu ne treba prikazivati na ekranu. Ako se neka kontejnerska
komponenta uini nevidljivom i sva njena deca bie nevidljiva.
Enabled
Svojstvo je tipa bool i oznaava da li komponenta moe dobiti fokus. Ako
je vrednost ovog svojstva true komponenta moe imati fokus i upotrebljiva
je. Kad su neupotrebljive komponente su blee boje u odnosu na
upotrebljive. Ako se neka kontejnerska komponenta uini neupotrebljivom,
sva njena deca postaju neupotrebljiva, ali se ne prikazuju bledo. Vrednost
ovog svojstva moe da se postavlja za vreme projektovanja i da se promeni
za vreme izvravanja aplikacije.
Top
Udaljenost gornjeg levog temena komponente u odnosu na gornju ivicu
radnog prostora roditelja posmatrane komponente.
Left
Udaljenost gornjeg levog temena komponente u odnosu na levu ivicu
radnog prostora roditelja posmatrane komponente.
Height
Visina komponente.
Width
irina komponente.
ClientHeight
Visina radnog prostora komponente. Radni prostor predstavlja deo
prozora bez okvira, trake sa natpisom i trake menija.
ClientWidth
Visina radnog prostora komponente.
Constraints
Ovo svojstvo predstavlja ogranienja veliine, tj. graniene vrednosti
(visina i irina) u okviru kojih mora de se nae komponenta.
Constraints je objekat tipa klase TSizeConstraints.
MinHeight Najmanja visina.
MaxHeight Najvea visina.
MinWidth
Najmanja irina.
MaxWidth Najvea irina.
Align
Sa ovim svojstvom odreuje se automatsko menjanje veliine komponente
ako se promeni veliina njihovog roditelja..
alNone
Ovo je podrazumevana vrednost, gde komponenta zadrava
trenutnu veliinu i poloaj u odnosu na gornji levi ugao radnog
prostora i svog roditelja.
39
alTop
40
ShowHint
Hint
ParentShowHint
ParentColor
Font -
41
Kod aplikacije:
U dogaaju OnClivk dugmeta potrebno je izvriti promenu poloaja slika, tj zamenu
poloaja slika. Poloaj slika predstavlja poloaj komponenti Image gde se slike nalaze.
Poloaj komponente odreen je svojstvima Top i Left. Kako je svojstvo Top isto kod obe
komponente u aplikaciji, to je potrebno izvriti zamenu vrednosti samo svojstava Left.
Ako bi koristili naredbe
Image1->Left=Image2->Left;
Image2->Left=Image1->Left;
Zamena se nee izvriti. Ako je Image1->Left=100, a Image2->Lef=300, nakon prve
naredbe je Image1->Left=300 i Image2->Left=300. Ovim smo izgubili prethodni poloaj prve
komponente, te e nakon druge naredbe biti takoe Image1->Left=300 i Image2->Left=300.
Znai videe se samo jedna slika, jer su komponente postavljene jedna preko druge.
Da bi se problem reio potrebno je uvesti pomonu promenljivu koja e imati zadatak da
zapamti prvo vrednost poloaja Left prve komponente pre nego to se izvri naredba
Image1->Left=Image2->Left;
Kako je svojstvo Left tipa int to i pomona promenljiva mora biti tipa int.
42
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Zamena.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int pom;
pom=Label1->Left; //Pamti polozaj prve labele
Label1->Left=Label2->Left; //Prva labela ima polozaj gde i druga labela
Label2->Left=pom; //Polozaj druge labele je gde je ranije bila prva labela.
pom=Image1->Left; //Pamti polozaj prve slike
Image1->Left=Image2->Left; //Prva slika ima polozaj gde i druga slika
Image2->Left=pom; //Polozaj druge slike je gde je ranije bila prva slika.
}
//--------------------------------------------------------------------------Primer 22:
Napraviti aplikaciju koja omoguava
izraunavanje obima i povrine kvadrata na
osnovu unete duine stranice. Program
prijavljuje greku ako je prilikom unosa stranice
unesen negativan broj, ili se hoe izraunati
obim i povrina a da nije unesen podatak kolika
je duina stranice kvadrata i komponenta gde se
vri unos dobija fokus.
Kada se naie na dugme RACUNAJ
ispisuje se titl. Klikom na dugme ili pritiskom na
ENTER izraubnavaju se traeni podaci.
Dugme RACUNAJ se aktivira i pritiskom na
taster ENTER.
Reenje
#include <vcl.h>
43
#pragma hdrstop
#include "Dugmadi_o.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
double a=0,o=0,p=0;
AnsiString s;
if(Edit1->Text=="")
{
//Podesavamo natpis u zaglavlju ShowMesage-a.
Application->Title=" G R E S K A";
ShowMessage("Niste uneli podatak!!");
Edit1->SetFocus();
}else{
a=StrToFloat(Edit1->Text); //Konvertujemo string u podatak.
if(a<0)
{
ShowMessage("Stranica ne moze biti negativna!!");
Edit1->Text="";
Edit1->SetFocus();
}else{
p=a*a;
o=4*a;
s=FloatToStr(o);
Label4->Caption=FloatToStr(o); //Konvertuje se double podatak u string.
Label5->Caption=FloatToStr(p); //Konvertuje se double podatak u string.
//kako bi se mogao prikazati na ekranu.
}
}
}
//--------------------------------------------------------------------------Primer 23:
Napraviti aplikaciju koja omoguava pregled deset slika. Slike se nalaze u istom folderu
gde i projekat aplikacije. Slike su u JPG formatu a imena su numerisana brojevima od 1 do 10.
Nakon prikaza desete slike pojavljuje se prva slika. Menjanje slike vri se pritiskom na
taster ENTER ili klikom na sliku. Veliina slike je prilagoena komponenti Image.
44
Reenje
Da bi se menjanje slike izvrilo potrebno je na formu postaviti dugme. Dugme se podesi da
je svojstvo default na vrednosti true. Formu potom smanjimo i postavuimo svojstvo BordersStyl
da je bsSingle to onemoguava irenje forme. Dugme se time nee videti. Sada realizujemo
dogaaj klik na dugme. Ime ovog dogaaja upisujemo kao ime dogaaja klik komponente
Image1, time se dogaaj klik od dugmeta prosleuje na dogaaj klik od Image komponente.
Znai kada se klikne na sliku poziva se dogaaj klik na dugme.
#include <vcl.h>
#pragma hdrstop
#include "Slike_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k=1; //Promenljiva kojom kontrolisemo koja je slika po redu.
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(k<10) k++; //Prelayimo na sledecu sliku.
else k=1; //Posle desete slike prelazimo na prvu sliku.
//Povezivanje komponente sa slikom na osnovu imena fajla slike.
Image1->Picture->LoadFromFile(IntToStr(k)+".jpg");
}
//---------------------------------------------------------------------------
45
Primer 24:
Napraviti aplikaciju koja na osnovu
unetog racionalnog broja x rauna i prikazuje
vrednost promenljive y po formuli:
2 x + 1; x < 2
y = x 2;
2 x 2
x 1;
x >2
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "fun_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
ShowMessage("Niste uneli podatak!!");
return;
}
float x,y;
x=StrToFloat(Edit1->Text);
if(x<-2) y=-2*x+1;
else{
if(x<=2)y=x-2;
else y=x-1;
}
Edit2->Text=FloatToStr(y);
Button1->Enabled=false;
Button2->Enabled=true;
}
//---------------------------------------------------------------------------
46
x + 1; x 0
2
1
y=
; 1 x < 2
x
x
x>5
x 1;
Tamo gde se ne moe izraunati vrednost y na osnovu vrednosti x napisati na izlazu
da funkcija nije definisana. Ako podatak nije unesen polje unosa postaje crvene boje.
Bilo kakva promena polja unosa uslovljava da polje unosa ponovo postaje bele boje.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "funkcija_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
47
Edit1->Color=clRed;
return;
}
float x,y;
x=StrToFloat(Edit1->Text);
if(x==1 || (x>0&&x<1) || (x>=2&&x<=5))
{
Edit2->Text="Funkcija nije definisana!!";
}else{
if(x<=0) y=-x+1;
if(x>=1 && x<2) y=2/x-1/(x-1);
if(x>5) y=x-1;
Edit2->Text=Format("%.3f",ARRAYOFCONST((y)));
}
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit1->Color=clWhite;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->Clear();
Edit2->Clear();
Edit1->SetFocus();
}
//-------------------------------------------------------------Primer 26:
Napraviti aplikaciju koja omoguava unos broja i
utvruje tip broja: PARAN ili NEPARAN.
Odgovor prikazati u posebnom polju koji slui samo
za itanje podataka. Ako se ne unese podatak u polju
prikaza odgovora pisae: Nema broja!! a polje unosa
postae crvene boje. Bilo kakva promena nad poljem
unosa uslovie da ono postane ponovo bele boje.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
48
#include "parnost_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
Edit2->Text="Nema broja!!";
Edit1->Color=clRed;
Edit1->SetFocus();
}else{
int broj;
broj=StrToInt(Edit1->Text);
if(broj%2) Edit2->Text="NEPARAN";
else Edit2->Text="PARAN";
}
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit1->Color=clWhite;
}
//---------------------------------------------------------------------------
49
Primer 27:
Napraviti aplikaciju koja demonstrira
operacije inkrementiranja i dekrementiranja u
prefiksnoj i postfiksnoj notaciji. Kroz
komponentu Memo prikazati nakon svakog
izraza stanja dve promenljive nad kojima se
operacije inkrementiranja i dekrementiranja
primenjuju.
Reenje
50
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="" || Edit2->Text=="")
{
ShowMessage("Niste uneli oba podatks!!");
if(Edit1->Text=="") Edit1->SetFocus();
else Edit2->SetFocus();
}else{
int a,b,rez;
a=StrToInt(Edit1->Text);
b=StrToInt(Edit2->Text);
Memo1->Lines->Add("a = "+IntToStr(a));
Memo1->Lines->Add("b = "+IntToStr(b));
Memo1->Lines->Add("*************");
rez=a++ + b++;
Label7->Caption=IntToStr(rez);
Memo1->Lines->Add("a = "+IntToStr(a));
Memo1->Lines->Add("b = "+IntToStr(b));
Memo1->Lines->Add("*************");
rez=++a + ++b;
Label8->Caption=IntToStr(rez);
Memo1->Lines->Add("a = "+IntToStr(a));
Memo1->Lines->Add("b = "+IntToStr(b));
Memo1->Lines->Add("*************");
rez=a-- + b--;
Label9->Caption=IntToStr(rez);
Memo1->Lines->Add("a = "+IntToStr(a));
Memo1->Lines->Add("b = "+IntToStr(b));
Memo1->Lines->Add("*************");
rez=--a + --b;
Label10->Caption=IntToStr(rez);
Memo1->Lines->Add("a = "+IntToStr(a));
Memo1->Lines->Add("b = "+IntToStr(b));
Memo1->Lines->Add("*************");
Button1->Enabled=false;
Button2->Enabled=true;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
51
Edit1->Clear();
Edit2->Clear();
Memo1->Lines->Clear();
Label7->Caption="????";
Label8->Caption="????";
Label9->Caption="????";
Label10->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title="GRESKA...";
}
//--------------------------------------------------------------------------Primer 28:
Napraviti aplikaciju koja omoguava unos etiri
celobrojna podatka, a potom odreuje sredbju vrednost
pozitivnih meu njima.
Rezultat je potrebno zaokruiti na etiri
decimale.
Reenje
Operator zarez
Operator zarez omoguava da kod bude itljiviji
jer se vie izraza moe pisati u istom redu.
Na primer:
Niz izraza
a = 3;
b = 4;
c = a + b;
moe se ekvivalentno napisati primenom operatora zarez u jednom redu
a = 3, b = 4, c = a + b;
Cast operator
Cast operator se koristi za eksplicitno pretvaranje jednog tipa promenljive (ili izraza) u neki
drugi tip. To je unaran operator. Opti oblik cast operatora je:
(tip) izraz
gde je tip neki od moguih tipova podataka programskog jezika C.
Na primer:
52
Napisati deo C programa koji omoguava da se na osnovu dva uneta celobrojna parametra
a i b, linearne jednaine a x + b = 0 , izraunava reenje i rezultat upisuje u promenljivu x tipa
double.
reenje
int a,b;
double x;
x = -b/a;
Napisano reenje nije tano, jer ako je vrednost promenljive a = 2, a promenljive b = 5,
nakon ovog izraza vrednost promenljive x = -2. To je iz razloga to su a i b celobrojnog tipa te e
i rezultat deljenja biti celobrojnog tipa i time se automatski izvrilo odsecanje decimalnog dela, te
se takav dodelio promenljivoj x.
int a,b;
double x;
x = -(double) (b/a);
Napisano reenje nije tano jer se zbog prioriteta zagrada izvrava prvo operacija
celobrojnog deljenja, pa se tek tada rezultat (ve sa odseenim decimalnim delom) dodeljuje
promenljivoj x. Dobili smo isto reenje kao u prolom sluaju.
int a,b;
double x;
x = -(double) b/a;
Ovo reenje je ispravno jer se primenom cast operatora promenljiva b eksplicitno
konvertovala iz tipa int u tip double, na taj nain e i rezultat deljenja biti double i promenljiva x
e imati vrednost x = -2.5.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "maxcetiri_o.h"
#include <string.h>
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
53
54
Primer 29:
Napraviti
aplikaciju
koja
demonstrira dodavanje teksta u odreeni
red Memo komponente.
Pritiskom na dugme DODAJ u
komponentu memo upisuje se tekst iz
polja unosa na indeks (red - 1) koji se
nalazi u drugom polju unosa povezanim sa
komponentom UpDown.
Pritiskom na dugme BRISANJE
brie se celokupni sadraj Memo
komponente.
Reenje
Komponenta UpDown
nalazi se na kartici Win32 i predstavlja broja. Pritiskom na
gornje dugme vrednost brojaa se uveava, a pritiskom na donje umanjuje. Za prikazivanje
vrednosti brojaa, brojau se pridruuje druga komponenta pomou svojstva Associate.
Osnovna svojstva su:
AlignButton Odreuje sa koje strane e se broja nalaziti (udRight i udLeft).
Orientation Odreuje kako su dugmadi poreani (udVertical i udHorisontal).
Position Vrednost ovog svojstva automatski se menja kad god se klikne na neko dugme
Increment Predstavlja korak poveanja. Podrazumevana vrednost je 1.
Arrowkeys je tipa bool pri emu vrednost true oznaava da se vrednost moe menjati i sa
strelicama na tastaturi.
Min Maksimalna vrednost brojaa.
Max Minimalna vrednost brojaa.
Wrap tipa je bool i sa vrednou true dalji pokuaji sa gornjom strelicom nee
poveavati vrednost od Max, a takoe daljnim pritiskom na strelicom na dole nee
smanjivati vrednost manje od Min-a.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "dodaj_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
UpDown1->Max=Memo1->Lines->Count;
}
//---------------------------------------------------------------------------
55
56
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit2->Text=Edit1->Text;
}
//---------------------------------------------------------------------------
Primer 31:
U pogonima jednog preduzea na vie mernih mesta utvrivan je radni uinak pojedinanih
smena. Uinak je izraen u broju proizvoda koje je smena napravila tog dana. Radi zatite
podataka podaci su smeteni u esnaestobitne rei sledeeg izgleda:
15
0
0
1
= Smena
=
1
1
Merno mesto
1
=
0
0
1
Broj proizvoda
0
0
=
57
58
Button2->Enabled=true;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Label5->Caption="????";
Label6->Caption="????";
Label7->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------Primer 32:
Napraviti aplikaciju koja omoguava unos stranica trougla i prikayuje tip trougla:
JEDNAKOKRAKI, JEDNAKOSTRANIAN ili NEJEDNAKOSTRANIAN.
Reenje:
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "trougao_o.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a=0,b=0,c=0,s=0,p=0;
59
if(Edit1->Text==""&&Edit2->Text==""&&Edit3->Text=="")
{
ShowMessage("NISTE UNELI SVE TRI STRANICE!!");
Edit1->SetFocus();
return;
}
if(Edit1->Text==""&&Edit2->Text==""&&Edit3->Text!="")
{
ShowMessage("NISTE UNELI PRVU I DRUGU STRANICU!!");
Edit1->SetFocus();
return;
}
if(Edit1->Text==""&&Edit2->Text!=""&&Edit3->Text=="")
{
ShowMessage("NISTE UNELI PRVU I TRECU STRANICU!!");
Edit1->SetFocus();
return;
}
if(Edit1->Text!=""&&Edit2->Text==""&&Edit3->Text=="")
{
ShowMessage("NISTE UNELI DRUGU I TRECU STRANICU!!");
Edit2->SetFocus();
return;
}
if(Edit1->Text==""&&Edit2->Text!=""&&Edit3->Text!="")
{
ShowMessage("NISTE UNELI PRVU STRANICU!!");
Edit1->SetFocus();
return;
}
if(Edit1->Text!=""&&Edit2->Text==""&&Edit3->Text!="")
{
ShowMessage("NISTE UNELI DRUGU STRANICU!!");
Edit2->SetFocus();
return;
}
if(Edit1->Text!=""&&Edit2->Text!=""&&Edit3->Text=="")
{
ShowMessage("NISTE UNELI TRECU STRANICU!!");
Edit3->SetFocus();
return;
}
a=StrToFloat(Edit1->Text);
60
b=StrToFloat(Edit2->Text);
c=StrToFloat(Edit3->Text);
if (a<0 || b<0 || c<0) Label6->Caption="NEKI OD UNOSA JE NEGATIVAN!";
else{
if((a+b)<=c || (a+c)<=b || (b+c)<=a)
Label6->Caption="OVAKAV TROUGAO JE NEMOGUC!";
else{
if(a==b && b==c)
Label6->Caption="TROUGAO JE JEDNAKOSTRANICAN!";
else{
if(a!=b && b!=c)
Label6->Caption="TROUGAO JE NEJEDNAKOSTRANICAN!";
else Label6->Caption="TROUGAO JE JEDNAKOKRAKI!";
}
}
}
}
//--------------------------------------------------------------------------Primer 33:
Napraviti aplikaciju koja se sastoji od
dva polja, prvi za unos teksta, a drugi za
prikaz kopije teksta. Drugo polje je sive boje i
iz njega se moe samo itati sadraj. Na formi
se nalaze i tri dugmeta koja su neaktivna
prilikom startovanja aplikacije. im se
promeni sadraj prvog unosa (tj polje sadri
neki tekst) aktivira se dugme KOPIJA i
dugme BRISANJE. Klikom na dugme
KOPIJA tekst prvog polja se upisuje u drugo
polje i dugme ZAMENA postaje aktivno.
Klikom na dugme ZAMENA menja se sadraj
polja i to pod uslovom da polja nemaju isti
sadraj, dok se u suprotnom prijavljuje poruka
o greci.
Klikom na dugme BRISANJE brie
se sadraj oba polja i sva tri dugmeta postaju
neaktivna.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za30_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
61
Primer 34:
Napisati aplikaciju koja diskutuje
reenja kvadratne jednaine na osnovu
unesenih parametara.
62
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "kvadratna_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a,b,c,d;
if(Edit1->Text==""||Edit2->Text==""||Edit3->Text=="")
{
ShowMessage("Niste uneli sve podatke!!");
return;
}
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
c=StrToFloat(Edit3->Text);
d=(b*b-4*a*c); //Racuna se diskriminanta jer se na osnovu nje vrsi yakljucivanje.
if(d==0) Label6->Caption="Reenja su realna i jednaka!";
if(d<0) Label6->Caption="Reenja su konjugovano kompleksna!";
if(d>0) Label6->Caption="Reenja su realna i razlicita!";
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Label6->Caption="???????";
Edit1->SetFocus();
}
63
//------------------------------------------------Primer 35:
Napraviti aplikaciju koja omoguava unos kratkog
celog broja sa intervala 0-255 i prikazivanje broja u
binarnom brojevnom sistemu, kao i proveru
pretvaranjem broja iz binarnog u dekadni brojevni
sistem.
Reenje
Podaci u programu mogu biti predstavljeni
kao konstante ili promenljive.
Konstante ne zauzimaju prostor u memoriji raunara, ve se neposredno ugrauju u
naredbe programa. U naredbi x = x + 3; broj 3 predstavlja konstantu. U programu se moe
koristiti i simbolike konstante. Simbolika konstanta predstavlja indentifikator koji ima
samo velika slova i definie se predprocesorskom naredbom.
Na primer:
#define BROJ_POKUSAJA
10
64
broj = broj/BIN;
Label8->Caption = IntToStr(broj% BIN);
broj = broj/ BIN;
Label7->Caption = IntToStr(broj% BIN);
broj = broj/ BIN;
Label6->Caption = IntToStr(broj% BIN);
broj = broj/ BIN;
Label5->Caption = IntToStr(broj% BIN);
broj = broj/ BIN;
Label4->Caption = IntToStr(broj% BIN);
broj = broj/ BIN;
Label3->Caption = IntToStr(broj% BIN);
broj = broj/ BIN;
Label2->Caption = IntToStr(broj% BIN);
btnBin->Default=false;
btnProvera->Default=true;
}else{
ShowMessage("Uneli ste broj veci od dozvoljenog");
btnProvera->Default=false;
btnBin->Default=true;
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::btnProveraClick(TObject *Sender)
{
int d=0;
d=128*StrToInt(Label2->Caption )+64* StrToInt(Label3->Caption )+
32*StrToInt(Label4->Caption )+16*StrToInt(Label5->Caption )+
8*StrToInt(Label6->Caption )+4*StrToInt(Label7->Caption )+
2*StrToInt(Label8->Caption )+1*StrToInt(Label9->Caption );
Label11->Caption="128*" + Label2->Caption +"+"+ " 64* " +Label3->Caption +"+"+
" 32*"+ Label4->Caption +" +"+" 16*" + Label5->Caption +"+"+
"8*"+Label6->Caption +"+"+"4*"+Label7->Caption +"+"+
"2*"+ Label8->Caption +"+"+"1*"+Label9->Caption+" = " + IntToStr(d);
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
btnProvera->Default=false;
btnBin->Default=true;
}
//--------------------------------------------------------------------------Primer 36:
65
Reenje
U svim rukovaocima dogaaja pojavljuje se parametar Sender Kad god se pozove funkcija
za obradu dogaaja, ta funkcija dobija informaciju koja potie od objekta koji je izazvao dogaaj.
Ova informacija se prosleuje pomou parametra Sender
Svaki put kada se pozove metod nekog objekta osim stvarnih parametara (svojstava)
predaje se nevidljivi parametar this pokazivakog tipa koji sadri adresu tekueg objekta kojim
se moe eksplicitno definisati pripadnost objekta
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Natpis_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::PanelClick(TObject *Sender)
{
if(Edit1->Text=="")
{
Edit1->Color=clRed;
return;
}
TPanel *pn = dynamic_cast <TPanel *> (Sender);
66
pn->Caption=Edit1->Text;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit1->Color=clWhite;
}
//--------------------------------------------------------------------------Primer 37:
Napraviti aplikaciju
koja pritiskom na dugme
KRECI pomera sliku za
vrednost njene irine, po
formi
kreui
se
horizontalnom
linijom.
Prilikom
startovanja
aplikacije slika se nalazi u
levom uglu I klikom se kree sleva na desno, sve dok ne doe do kraja forme, kada se klikom na
dugme KRECI vraa sdesna na levo. Klikom na dugme KRECI pomeranje se vri samo za
jednu irinu slike.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za32_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int ras=1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(ras==1)
{
if(Image1->Left+Image1->Width<Form1->Width)
Image1->Left=Image1->Left+Image1->Width;
else{
ras=0;
Image1->Left=Image1->Left-Image1->Width;
}
}else{
67
if(Image1->Left-Image1->Width>=0)
Image1->Left=Image1->Left-Image1->Width;
else{
ras=1;
Image1->Left=Image1->Left+Image1->Width;
}
}
}
//---------------------------------------------------Primer 38:
Napraviti aplikaciju koja na sredini
forme ili jadan veliki Panal sa natpisom koji
predstavlja jedan broj podebljani fonta 48.
Sa leve strane Panela nalazi se deset malih
Panela iji natpisi su: -1, +1, -2, +2, -3, +3,
-4, +4, -5 i +5. Ovi Paneli reaguju na
jedinstveni dogaaj OnClick pri emu se
menja vrednost centralnog Panela i to za
vrednost natpisa Kliknutog Panela. Sa desne strane nalazi se est Panela koji reaguju na isti
dogaaj OnClick pri emu se menja boja broja natpisa glavnog Panela, dobijajui boju kliknutog
Panela kao na slici.
Ispod glavnog Panela nalazi se Labela koja opisuje koliko je bilo izmena vrednosti broja
natpisa glavnog Panela.
Reenje
Komponenta Panel
je kontejnerska komponenta ija je osnovna namena da grupie
druge komponente na svojoj radnoj povrini.
Panel je komponenta tipa TPanel i nalazi se na paleti komponenti kartica Standard.
Svojstvo AlignMent odreuje poziciju natpisa panela. Mogue vrednosti su: taLeftJustyfy (tekst
je pozicioniran uz leviu ivicu panela), taCenter (tekst je pozicioniran u centru panela) i
tarightJustyfy (tekst je pozicioniran uz desnu ivicu panela).
Oblik okvira panela definie se raznim kombinacijama njegovih specifinih svojstava.
Svaki panel poseduje dva okvira, spoljanji i unutranji, koji su razdvojeni prostorom ija je
veliina odreena svojstvom BoredrWidth. Svojstva BevelInner i BevelOuter odreuju oblik
ova dva okvira. BevelWidth odreuje stepen ulegnua ili izdignua okvira panela. Svojstvo
BorderWith odreuje rastojanje izmeu spoljanjeg i unutranjeg okvira panela u pixel-ima.
Svojstvo BevelInner odreuje stil unutranjeg okvira panela. Mogue vrednosti BorderInner-a
su: bvNone (ne postoji unutranji okvir), bvLowered (unutranji okvir je ulegnut u odnosu na
okolinu) i bvaised (unutranji okvir je izdignut u odnosu na okolinu). BeveOuter odreuje stil
unutranjeg okvira panela. Mogue vrednosti BevelOuter-a su: bvNone (ne postoji spoljanji
okvir), bvLowered (spoljanji okvir je ulegnut u odnosu na okolinu) i bvaised (spoljanji okvir je
izdignut u odnosu na okolinu)
Komponenti Panel moe se desiti fdogaaj Resize kada se promeni veliina panela, kako bi
se omoguilo ponovno rasporeivanje komponenti koje se na njoj nalaze.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za39_o.h"
68
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::PanelIzmenaClick(TObject *Sender)
{
TPanel *pnx=dynamic_cast <TPanel *> (Sender);
Panel11->Caption=IntToStr(StrToInt(pnx->Caption)+StrToInt(Panel11->Caption));
Label4->Caption=IntToStr(1+StrToInt(Label4->Caption));
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::PanelBojeClick(TObject *Sender)
{
TPanel *pnx=dynamic_cast <TPanel *> (Sender);
Panel11->Font->Color=pnx->Color;
}
//--------------------------------------------------------------------------Primer 39:
Napraviti aplikaciju koja kada se pokrene prikazuje u zaglavlju teks SLIKE, i u jednom
redu prikazuje niz od pet slika (pravougaonici sive boje). Ispod svake slike nalazi se tekst koji
opisuje koja slika je po redu (Slika 1, Slika 2,Slika 5). Dugme Next je aktivno, a Back
neaktivno.
U folder projekta aplikacije formirati est slika. Prva je pravougaonik sive boje i imena
0.jpg, a ostalih pet na sluajan nain pronai u raunaru i imenuj ih redom: 1.jpg, 2.jpg, 3.jpg,
4.jpg i 5.jpg.
Klikom na dugme Next ubacuje se nova slika. Klikom na dugme Back brie se poslednja
slika. Ako nema slika dugme
Back je neaktivno, a ako ima
svih pet slika dugme Next je
neaktivno. Ako se pritisne
dugme
Next
dodaje
se
odgovarajua
slika
(sa
odgovarajuim rednim brojem),
a ako se pritisne dugme Back
brie se poslednja slika i umee
siva slika 0.jpg.
Reenje
//---------------------------------------------------------------------------
69
#include <vcl.h>
#pragma hdrstop
#include "za12_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k=0; //Predstavlja redni broj aktivne slike.
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
k=k+1;
if(k!=0) Button2->Enabled=true; //Ima vec slika pa se mogu i gasiti.
if(k==5) Button1->Enabled=false; //Popunjena su mesta te se ne moze vise dodavati.
//Utvrdjuje se na koju poyiciju slika dolazi.
if(k==1) Image1->Picture->LoadFromFile(IntToStr(k)+".jpg");
if(k==2) Image2->Picture->LoadFromFile(IntToStr(k)+".jpg");
if(k==3) Image3->Picture->LoadFromFile(IntToStr(k)+".jpg");
if(k==4) Image4->Picture->LoadFromFile(IntToStr(k)+".jpg");
if(k==5) Image5->Picture->LoadFromFile(IntToStr(k)+".jpg");
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
//Postavimo da su polja prazne slike.
if(k==1) Image1->Picture->LoadFromFile("0.jpg");
if(k==2) Image2->Picture->LoadFromFile("0.jpg");
if(k==3) Image3->Picture->LoadFromFile("0.jpg");
if(k==4) Image4->Picture->LoadFromFile("0.jpg");
if(k==5) Image5->Picture->LoadFromFile("0.jpg");
k=k-1; //Prelazimo na prethodnu sliku.
if(k==0) //Utvrdjujemo da li se ima sta gasiti.
{
Button2->Enabled=false;
Button1->Enabled=true;
}
if(k!=0) Button1->Enabled=true;
}
//----------------------------------------------------------Primer 40:
Napraviti aplikaciju koja se sastoji od
esnaest Panel abele boje fonta 24 podebljano,
grupisanih u etiri reda po etiri Panela. Svi Paneli
70
prilikom startovanja aplikacije imaju isti natpis a to je broj pet. Prvi Panel u prvom redu prilikom
startovanja aplikacije je svetlo plave boje. U polju izmena vri se podeavanje vrednosti izmene
sa intervala od -5 do +5 koraka 1
Klikom na neki od Panela boja mu se menja u svetloplavu ako nije bila ranije svetloplava
boja a vrednost uveava za vrednost koja se nalazi u polju Izmena, pri emu se automatski menja
ispis prikaza trenutne vrednosti minimalnog i maksimalnog elementa.
Reenje
Definicija pokazivaa:
Pokaziva je promenljiva koja sadri adresu druge promenljive ili funkcije.
Kada se zapone program operativni sistem priprema razliita podruja memorije,
bazirajui se na zahtevima vaeg kompajlera. Program raspolae sa sledeim podrujima
memorije: zona podataka, registarska memorija, zona za kod, stek i hip.
Deklaracija pokazivake promenljive:
tip *pok;
Ovom deklaracijom pok je pokazivaka promenljiva koja je u stanju da pokazuje (sadri
adresu) promenljive tipa tip. U deklaraciji se vidi da je pok pokazivaka promenljiva jer se ispred
nje nalazi operator *.
Inicijalizacija pokazivake promenljive:
Inicijalizacija pokazivake promenljive vri se operatorom dodele gde se pokazivakoj
promenljivoj dodeljuje NULL.
pok = NULL;
NULL je simbolika konstanta koja se nalazi u biblioteci stdio.h i ima vrednost 0.
Pokazivaka promenljiva pokazivae na drugu promenljivu ako sadri njenu adresu. To se
postie na sledei nain.
pok = &prom;
U ovom sluaju pokazivaka promenljiva pok mora prethodno biti deklarisana tako da
pokazuje na promenljive tipa tip, a da je i promenljiva prom takoe tipa tip.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za40_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
71
TPanel *pre; //Pokazivacka promenljiva, a sluzi u zadatku da pamti adresu komponente koja
je //poslednji put bila kliknuta.
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::PanelXClick(TObject *Sender)
{
TPanel *pnx=dynamic_cast <TPanel *> (Sender);
//Ako nije ista komponenta, novo kliknuta komponenta imace boju prethodno kliknute
//komponente.
if(pnx->Tag != pre->Tag)
{
pnx->Color=pre->Color;
pre->Color=clWindow;
}
pnx->Caption=IntToStr(CSpinEdit1->Value + StrToInt(pnx->Caption));
if(StrToInt(pnx->Caption)<StrToInt(Label3->Caption)) Label3->Caption=pnx->Caption;
if(StrToInt(pnx->Caption)>StrToInt(Label5->Caption)) Label5->Caption=pnx->Caption;
pre=pnx;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
pre=Panel1;
}
//-------------------------------------------------------------------------Primer 41:
Napraviti aplikaciju koja omoguava unos
stranica kvadra i izraunava: Obim ivica kvadra,
povrinu kvadra i duinu dijagonale kvadra. Duina
dijagonale kvadra treba da je zaokruena na tri
decimale.
Program sadri zatitu od neunesenog
podatka, tako to se porukom opie koje stranice
nisu unesene i postavi kursor na prvo polje unosa
gde podatak nije unesen.
Klikom na dugme RACUNAJ vri se
raunanje podataka, dok se klikom na dugme
BRISANJE briu polja za unos i trenutni rezultati..
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#include <math.h> Ukljucuje se biblioteka matematickih funkcija.
72
#pragma hdrstop
#include "Kvadar_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a,b,c,d,o,p;
if(Edit1->Text==""&&Edit2->Text==""&&Edit3->Text=="")
{
ShowMessage("Niste uneli sve tri stranice!!");
Edit1->SetFocus();
return;
}
if(Edit1->Text==""&&Edit2->Text=="")
{
ShowMessage("Niste uneli stranice a i b!!");
Edit1->SetFocus();
return;
}
if(Edit1->Text==""&&Edit3->Text=="")
{
ShowMessage("Niste uneli stranice a i c!!");
Edit1->SetFocus();
return;
}
if(Edit2->Text==""&&Edit3->Text=="")
{
ShowMessage("Niste uneli stranice b i c!!");
Edit2->SetFocus();
return;
}
if(Edit1->Text=="")
{
ShowMessage("Niste uneli stranicu a!!");
Edit1->SetFocus();
return;
}
73
if(Edit2->Text=="")
{
ShowMessage("Niste uneli stranicu b!!");
Edit2->SetFocus();
return;
}
if(Edit3->Text=="")
{
ShowMessage("Niste uneli stranicu c!!");
Edit3->SetFocus();
return;
}
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
c=StrToFloat(Edit3->Text);
if(a<=0||b<=0||c<=0)
{
ShowMessage("Stranice ne mogu biti negativne!!");
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit1->SetFocus();
return;
}
o=2*a+2*b+2*c;
p=a*b*c;
d=sqrt(a*a+b*b+c*c); //sqrt je funkcija koja racuna kvadratni koren.
Label7->Caption=FloatToStr(o);
Label8->Caption=FloatToStr(p);
Label9->Caption=Format("%.3f",ARRAYOFCONST((d)));
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Label7->Caption="????";
Label8->Caption="????";
Label9->Caption="????";
74
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------Primer 42:
Napraviti aplikaciju koja se sastoji od pet Panela sa natpisima crne
boje fonta veliine 24, podebljano, kao na slici.
U zaglavlju forme je natpis DUGMICI. Prilikom startovanja
aplikacije samo je prvo dugme neaktivno. Klikom na neko dugme prethodno
neaktivno dugme postaje aktivno, a kliknuto dugme neaktivno.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za14_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton *btnx=dynamic_cast <TButton *> (Sender);
//Utvrdjujemo koje je dugme bilo neaktivno i postavljamo ga da je aktivno.
if(Button1->Enabled==false) Button1->Enabled=true;
if(Button2->Enabled==false) Button2->Enabled=true;
if(Button3->Enabled==false) Button3->Enabled=true;
if(Button4->Enabled==false) Button4->Enabled=true;
if(Button5->Enabled==false) Button5->Enabled=true;
btnx->Enabled=false; //Kliknuto dugme postaje neaktivno.
}
//---------------------------------------------------------------------------
75
Primer 43:
Napraviti aplikaciju kao na slici. Potrebno je
prvo u programu Paint nacrtati prikazanu sliku i
snimiti je u jpg formatu. Potrebno je sliku povezati sa
Image komponentom ali tako da se slika neizoblii.
Program treba da na osnovu unesene struje u mA
izrauna i prikae vrednost napona u V.
Podatak reenja se dobija, pritiskom na taster
ODREDI. Pritiskom na taster BRISI program se vraa
u prvobitno stanje kao prilikom startovanja aplikacije.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Kretanja_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float u,i;
if(Edit1->Text=="")
{
Edit1->Color=clRed;
Edit1->SetFocus();
return;
}
i=StrToFloat(Edit1->Text);
if(i<=0) u=0;
else{
if(i<=15) u=0.4*i;
else{
if(i<=20) u=0.8*(i-15)+6;
else u=2*(i-15);
}
}
Label4->Caption=Format("%.2f",ARRAYOFCONST((u)));
76
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Label4->Caption="???";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Click(TObject *Sender)
{
Edit1->Color=clWhite;
}
//--------------------------------------------------------------------------Primer 44:
Napraviti aplikaciju koja predstavlja kalkulator sa etiri osnovne aritmetike operacije:
sabiranje, oduzimanje, mnoenje i deljenje. Prvo se moraju uneti oba operanda pa se tek tada bira
operacija pritiskom na odgovarajue dugme. Tada ako su operandi ispravno uneseni na ekranu e
se prikazati reenje ili poruka o greci. Aplikacija poseduje i dugme POMOC ijim aktiviranjem
pojavljuje se tekst sa opisom ta program radi, pri emu se tekst ne moe menjati niti kopirati deo
teksta. Sa dugmetom POVRATAK vraa se na aktivni deo. Koristei komponente GroupBox
formirati dve logike celine (grupu gde se vri raunanje i grupu gde se predstavlja upustvo).
Reenje:
Okvir za grupu je komponenta tipa TGroupBox i nalazi se na paleti komponenti na kartici
Standard. Komponenta GroupBox
je kontejnerska komponenta i slui za grupisanje
komponenti, tako da komponente postaju povezane logiki i fiziki. Kada se komponenta smesti
na komponentu GroupBox tada ta komponenta postaje dete, a GroupBox roditelj te komponente.
Nakon smetanja komponenta se ne moe miem premestiti izvan roditelja. Komponente se mogu
premetati sa jednog roditelja na drugi samo isecanjem i ponovnim umetanjem. Ako se neka
komponenta prevlaenjem sa forme premesti na komponentu GroupBox, ona i dalje ostaje
komponenta forme, i nee postati dete komponente GroupBox. Kada GroupBox dobije fokus dete
komponente koje ima najmanji TabOrder dobie fokus.
77
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Memo_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
GroupBox2->BringToFront();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button6Click(TObject *Sender)
{
GroupBox1->BringToFront();
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title=" G R E S K A !!";
}
//--------------------------------------------------------------------------void __fastcall TForm1::ButtonxClick(TObject *Sender)
{
double a,b,rez;
unsigned k;
TButton* btnx = dynamic_cast<TButton*>(Sender);
if(Edit1->Text=="" && Edit2->Text=="")
{
ShowMessage("Niste uneli oba podatka!!");
Edit1->Text="";
Edit2->Text="";
Edit1->SetFocus();
return;
}
78
if(Edit1->Text=="")
{
ShowMessage("Niste uneli prvi podatak!!");
Edit1->Text="";
Edit1->SetFocus();
return;
}
if(Edit2->Text=="")
{
ShowMessage("Niste uneli drugi podatak!!");
Edit2->Text="";
Edit2->SetFocus();
return;
}
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
//Utvrdjuje se koje je dugme kliknuto na osnovu imena dugmeta.
if(btnx==Button2) rez=a+b;
if(btnx==Button3) rez=a-b;
if(btnx==Button4) rez=a*b;
if(btnx==Button5)
{
if(b==0)
{
ShowMessage("Greska!! Deljenje sa nulom!!");
Edit1->Text="";
Edit2->Text="";
Edit1->SetFocus();
return;
}
rez=a/b;
}
Label4->Caption=FloatToStr(rez);
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormAktivate(TObject *Sender)
{
GroupBox2->BringToFront();
}
//--------------------------------------------------------------------------Primer 45:
79
Napraviti aplikaciju koja omoguava unos binarnog broja i njegov prikaz u dekadnom
brojevnom sistemu.
Binarni broj se zadaje pomou pomou komponenti CheckBox smetenih u komponenti
GroupBox sa nazivom Binarni broj. Ako je odgovarajui CheckBox ekiran na toj teini nalazi
se broj 1, a u suprotnom broj 0. Binarni broj je osmobitni. Promenom stanja ekiranja, menja se
automatski i vrednost ekvivaletnog dekadnog broja koji je smepten u komponenti Edit.
Komponenta Edit je boje forme, slui samo za itanje i maksimalne duine je od tri karaktera. Za
svih osam CheckBox-ova vai isti dogaaj OnClick.
Reenje:
Okvir za potvrdu je komponenta tipa TCheckBox
i nalazi se na paleti komponenata
na kartici Standard. Ako okvir za potvrdu poseduje znak za potvrdu, znai da je opcija
potvrena, a ako nema znaka za potvrdu opcija nije potvrena. Korisnik moe da promeni stanje
opcije klikom na sam okvir ili na natpis pored njega, ili pritiskom na znak Space sa tastature ako
ima fokus.
Svojstvo Aligment odreuje poloaj natpisa za potvrdu: taRightJustify (natpis je sa desne
strane i to je podrazumevana vrednost) i taLeftJustify (natpis je sa leve strane).
Svojstvo Checked je tipa bool s vrednou true ako je polje potvreno ili false u
suprotnom. Promena svojstva Chacked u toku izvravanja aplikacije izazvae dogaaj OnClick.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Binarni_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::CheckBoxClick(TObject *Sender)
{
int broj=0; //Broj je na pocetku nula, a po definiciji veze dekadnog i binarnog broja.
if(CheckBox1->Checked==true) broj+=1;
if(CheckBox2->Checked==true) broj+=2;
if(CheckBox3->Checked==true) broj+=8;
if(CheckBox4->Checked==true) broj+=4;
if(CheckBox8->Checked==true) broj+=16;
if(CheckBox7->Checked==true) broj+=32;
if(CheckBox6->Checked==true) broj+=128;
if(CheckBox5->Checked==true) broj+=64;
Edit1->Text=IntToStr(broj);
}
80
//--------------------------------------------------------------------------Primer 46:
Napraviti aplikaciju koja pomou promene vrednosti u komponenti CspinEdit, a menja se
pritiskom na strelice gore i dole, ispisuje u labeli dan u nedelji.
Reenje
Naredba viestrukog grananja switch ima slei opti oblik:
switch(izraz)
{
case k_1: niz_ naredbi_1;
break;
case k_2: niz_ naredbi_2;
break;
.
.
.
case k_N: niz_naredbi_N;
break;
default: niz_naredbi_0;
}
Konstante k_1, k_2,...,k_N su celobrojne konstante i meusobno su razliite.
Izraunava se vrednost celobrojnog izraza izraz (sve promenljive u izrazu moraju biti
celobrojnog tipa) i poredi redom sa konstantama k_1, k_2, ...,k_N koje se nalaze posle
rezervisane rei case. Ako vrednost izraza nije jednaka ni sa jednom konstantom izvravae se
naredba_0. Ukoliko je vrednost izraza jednaka sa nekom konstantom k_i, i [1..N], program e
se izvravati poev od niza_naredbi_i pa do kraja naredbe switch.
U naredbi switch ne mora se koristiti mogunost default ako to za reavanje problema nije
potrebno.
Najee se naredba switch koristi u kombinaciji sa naredbom break tako da ukoliko je
vrednost izraza jednaka sa nekom konstantom k_i izvravae se samo niz_naredbi_i i posle toga
e se iskoiti iz switcha (na prvu naredbu koja se nalazi posle naredbe switch).
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "dan_o.h"
//---------------------------------------------------------------------------
81
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
switch(CSpinEdit1->Value)
{
case 1: Label3->Caption="Ponedeljak";
break;
case 2: Label3->Caption="Utorak";
break;
case 3: Label3->Caption="Sreda";
break;
case 4: Label3->Caption="Cetvrtak";
break;
case 5: Label3->Caption="Petak";
break;
case 6: Label3->Caption="Subota";
break;
case 7: Label3->Caption="Nedelja";
}
if(CSpinEdit1->Value==6 || CSpinEdit1->Value==7) Label3->Font->Color=clRed;
else Label3->Font->Color=clBlack;
}
//--------------------------------------------------------------------------Primer 47:
Napraviti aplikaciju koja se sastoji od pet Panela u jednom redu istih veliina i svi
bele boje. Boja natpisa na Panelima je crna, a veliina fonta 24 podvueno. Ispod se
nalaze Labele sa brojem belih i brojem crvenih Panela. Prilikom pokretanja aplikacije
broj belih Panela je pet, a crvenih Panela nema. Komponenta CSpinEdit ima minimalnu
vrednost 1, a maksimalnu 5. Izborom nekog broja sa intervala 1..5 iz CSpinEdita I
pritiskom na dugmer OK, Panel iji natpis sadri broj izabran pomou CSpinEdita, menja
boju iz bele u crvenu i obrnuto, a time se automatski menja broj belih i crvenih Panela.
82
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za15_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
int brbelih=5,brcrvenih=0;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
switch(CSpinEdit1->Value)
{
case 1: if(Panel1->Color==clWindow) //Ako je bio bele boje postace crvene i obrnuto.
{
Panel1->Color=clRed; //Postaje crvene boje.
brbelih=brbelih-1; //Broj belih se smanjio za jedan..
brcrvenih=brcrvenih+1; //Broj crvenih se smanjio za jedan.
}else{
Panel1->Color=clWindow; //Postaje bele boje.
brbelih=brbelih+1; //Broj belih se povecava za jedan.
brcrvenih=brcrvenih-1; //Broj crvenih se smanjuje za jedan.
}
break;
case 2: if(Panel2->Color==clWindow)
{
Panel2->Color=clRed;
83
brbelih=brbelih-1;
brcrvenih=brcrvenih+1;
}else{
Panel2->Color=clWindow;
brbelih=brbelih+1;
brcrvenih=brcrvenih-1;
}
break;
case 3: if(Panel3->Color==clWindow)
{
Panel3->Color=clRed;
brbelih=brbelih-1;
brcrvenih=brcrvenih+1;
}else{
Panel3->Color=clWindow;
brbelih=brbelih+1;
brcrvenih=brcrvenih-1;
}
break;
case 4: if(Panel4->Color==clWindow)
{
Panel4->Color=clRed;
brbelih=brbelih-1;
brcrvenih=brcrvenih+1;
}else{
Panel4->Color=clWindow;
brbelih=brbelih+1;
brcrvenih=brcrvenih-1;
}
break;
case 5: if(Panel5->Color==clWindow)
{
Panel5->Color=clRed;
brbelih=brbelih-1;
brcrvenih=brcrvenih+1;
}else{
Panel5->Color=clWindow;
brbelih=brbelih+1;
brcrvenih=brcrvenih-1;
}
}
Label2->Caption=IntToStr(brbelih);
Label4->Caption=IntToStr(brcrvenih);
}
//---------------------------------------------------------------------------
84
Primer 48:
Napraviti aplikaciju koja na osnovu
unesenog
vremena
u
sekundama,
korienjem grafika sa slike prikazuje koje
je sve vrste kretanja tela iz fizike telo
napravilo do tog vremena.
Kretanja mogu biti: ravnomerno
ubrzano, ravnomerno usporeno, ravnomerno
i zaustavilo se.
Program poseduje zatitu unosa
pozitivnog celobrojnog podatka.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Kretanja_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int t;
if(Edit1->Text=="")
{
Edit1->Color=clRed;
Edit1->SetFocus();
return;
}
t=StrToInt(Edit1->Text);
if(t>0 && t<10) Label3->Caption="Ravnomerno ubrzano.";
if(t>=10 && t<20) Label3->Caption="Ravnomerno ubrzano - Ravnomerno.";
if(t>=20 && t<50)
Label3->Caption="Ravnomerno ubrzano - Ravnomerno -\n- Ravnomerno usporeno.";
85
86
dugme OK u grupu e sainjavati radio dugmadi sa nazivima koje ste u ovom svojstvu postavili i
sa redosledom koji se poklapa sa redosledom koji je u stavkama po redovima naznaen u ovom
svojstvu.
Svojstvo Items->Count odreuje broj radio dugmadi u radio grupi. Nije praktino da se na
grupi radio dugmadi postavi novo radio dugme koje toj grupi ne pripada, jer e kod korisnika
aplikacije izazivati veliku zabunu.
Na gustinu dugmadi moe da se utie jedino pomou visine i irine komponente (Height i
Width).
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Vezaotpornika_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int kon;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float r1,r2,rekv;
if(Edit1->Text=="" || Edit2->Text=="") return;
r1=StrToFloat(Edit1->Text);
r2=StrToFloat(Edit2->Text);
switch(RadioGroup1->ItemIndex)
{
case 0: rekv=r1+r2;
break;
case 1: rekv=r1*r2/(r1+r2);
}
Label4->Caption=FloatToStr(rekv);
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
87
Edit2->Text="";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if(CheckBox1->Checked==true) Label4->Font->Color=clRed;
else Label4->Font->Color=clBlack;
}
//--------------------------------------------------------------------------Primer 50:
Napisati aplikaciju koja omoguava demonstraciju
zvuka. Postoje dva wav fajla. Jedan sadri zvuk psa, a
drugi make. Korienjem RadioGroup obezbediti da
korisnik bira ta hoe da uje, a pritiskom na na dugme
OK ue odgovarajui zvuni zapis.
Reenje
Pomou API funkcije PlaySound moete ukljuiti
i zvuk u vau aplikaciju. Zvuk je zapisan u fajlu u wav formatu. Prvi argument funkcije
PlaySaund je ime zvunog fajla. Za drugi parametar uvek se podtavlja broj nula, dok se trei
parametar odnosi na nain interpretacije zvuka. Mogue vrednosti treeg parametra su:
SND_FILENAME Bie aktiviram zvuk iz fajla.
SND_ALIAS
Prvi parametar predstavlja sada alijas za sistemski zvuk, dok
trei parametar govori da ako se ne moe pronai sistemski
zvuk koji odgovara ovom alijasu, aktivirae se zvuk ding.
SND_MODEFAULT
Ako elimo da se u sluaju da se ne pronae sistemski zvuk ne
aktivira zvuk ding.
SND_ASYNC
Zvuk e se reprodukovati u oku rada apikacije.
SND_SYNC
Kada se zvuni fajl izvri do kraja kontrola se vraa aplikaciji.
SND_LOOP
Obezbeuje ponavljanje reprodukcije fajla dok se ponovo ne
pozove.
SND_PURGE
Prekida reprodukovanje tekueg zvunog fajla.
//--------------------------------------------------------------------------#include <vcl.h>
#include <MmSystem>
#pragma hdrstop
#include "PasiMacka_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
88
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad1za3_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
int k;
//Imena fajlova gde su slike karata su redni broj karte sa intervala 1-52.bmp
//karte su grupisane na nacin: cetiri jedinice, cetiri dvojke,...,cetiri kralja.
//Promenljiva k utvrdjuje redni broj karte po formuli.
89
k=RadioGroup1->ItemIndex * 14 +CSpinEdit1->Value;
Image1->Picture->LoadFromFile(IntToStr(k)+".bmp");
}
//--------------------------------------------------------------------------Primer 52:
Napraviti aplikaciju koja na sredinu
forme postavlja Panel oblika kvadrata bele
boje. Ispod Panela nalaze se dve
RadioButton komponente pomou kojih se
biraju: boja Panela i poloaj Panela.
Boja Panela moe biti: crna, crvena,
bela ili plava.
Poloaj Panela moe biti: levo,
centrirano ili desno.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad3za2_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Prilikom kreiranja Panel se centrira u udnosu na sirinu forme I svoju sirinu.
Panel1->Left=(Form1->Width-Panel1->Width)/2;
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup2Click(TObject *Sender)
{
//Odredjuje se pozicija Panela.
switch(RadioGroup2->ItemIndex)
{
90
case 0: Panel1->Left=RadioGroup1->Left;
break;
case 1: Panel1->Left=(Form1->Width-Panel1->Width)/2;
break;
case 2: Panel1->Left=RadioGroup2->Left+RadioGroup2->Width-Panel1->Width;
break;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
//Odredjuje se boja Panela.
switch(RadioGroup1->ItemIndex)
{
case 0: Panel1->Color=clBlack;
break;
case 1: Panel1->Color=clRed;
break;
case 2: Panel1->Color= clWhite;
break;
case 3: Panel1->Color=clBlue;
break;
}
}
//--------------------------------------------------------------------------Primer 53:
Napraviti aplikaciju koja pmoguava unos teksta
komponentu Edit a oznaavanjem odgovarajue
opcije u GroupBox-su automatski se menja stil
fonta unesenog teksta.
Iz komponente RadioGroup moe se izabrati
odgovarajua boja teksta. Na raspolaganju su tri
boje: crna, plava i crvena.
Pritiskom na dugme brisanje vri se brisanje
sadraja konponente Edit.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "font_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
91
92
CheckBox3->Checked==true)
{
Edit1->Font->Style=TFontStyles()<<fsUnderline;
}
if(CheckBox1->Checked==false&&CheckBox2->Checked==false&&
CheckBox3->Checked==false)
{
Edit1->Font->Style=TFontStyles();
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
switch(RadioGroup1->ItemIndex)
{
case 0: Edit1->Font->Color=clBlack;
break;
case 1: Edit1->Font->Color=clBlue;
break;
case 2: Edit1->Font->Color=clRed;
}
}
//--------------------------------------------------------------------------Primer 54:
Napraviti aplikaciju koja izraunava vrednost izraza
zadat formulom F(X,Y,Z) = 5XYZ + 2Z pri emu se
vrednosti promenljivih x, y i z zadaju pomou komponenti
ScrollBar. Vrednost promenljivih se kree sa intervala 0..30.
Iznad svake trake sa Labelom je opisana osa, a sa desne strane
trenutna vrednost odgovarajue promenljive.
Sa posebnom Labelom crvene boje predstavljen je
rezultat vrednoti funkcije F(X,Y,Z).
Pomou zajednikog dogaaja OnChange odrediti
vrednost vrednost promenljivih x,y i z, kao i vrednost
funkcije F(X,Y,Z).
Reenje
Komponenta ScrollBar
predstavlja kliza, koji sadri dva dugmeta na krajevima
koja su obeleena strelicama i jednu ruku koja se moe pomerati u prostoru izmeu ta dva
dugmeta. Kada je kliza u ii povrina ruke trepe. Kliza moe biti postavljen horizontalno ili
vertikalno. Komponenta ScrollBar je tipa TscrollBar i nalazi se na paleti komponenti kartica
Standard.
Svojstva:
Kind
93
Min
Max
Posicion
Primer 55:
Napraviti aplikaciju koja korienjem ScrollBar-ova
za tri osnovne bije (crvena, plava i zelena) omoguava
meanje boja i prikazivanje odreene boje nastale
meanjem na paleti.Iznad klizaa potrebno je prikazati
94
95
Panel boja tog Panela se manja u uto i obrnuto, a zaglavlju je uvek aktivno zapisano koji Paneli
su kliknuti, tj imaju utu boju, i to u hronolokom redosledu.
Hronoloki redosled se uvek mora prikazivati u zaglavlju forme.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za23_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int a,b,c;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel1Click(TObject *Sender)
{
TPanel *pnx=dynamic_cast <TPanel *> (Sender);
if(pnx->Color==clWindow)
{
pnx->Color=clYellow;
if(pnx->Tag==1)
{
if(a==0 && b==0 && c==0) a=1;
else if(a!=0 && b==0 && c==0) b=1;
else if(a!=0 && b!=0 && c==0) c=1;
}
if(pnx->Tag==2)
{
if(a==0 && b==0 && c==0) a=2;
else if(a!=0 && b==0 && c==0) b=2;
else if(a!=0 && b!=0 && c==0) c=2;
}
if(pnx->Tag==3)
{
if(a==0 && b==0 && c==0) a=3;
else if(a!=0 && b==0 && c==0) b=3;
else if(a!=0 && b!=0 && c==0) c=3;
}
}else{
96
if(pnx->Tag==1)
{
if(a==1 && b==0 && c==0) a=0;
else if(a==1 && b!=0 && c==0) a=b, b=0;
else if(a==1 && b!=0 && c!=0) a=b, b=c,c=0;
else if(a!=1 && b==1 && c!=1) b=c,c=0;
else if(a!=1 && b!=1 && c==1) c=0;
}
if(pnx->Tag==2)
{
if(a==2 && b==0 && c==0) a=0;
else if(a==2 && b!=0 && c==0) a=b, b=0;
else if(a==2 && b!=0 && c!=0) a=b, b=c,c=0;
else if(a!=2 && b==2 && c!=2) b=c,c=0;
else if(a!=2 && b!=2 && c==2) c=0;
}
if(pnx->Tag==3)
{
if(a==3 && b==0 && c==0) a=0;
else if(a==3 && b!=0 && c==0) a=b, b=0;
else if(a==3 && b!=0 && c!=0) a=b, b=c,c=0;
else if(a!=3 && b==3 && c!=3) b=c,c=0;
else if(a!=3 && b!=3 && c==3) c=0;
}
pnx->Color=clWindow;
}
AnsiString s="KLIKNUT: ";;
if(a!=0) s+=IntToStr(a)+" ";;
if(b!=0) s+=IntToStr(b)+" ";
if(c!=0) s+=IntToStr(c)+" ";
if(s!="")Form1->Caption=s;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
a=b=c=0;
}
//--------------------------------------------------------------------------Primer 57:
Napisati C program koji predstavlja
igru pogaanja zamiljenog broja. Raunar
je zamislio broj a korisnik programa (igra)
ima pravo na est pokuaja da broj pogodi.
97
Raunar je zamislio broj iz intervala 1..99. Posle svakog pokuaja u STATUSNOJ LINIJI koja
se nalazi pri kraju forme ispisuje se podatak:
> - ako je zamiljeni broj vei od onog kojeg je igra odigrao,
< - ako je zamiljeni broj manji od onog kojeg je igra odigrao i
= - ako je zamiljeni broj pogoen.
Po zavretku igre igraa iznenaditi nekom zanimljivom porukom pomou ShowMessage
prozora.
Program poseduje zatitu unosa prirodnog broja sa intervala 1..99.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad3za3_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Int k, zbroj;
//--------------------------------------------------------------------------//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
k=6; //Broj pokusaja je na pocetku 6.
zbroj=random(99)+1; //Pomocu generatora slucajnih brojeva racunar je zamislio broj.
Application->Title="GRESKA...";
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int br;
AnsiString ss=Label5->Caption+" ";
br=StrToInt(Edit1->Text);
k--; //Broj pokusaja se smanbjuje za jedan.
Label2->Caption=IntToStr(k);
if(zbroj==br) //Utvrdjuje se da li je pogodjen zamisljeni broj.
{
Edit1->Enabled=false;
ShowMessage("Bravo!! Pogodili ste trazeni broj!!");
98
99
potezu (O ili X) i upisuje u Labelu. Klikom na dugme NOVA IGRA brise se tekst sa svakog
Panela i svaki Panel postaje aktivan.
Paneli prilikom pokretanja aplikacije nemaju nikakav natpis, a svojstva Tag im je
razliita i kree se od 1 do 9.
100
101
if(pan->Caption==Panel6->Caption&&pan->Caption==Panel9->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel5->Caption&&pan->Caption==Panel7->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
break;
case 4: if(pan->Caption==Panel1->Caption&&pan->Caption==Panel7->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel5->Caption&&pan->Caption==Panel6->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
break;
case 5: if(pan->Caption==Panel1->Caption&&pan->Caption==Panel9->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel3->Caption&&pan->Caption==Panel7->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel2->Caption&&pan->Caption==Panel8->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel4->Caption&&pan->Caption==Panel6->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
102
}
break;
case 6: if(pan->Caption==Panel3->Caption&&pan->Caption==Panel9->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel4->Caption&&pan->Caption==Panel5->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
break;
case 7: if(pan->Caption==Panel1->Caption&&pan->Caption==Panel4->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel8->Caption&&pan->Caption==Panel9->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel5->Caption&&pan->Caption==Panel3->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
break;
case 8: if(pan->Caption==Panel7->Caption&&pan->Caption==Panel9->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel2->Caption&&pan->Caption==Panel5->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
break;
103
case 9: if(pan->Caption==Panel1->Caption&&pan->Caption==Panel5->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel7->Caption&&pan->Caption==Panel8->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
if(pan->Caption==Panel3->Caption&&pan->Caption==Panel6->Caption)
{
ShowMessage("Pobednik je "+pan->Caption);
GroupBox1->Enabled=false;
return;
}
break;
}
if(br==9) ShowMessage ("Nereseno!!"); Ako su popunjena sva polja rezultat igre je nereseno.
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
br=0; //Kliknuto je na dugme NOVA IGRA.
//Omogucava se ponovno igranje a sva polja su ponovno prazna I na potezu je igrac
koji //je partiju izgubio ili nije bio poslednji na potezu pri rezultatu NERESENO.
GroupBox1->Enabled=true;
Panel1->Caption="";
Panel2->Caption="";
Panel3->Caption="";
Panel4->Caption="";
Panel5->Caption="";
Panel6->Caption="";
Panel7->Caption="";
Panel8->Caption="";
Panel9->Caption="";
}
//--------------------------------------------------------------------------Primer 59:
Napraviti aplikaciju koji na osnovu parametara
diskutuje reenja kvadratnog izraza a x 2 + b x + c 0
pri emu parametar moe imati za vrednost karaker: =,
> ili <.
104
105
106
}else{
if(d<0) Label6->Caption="X = {}";
else{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
if(x1<x2) Label6->Caption=Format("X = {%.2f,%.2f}",
ARRAYOFCONST((x1,x2)));
else Label6->Caption=Format("X = {%.2f,%.2f}",
ARRAYOFCONST((x2,x1)));
}
}
break;
case 1: if(d==0)
{
x1=-b/(2*a);
if(a>0) Label6->Caption=Format("X = R\{%.2f}",
ARRAYOFCONST((x1)));
else Label6->Caption="X = {}";
}else{
if(d<0)
{
if(a>0) Label6->Caption="X = R";
else Label6->Caption="X = {}";
}else{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
if(x1<x2)
{
if(a>0) Label6->Caption=Format("X = {-B,%.2f) U (%.2f,+B}",
ARRAYOFCONST((x1,x2)));
else Label6->Caption=Format("X = {%.2f,%.2f)",
ARRAYOFCONST((x1,x2)));
}else{
if(a>0) Label6->Caption=Format("X = {-B,%.2f) U (%.2f,+B}",
ARRAYOFCONST((x2,x1)));
else Label6->Caption=Format("X = {%.2f,%.2f)",
ARRAYOFCONST((x2,x1)));
}
}
}
break,
case 2: if(d==0)
{
x1=-b/(2*a);
if(a<0)
107
Label6->Caption=Format("X = R\{%.2f}",ARRAYOFCONST((x1)));
else Label6->Caption="X = {}";
}else{
if(d<0)
{
if(a<0) Label6->Caption="X = R";
else Label6->Caption="X = {}";
}else{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
if(x1<x2)
{
if(a<0) Label6->Caption=Format("X = {-B,%.2f) U (%.2f,+B}",
ARRAYOFCONST((x1,x2)));
else Label6->Caption=Format("X = {%.2f,%.2f)",
ARRAYOFCONST((x1,x2)));
}else{
if(a<0) Label6->Caption=Format("X = {-B,%.2f) U (%.2f,+B}",
ARRAYOFCONST((x2,x1)));
else Label6->Caption=Format("X = {%.2f,%.2f)",
ARRAYOFCONST((x2,x1)));
}
}
}
break;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
Label6->Caption="";
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title="GRESKA!!!";
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup2Click(TObject *Sender)
{
switch(RadioGroup2->ItemIndex)
{
case 0: Label5->Font->Color=clBlack;
Label6->Font->Color=clBlack;
break;
case 1: Label5->Font->Color=clBlue;
108
Label6->Font->Color=clBlue;
break;
case 2: Label5->Font->Color=clRed;
Label6->Font->Color=clRed;
break;
case 3: Label5->Font->Color=clGreen;
Label6->Font->Color=clGreen;
break;
}
}
//--------------------------------------------------------------------------Primer 60:
Napraviti aplikaciju koja omoguava ispis cifre 0 9 u
Labeli fonta boldovanog veliine 48.
Pritiskom na taster cifre, cifra se prikazuje u Labeli.
Reenje
Osnovni dogaaj koji moe da se proizvede pomou tastature jeste pritisak i otputanje
nekog tastera na tastaturi, a to je dogaaj OnKeyPress Ovaj dogaaj nastaje samo ako je pritisnut
neki taster sa znakom koji ima svoj ASCII kod. Ako se pritisne neki drugi taster (kao to su
funkcijski tasteri), ne smatra se da se desio dogaaj pritiska i otputanja tastera. Vrednost
pritisnutog tastera smeta se u argument Key. Ako se u rukovaocu dogaaja promeni vrednost
promenljive Key, program se ponaa kao da je preko tastature unesen taj karakter, a ne karakter
iji je taster pritisnut. Ako u rukovaocu dogaaja vrednost promenljive Key postane 0, smatrae
se da taster nije pritisnut.
Argument Key je znakovnog tipa. Promena se vri tako to joj se dodeli neki drugi znak
napisan izmeu znakova apostrofa. Ako se dodeli broj u promenljivu Key se upisuje onaj
karakter koji u ASCII tabeli ima taj ordinatni broj.
Dogaaji pomou tastature uvek se deavaju aktivnoj komponenti (onoj koja ima trenutno
fokus). Kada za trenutno aktivnu komponentu nisu predvieni dogaaji tastature, pritisci na
tastere tastature tumae se kao tasteri preice za odabiranje drugih komponenti.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Tasteri_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
109
if(Key<'0' || Key>'9') Key=0; //Ako nije cifra nece se nista desiti jer kada Key
//promenljiva dobije vrednost 0 kao da taster nije
//pritisnut.
else{
int k=Key-48; //Pretvaramo karakter u broj.
Label1->Caption=IntToStr(k); //Pretvaramo broj u string.
}
}
//----------------------------------------------------------Primer 61:
Napraviti aplikaciju koja na osnovu unesene
duine stranice kocke izraunava povrinu i
zapreminu. Pre nego to se unese duina stranice
kocke mora se uneti ifra. Umesto karaktera iz ifre
ispisuju se znaci #. Kada se unese ifra, pritiskom na
dugme POTVRDI ustanovljava se da li je ifra
ispravno unesena, te ako jeste polje za unos postaje
bele boje i dobija fokus, a u suprotnom morate
unositi ponovno ifru. U polje se moe unositi
onoliko karaktera koliko karaktera u to polje moe da stane. Po zavretku unosa ifre dugme
POTVRDI postaje aktivno.
Prilikom unosa duine stranice postoji zatita:
Ne dozvoljava se unos drugih karaktera osim brojeva od 0 do 9 i decimalne take; i
Prva karakter ne moe biti decimalna taka ili 0
Nakon uspeno unesene duine stranice dugme OK postaje aktivno i pritiskom na taster
Enter ili klikom na dugme izraunava se i prikazuje na ekranu povrina i zapremina kocke.
Reenje
Moete da izaberete izmeu dva tipa provere korisnikog unosa: provera na nivou obrasca i
provera na nivou polja. Provera na nivou obrasca proverava podatke kada korisnik popuni polja
na obrascu. Provera na nivou polja vam daje kontrolu nad korisnikim unosom u trenutku kada se
on deava.
Komponenta Edit poseduje svojstvo MaxLength koje onemoguava da korisnik unese vie
karaktera nego to je tim svojstvom dozvoljeno. esto se svojstvo MaxLength postavlja na
vrednost koja predstavlja fiziki broj karaktera koji se mogu upisati u Edit i da budu uvek
vidljivi. Pored toga komponenta Edit poseduje i svojstvo PaswordChar koje omoguava da se
prilikom unosa umesto karaktera koje korisnik unosi upisuje neki poseban karakter. Ovo svojstvo
se koristi prilikom unosa ifri.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Kocka_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
110
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s="prolazak"; //Sifra koju treba uneti.
if(Edit1->Text==s) //Ako je sifra pogodjena moze se dalje unositi podatak.
{
Button1->Enabled=true;
Button2->Enabled=true;
Edit2->Enabled=true;
Edit2->Color= clBtnHighlight;
Edit2->SetFocus();
}else{
Edit1->Text="";
Button2->Enabled=false;
Edit1->SetFocus();
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
AnsiString s;
//Ako unesete potreban broj znakova dugme za proveru sifre postaje aktivno.
s=Edit1->Text;
if(s.Length()==Edit1->MaxLength)
{
Button1->Enabled=true;
Button1->SetFocus();
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
double a,v,p;
a=StrToFloat(Edit2->Text);
p=6*a*a;
v=a*a*a;
Label6->Caption=FloatToStr(p);
Label7->Caption=FloatToStr(v);
}
111
Label1->Caption=IntToStr(k);
}
//---------------------------------------------------------------------------
112
Primer 63:
Napraviti aplikaciju koja se
sastoji od dva puta kojima se moe
kretati ikica. Postoje dve ikice kao
na slici. Prvi se kree horizontalno
pritiskom tasterima Lea strelica i
Desna strelica. Drugi se kree
vertikalno Gornja strelica i Donja
strelica.
Put kretanja je ogranien i kod
jednog i drugog puta.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Cika_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
//Dogadjaj OnKeyDown poseduje mogucnost reagovanja na tastere strelice.
//37 je redni broj strelice Desno.
//39 je redni broj strelice Levo.
//38 je redni broj strelice Gore.
//37 je redni broj strelice Dole.
if(Key!=37 && Key!=39 && Key!=38 && Key!=40) Key=0;
else{
if(Key==37 && Image1->Left>0) Image1->Left-=5;
if(Key==39&&Image1->Left+Image1->Width<Panel1->Width)
Image1->Left+=5;
if(Key==40&&Image2->Top+Image2->Height<Panel2->Height)
Image2->Top+=5;
if(Key==38 && Image2->Top>0) Image2->Top-=5;
}
113
}
//--------------------------------------------------------------------------Primer 64:
Napraviti aplikaciju koja predstavlja funkciju sa
ScrollBarovima i CspinEditom. Funkcija ima izraz F(X,Y,Z) =
4XYZ + aY. Parametar a je celobrojni podatak sa intervala
0..20, a i x, y i z promenljive ije vrednoisti se dobijaju pomou
ScrollBarova su sa intervala 0..20.
Promenom vrednosti nekih od parametara funkcije menja
se i vrednost funkcije, zapisana u Labeli crvene boje kao na slici.
Program mora imati zatitu unosa broja a u CspinEditu
tako da se mora omoguiti unos broja iskljuivo sa intervala
0..20.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad2za2_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
int x,y,z,a;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
int rez;
x=ScrollBar1->Position;
y=ScrollBar2->Position;
z=ScrollBar3->Position;
if(CSpinEdit1->Text=="")
{
CSpinEdit1->Value=0;
return;
}
a=CSpinEdit1->Value;
if(CSpinEdit1->Value>20 || (CSpinEdit1->Value>10 && CSpinEdit1->Value%2!=0))
{
114
CSpinEdit1->Value=0;
return;
}
rez=4*x*y*z+a*y;
Label12->Caption=Format("F(%d,%d,%d) = %d",ARRAYOFCONST((x,y,z,rez)));
}
//--------------------------------------------------------------------------void __fastcall TForm1::CSpinEdit1KeyPress(TObject *Sender, char &Key)
{
if(!(Key>='0' && Key<='9') && Key!=8) Key=0;
else{
if((CSpinEdit1->Text=="" || CSpinEdit1->Value<10) && Key==8)
{
CSpinEdit1->Value=0;
Key=0;
return;
}
if(CSpinEdit1->Text=="0") CSpinEdit1->Clear();
}
}
//---------------------------------------------------------------------------
CIKLUSI (PETJE)
Ciklusi su upravljake strukture koje omoguavaju ponovljeno izvravanje neke naredbe.
Po nainu zadavanja uslova koji treba da se ponavlja mogu da postoje:
brojaki ciklusi.
U programskom jeziku C postoje tri upravljake strukture za realizaciju ciklusa: while, dowhile i for. Sve tri upravljake strukture spadaju u cikluse koji traju dok je uslov ispunjen. To je
na neki nain loa strana C jezika.
Primer 65:
Napisati aplikaciju koja na osnovu unetog prirodnog broja N izraunava zbir kvadrata prvih
N prirodnih brojeva.
Reenje:
115
WHILE NAREDBA
Opti oblik while ciklusa je:
Osobine while ciklusa:
while(uslov) naredba;
While ciklus se izvrava sve dok je uslov logika
Koristi se kada se nezna kojiko e se ciklus izvravati,
Uvek se prvo proverava da li je uslov logika istina, te
Moe se desiti da se uslov ne izvri nijednom (na
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Zbir.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key)) Key=0; //Karakter mora biti broj.
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
if(ed->Text=="" && Key=='0') Key=0;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned s,i,n;
if(Edit1->Text=="")
{
Edit1->SetFocus(); //Ako je Edit prazan znaci da nema broja i broj se mora uneti.
return;
}
n=StrToInt(Edit1->Text); //Broj postoji i pretvara se iz stringa u dekadni broj.
i=1;
116
while(i<=n)
{
s=s+i*i; //Formula po kojoj se rauna zbir.
i++;
}
Label3->Caption=IntToStr(s); //Ybir se upisuje u Labelu.
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
kon=false;
Label3->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
Primer 66:
Napisati aplikaciju koja omoguava unos
racionalnog broja uz kompletnu kontrolu unosa,
potom utvruje koliko lanova beskonanog
niza treba sabrati pa da zbir bude vei od tog
unetog racionalnog broja. Beskonani niz je
oblika:
2 3 4
1,
,
,
, ...
1 2 3
Reenje:
DO-WHILE NAREDBA
Opti oblik do-while naredbe je:
do{
naredba;
}while(uslov);
117
naredba;
while(uslov) naredba;
//--------------------------------------------------------------------------#include <vcl.h>
#include <string.h>
#pragma hdrstop
#include "Dknebude.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float s=0,broj;
int i;
if(Edit1->Text=="") return;
broj=StrToFloat(Edit1->Text);
i=0;
do{
i++;
if(i==1) s=1;
else s+=(float)i/((float)i-1);
}while(s<=broj);
Label4->Caption=IntToStr(i);
}
//---------------------------------------------------------------------------
118
FOR NAREDBA
Najvea primena for ciklusa je u formiranju brojakih ciklusa. Brojaki
cikllusi se koriste kada je poznato koliko puta e se ciklus izvriti. Kod brojakih
ciklusa postoji uvek jedna kontrolna promenljiva ija se vrednost menja od neke poetne
pa do neke krajnje vrednosti. Na kraju svakog prolaska kroz ciklus vrednost kontrolne
promenljive se promeni za neku stalnu vrednost, sve dok se ne stigne do krajnje
vrednosti.
for(kontprom=pocvrednost;kontprom<=kranjavrednost;kontprom+=korak) naredba;
Najee se kontrolna promenljiva na poetku postavlja na jedan, a korak za koji
se kontrolna promenljiva poveava jednaka je jedan.
Najei oblik for cilkusa kao brojakog ciklusa je:
for(kontprom=1;kontprom<=krajnjavrednost;kontprom++) naredba;
Vrednost promenljive krajnjavrednost pokazuje nam koliko e se puta for ciklus
izvriti. Ako je vrednost promenljive krajnjavrednost manja od 1 for ciklus se nee
nijednom izvriti.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Zbir_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
119
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
ShowMessage("Niste uneli podatak!!");
return;
}
int n,p,s;
n=StrToInt(Edit1->Text);
s=0;
p=1;
for(int i=1;i<=n;i++)
{
p*=i;
s+=p;
}
Edit2->Text=IntToStr(s);
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
Button1->Enabled=true;
Button2->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key)) Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
if(ed->Text=="" && Key=='0') Key=0;
}
}
//--------------------------------------------------------------------------Primer 68:
120
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad11za2_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=' ') Key=0;
else{
if(Edit1->Text=="" && Key=='0') Key=0;
else{
if(Key==' ') //Prihvata se da je broj unesen nakon pritiska tastera Space.
{
int i,n,s,fib,p,q;
n=StrToInt(Edit1->Text);
for(i=1;i<=n;i++)
{
if(i<3) //Zakonitost pocinje od treceg broja.
{
if(i==1) s=1,fib=1; //Prvi clan
else s=2,fib=1,p=q=1; //Drugi clan.
}else{
121
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "fORMDUGME_O.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
unsigned pom;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Obradjuje se dogadjaj FormCreate za sve komponente koje se dodaju formi.
122
unsigned i,j;
//Zaglavlje poruke o greski.
Application->Title="";
pom=1;
for(i=0;i<6;i++){
for(j=0;j<5;j++){
TButton* btn = new TButton(this); //Ovde se zapravo kreira tih 6 dugmica
btn->Parent = this; //Kreiraju se u lokalnu promenljivu, i onda im
dodelimo
//Parent-u i u konstruktoru ko mu je roditelj u
hierarhiji objekata
btn->Height=50; //Visina dugmeta.
btn->Width=50; //Sirina dugmeta.
btn->Top = 20+j*(btn->Height+20);
btn->Left = 20+i*(btn->Width+20);
btn->OnClick = ButtonXClick; //Svako dugme reagovace na dogadjaj
Click //sa imenom ButtonXClick.
btn->Tag = 5*i+j;
btn->Font->Size=12;
btn->Caption = IntToStr(j*6+i+1);
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::ButtonXClick(TObject *Sender)
{
TButton* btnx = dynamic_cast<TButton*>(Sender);
btnx->Visible=false; //Podesavanjem svojstva Visible na false komponente koja je
//primila dogadjaj Click dugme se nece videti na formi.
pom++;
if(pom==31) ShowMessage("BRAVO MAJSORE!!");
}
//--------------------------------------------------------------------------Primer 70:
Napisati aplikaciju koja na
osnovu unetog prirodnog broja n
formira inverzni broj kod koga su
cifre napisane u inverznom
poretku.
Reenje:
//---------------------------------------------------------------------------
123
#include <vcl.h>
#pragma hdrstop
#include "Dekubin.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned i,n,broj;
if(Edit1->Text=="")
{
Edit1->SetFocus();
return;
}
n=StrToInt(Edit1->Text);
i=1;
while(n>0)
{
if(i==1) broj=n%10; //Ako se dobija prva cifra.
else broj=10*broj+n%10; //Formula po kojoj se dodaje nova cifra.
n=n/10;
i++;
}
Label3->Caption=IntToStr(broj);
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
Label3->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
124
if(!isdigit(Key)) Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
if(ed->Text=="" && Key=='0') Key=0;
}
}
//--------------------------------------------------------------------------Primer 71:
Napraviti aplikaciju koja u toku formiranja Forme dinamiki formira u jednom redu red od
15 panela bele boje fonta veliine 14, podebljan i iskoen. irina i visina panela su jednaki i
iznose 30, a razmak izmeu panela je 10.
Natpisi na panelima su brojevi sluajni sa intervala 0 100. U zaglavlju programa ispisuje
se vrednost minimalnog i maksimalnog broja meu natpisima panela.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "stviri_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
int min,max;
//sa for ciklusom formiramo 15 Panela.
for(int i=1;i<=15;i++)
{
TPanel *pn=new TPanel(this);
pn->Parent=this;
pn->Width=30;
125
pn->Height=30;
pn->Left=20+(i-1)*(pn->Width+10);
pn->Top=20;
pn->Font->Size=14;
pn->Font->Style=TFontStyles()<<fsBold<<fsItalic;
pn->Color=clWhite;
int br=random(100); //Na slucajan nacin se generise broj.
pn->Caption=IntToStr(br); //Upise se broj kao natpis Panela.
//Tehnika odredjivanja maksimuma i minimuma.
if(i==1) min=max=br;
else{
if(br<min) min=br;
if(br>max) max=br;
}
}
Form1->Caption="Minimum = "+IntToStr(min)+"
Maksimum = "+IntToStr(max);
}
//---------------------------------------------------------------------------
Primer 72:
Naraviti aplikaciju koja na osnovu
unesenog prirodnog broja N izraunava
zbir prvih N lanova beskonanog niza kao
na slici. Program poseduje zatitu unosa
prirodnog broja. Prvi lan beskonanog
niza je 1. Elementi sa neparnim rednim
brojem dobijaju se tako to se vrednost
predhodnog lana uvea za tri, a elementi
sa parni rednim brojem tako to se
vrednost prethodnog lana pomnoi sa dva.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad10za2.h"
//---------------------------------------------------------------------------
126
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n,i;
long s=0,p;
bool kon=true;
if(Edit1->Text=="")
{
ShowMessage("Niste uneli podatak!!");
Edit1->SetFocus();
return;
}
n=StrToInt(Edit1->Text);
//Ciklus pocinje tek od treceg clana, pa se posebno ispituje sta ako je n=1 ili je n=2.
if(n==1) s=1;
else{
if(n==2) s=3;
else{
p=2; //Pocetne vrednosti promenljivih pre ulaska u ciklus.
s=3;
for(i=3;i<=n;i++)
{
//Ako je kon=true grana je neparna a u suprotnom je parna.
if(kon==true)
{
p+=3;
kon=false; //Prelazimo u parnu granu.
}else{
p*=2;
kon=true; //Prelazimo u neparnu granu.
}
s+=p;
}
}
}
Label6->Caption=IntToStr(s);
Button1->Enabled=false;
127
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Label6->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title="GRESKA...";
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!(Key>='0'&&Key<='9') && Key!=8) Key=0;
}
//---------------------------------------------------------------------------
Primer 73:
Napraviti aplikaciju koja omoguava
unos celobrojnog podatka,a potom utvruje da
li je on lan niza ili ne, te ako jeste ispisuje u
reenju koji je to lan, a u suprotnom izmeu
koja dva lana niza se nalazi.
Prvi lan beskonanog niza ima
vrednost 2, dok se ostali lanovi dobijaju tako
to se vrednost prethodnog lana sabira sa
brojem 4.
Program poseduje zatitu unosa pozitivnog celobrojnog podatka.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#include <string.h>
#pragma hdrstop
#include "Dknebude.h"
//---------------------------------------------------------------------------
128
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float broj,p;
int i=0;
if(Edit1->Text=="") return;
broj=StrToFloat(Edit1->Text);
p=-2, i=0; //Sa promenljivom p se prolazi kroz beskonacni niz.
do{
i++;
p+=4; //Zakonitost prelaska sa jednog clana niza na drugi clan.
}while(p<broj);
if(p==broj) Label4->Caption="To je "+IntToStr(i)+" clan niza.";
else{
if(i>1) Label4->Caption="Izmedju "+IntToStr(i-1)+" i "+IntToStr(i)+" clana niza.";
else Label4->Caption="Manji je od prvog clana niza.";
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 &&Key!='.') Key=0;
}
//--------------------------------------------------------------------------Primer 74:
Napraviti aplikaciju koja na osnovu unetog broja N sa
intervala 1..9 i pritiskom na dugme CRTAJ iscrtava sliku
zvezdica kao na slici.
Program poseduje zatitu unosa podatka.
Polje dozvoljava unos jednocifrenog pozitivnog broja.
U sluaju prevelikog unosa pojavljuje se poruka o greci u
vidu dijalog prozora. U polju za unos dozvoljeno je korienja
tastera BackSpace.
Slika zvezdica je smetena u jednu Labelu fonta 14 crne
boje fonta. Forma je dijaloka i nemenja se ne samo od strane
korisnika programa ve se ne menja ni u kodu programa.
129
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "slika_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s="";
int i,j,n;
if(Edit1->Text=="") return;
n=StrToInt(Edit1->Text);
if(n>9)
{
ShowMessage("Preveliko je N!!");
Edit1->Text="";
return;
}
//Formira se string od zvezdica i praznina.
for(i=1;i<=n;i++)
{
for(j=1;j<=i-1;j++) s+=" "; //Prvo se popunjavaju praznine.
for(j=1;j<=n;j++) s+="* "; //Popubjavanje sa zvezdicama.
s+="\n"; //Prelazak u novi red.
}
Label2->Caption=s;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!(Key>='1'&&Key<='9')&&Key!=8) Key=0;
}
130
//--------------------------------------------------------------------------Primer 75:
Napraviti aplikaciju koja omoguava unos
prirodnog broja Broj,a potom klikom na dugme
PRETVORI izbacuje cifru koja je podeena da se
izbaci izborom iz SpinEdita kao na slici.
Rezultat se prikazuje u obliku Labele crvene
boje. Klikom na dugme RESETUJJ program se
vraa u stanje pokretanja aplikacije.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Cifra_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
Edit1->Color=clRed;
Edit1->SetFocus();
return;
}
long n,cif,cf,nov,pom;
n=StrToInt(Edit1->Text);
cif=CSpinEdit1->Value;
nov=0, pom=1;
while(n!=0)
{
cf=n%10;
131
if(cif!=cf)
{
nov+=cf*pom;
pom*=10;
}
n/=10;
}
Label3->Caption=IntToStr(nov);
Edit1->Enabled=false;
CSpinEdit1->Enabled=false;
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Enabled=true;
Edit1->Clear();
Label3->Caption="????";
CSpinEdit1->Enabled=true;
CSpinEdit1->Value=0;
Button1->Enabled=true;
Button2->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Click(TObject *Sender)
{
Edit1->Color=clWhite;
}
//--------------------------------------------------------------------------Primer 76:
Napraviti aplikaciju koja prilikom formiranja
Forme dinamiki formira matricu od 20 Panela.
Paneli su oblika kvadrata bele boje, a natpisi
na Panelima su brojevi podebljani fonta 12.
Brojevi se prilikom formiranja Panela tako
rasporeuju da na kraju imaju izgled kao na slici.
Imamo utisak kao da su sortirani po reovima
naizmenino u rastuem ili opadajuem redosledu.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad6za3.h"
//---------------------------------------------------------------------------
132
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k=0,p;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
TPanel *pn = new TPanel(this);
pn->Parent=this;
pn->Color=clWhite;
pn->Font->Style=TFontStyles()<<fsBold;
pn->Caption=IntToStr(j+1+i*5);
pn->Width=50;
pn->Height=50;
pn->Font->Size=12;
pn->Top=30+i*80;
if(i%2==0) pn->Left=30+j*80;
else pn->Left=30+(4-j)*80;
}
}
this->Width=430; //Utvrdjuje se sirina forme.
this->Height=380; //Utvrdjuje se visina forme.
}
//--------------------------------------------------------------------------Primer 77:
Naraviti aplikaciju koja na osnovu
unesenog prirodnog broja N izraunava zbir
prvih N lanova beskonanog niza kao na
slici. Program poseduje zatitu unosa
prirodnog broja.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
133
#include "zad10za2.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n,i;
float s=0;
if(Edit1->Text=="")
{
ShowMessage("Niste uneli podatak!!");
Edit1->SetFocus();
return;
}
n=StrToInt(Edit1->Text);
for(i=1;i<=n;i++)
{
if(i==1)s=1;
else s+=(((float)i-1.0)*((float)i-1.0))/((float)i * i);
}
Label6->Caption=Format("%.3f",ARRAYOFCONST((s)));
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Label6->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title="GRESKA...";
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
134
{
if(!(Key>='0'&&Key<='9') && Key!=8) Key=0;
}
//--------------------------------------------------------------------------Primer 78:
Napraviti aplikaciju koja na osnovu zadatog
racionalnog broja utvruje koliko treba sabrati
lanova sume pa da zbir bude vei od unesenog
broja. Zakonitost sume se vidi sa slike. Klikom na
dugme RADI dobija se traeni odgovor. Program
poseduje zatitu unosa racionalnog pozitivnog
broja.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "borka.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float s=0,p,q;
int i,n,znak;
if(Edit1->Text=="")
{
Edit1->SetFocus();
return;
}
n=StrToInt(Edit1->Text);
znak=1;
p=q=0;
for(i=1;i<=n;i++)
{
p+=znak*i;
q+=i;
135
s+=p/q;
znak=-znak;
}
Label4->Caption=Format("%.3f",ARRAYOFCONST((s)));
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label4->Caption="????";
Edit1->Text="";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key)&&Key!=8)Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
if(ed->Text=="" && Key=='0') Key=0;
}
}
//--------------------------------------------------------------------------Primer 9:
Napraviti aplikaciju koja na osnovu
unesenog podatka o datumu roenja ispisuje u
Labeli veeg fonta crvene boje, dan u nedelji
kada ste roeni.
Program poseduje zatitu unosa
podataka: dana,meseca i godine.
Reenje
136
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Dan_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
Edit1->Color=clRed;
Edit1->SetFocus();
return;
}
int dan=StrToInt(Edit1->Text);
if(Edit2->Text=="")
{
Edit2->Color=clRed;
Edit2->SetFocus();
return;
}
int mesec=StrToInt(Edit2->Text);
if(Edit3->Text=="")
{
Edit3->Color=clRed;
Edit3->SetFocus();
return;
}
int god=StrToInt(Edit3->Text);
if(god<1900) //Godina nema smisla da je pre proslog veka.
{
Edit1->Color=clRed;
Edit1->Clear();
Edit1->SetFocus();
return;
}
if(mesec>12) //Mesec mora biti od 1 do 12.
137
{
Edit2->Color=clRed;
Edit2->Clear();
Edit2->SetFocus();
return;
}
//Neki meseci moraju imati 31 dan.
if((mesec==1||mesec==3||mesec==5||mesec==7||mesec==8||mesec==10||mesec==12)&&dan>31)
{
Edit1->Color=clRed;
Edit1->Clear();
Edit1->SetFocus();
return;
}
//Neki meseci imaju 30 dana.
if((mesec==4||mesec==6||mesec==9||mesec==11)&&dan>30)
{
Edit1->Color=clRed;
Edit1->Clear();
Edit1->SetFocus();
return;
}
bool par; //Sa par se utvrdjuje da li godina prestupna ili ne.
if(god%4==0 || god%400==0) par=true;
else par=false;
//Februar ako je godina prestupna ima 29 dana a u suprotnom 28 dana.
if((mesec==2 && par==true && dan>29) || (mesec==2 && par==false && dan>28))
{
Edit1->Color=clRed;
Edit1->Clear();
Edit1->SetFocus();
return;
}
int i;
long int k=0; //Sa k sabiramo ukupan broj dana od prve godine do datuma rodjenja..
for(i=1;i<=god-1;i++)
{
if(i%4==0 || i%400==0) k+=366;
else k+=365;
}
for(i=1;i<=mesec-1;i++)
{
switch(i)
{
138
case 1: case 3: case 5: case 7: case 8: case 10: case 12: k+=31;
break;
case 4: case 6: case 9: case 11: k+=30;
break;
case 2: if(god%4==0 || god%400==0) k+=29;
else k+=28;
break;
}
}
k+=dan; //Promenljiva sadrzi ukupan broj dana od prve godine do datuma rodjenja.
k=k%7; //dana u nedelji ima 7, te dovodimo da sada priomenljiva k ima vrednost od 0 do 6.
switch(k)
{
case 6: Label5->Caption="PETAK";
break;
case 0: Label5->Caption="SUBOTA";
break;
case 1: Label5->Caption="NEDELJA";
break;
case 2: Label5->Caption="PONEDELJAK";
break;
case 3: Label5->Caption="UTORAK";
break;
case 4: Label5->Caption="SREDA";
break;
case 5: Label5->Caption="CETVRTAK";
break;
}
Button1->Enabled=false;
Button2->Enabled=true;
GroupBox1->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label5->Caption="???????";
GroupBox1->Enabled=true;
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Click(TObject *Sender)
{
139
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "petorka_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel9Click(TObject *Sender)
{
TPanel *pn=dynamic_cast <TPanel *> (Sender);
140
141
142
Klikom na dugme ODREDI odreuje se zbir i upisuje u Labelu za prikaz rezultata zbira.
Ako je Memo prazan u Memo upisati da Nema niza!!
Klikom na dugme BRISI vri se brisanje polja za unos i Memo komponente i ponovo se u
Labelu upisuju etiri znaka pitanja.
Reenje
istog tipa;
Deklaracija vektora
tip naziv[veliina];
Preko naziv-a niza se pristupa nizu, a veliina mora da bude konstanta ili
konstantni izraz.
Na primer:
int x[10];
U memoriji se rezervie prostor (kao na slici).
X
A0
A1
A2
A3
A4
A5
143
A6
A7
A8
A9
Indeks niza moe biti i celobrojna promenljiva ili celobrojni izraz. Indeks niza je
promenljiva ili izraz koji se nalazi izmeu zagrada [ ].
Na primer:
int x[10];
unsigned i;
i=3, x[i]=5;
Ne sme se pisati x[11]=4; jer prilikom deklaracije niza nije rezervisano toliko memorijskog
prostora (prekoraenje opsega). Ovo je fatalna greka.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Zbir_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
#define MAX_NIZ 30
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
144
{
//Mogu se unet samo decimalne cifre, znak minus, backspace i Enter.
if(!isdigit(Key) && Key!=8 && Key!='-' && Key!='\r') Key=0;
else{
//Znak minus mo\e biti samo na pocetku broja.
if(Key=='-' && Edit1->Text!="") Key=0;
//Posle nule na prvom mestu ne moze se unositi nista.
if(Edit1->Text=="0" && Key!=8 && Key!=\r) Key=0;
if(Key=='0' && Edit1->Text=="-") Key=0;
//Ako smo pritisli Enter kraj je sa unosom broja i on se upisuje u Memo.
if(Key=='\r')
{
//Nema broja te se nema sta ni upisati u Memo.
if(Edit1->Text=="") Key=0;
else{
//Niz je ogranicen statickom memorijom vec pri deklaraciji niza
//i bila bi fatalna greska ako bi se pokusao uneti broj u niz a
//nema prostora za to.
if(Memo1->Lines->Count<MAX_NIZ)
Memo1->Lines->Add(Edit1->Text);
else{
//Zabranjujemo unos vise brojeva u polju unosa.
Edit1->Enabled=false;
ShowMessage("Prekoracenje memorije niza!!");
//Jedino sto moze je da klikne na dugme ODREDI
//te se zato na njega i fokusiramo.
Button2->SetFocus();
return;
}
Edit1->Clear();
}
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Memo1->Lines->Count==0)
{
Memo1->Lines->Add("Nema niza!!");
}else{
//Deklaracija niza
int x[MAX_NIZ],i,s,n;
//Prebacujemo brojeve iz Memo komponente u niz.
for(i=0;i<Memo1->Lines->Count;i++) x[i]=StrToInt(Memo1->Lines->Strings[i]);
145
146
147
148
{
Application->Title="GRESKA...";
}
//--------------------------------------------------------Primer 83:
Napraviti aplikaciju koja omoguava
formiranje niza X od n (n<31) elementa i
prikazuje ga u inverznom poretku u drugoj
Memo komponenti.
Niz se smeta u jedan Memo, a inverzni
niz u drugi Memo.
Program poseduje i kon trolu unosa
celobrojnog podatka.
Reenje
//-------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "minmax_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='-' && Key!='\r') Key=0;
else{
if(Key=='-' && Edit1->Text!="") Key=0;
if(Edit1->Text=="0" && Key!=8 && Key!=\r) Key=0;
if(Key=='0' && Edit1->Text=="-") Key=0;
if(Key=='\r')
{
if(Edit1->Text=="") Key=0;
else{
//Komponenta Memo pretstavlja niz a ne neki celobrojni niz
//sa ogranicenjem memorije kao u proslim zadacima.
Memo1->Lines->Add(Edit1->Text);
Edit1->Clear();
}
}
}
149
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Memo1->Lines->Count==0)
{
Memo1->Lines->Add("Nema niza!!");
}else{
int i,n;
n=Memo1->Lines->Count;
//Same Memo komponente su nizovi. Prolazimo kroz Memo1 od zanje linije prema
//prvoj liniji upisujemo tako liniju po liniju u Memo2 komponentu i tako nastaje i
//nverzan n iz.
Memo2->Lines->Clear();
for(i=n-1;i>=0;i--) Memo2->Lines->Add(Memo1->Lines->Strings[i]);
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->ReadOnly=false;
Memo1->Lines->Clear();
Memo2->Lines->Clear();
Edit1->SetFocus();
}
//-----------------------------------------Primer 84:
Napraviti aplikaciju koja
omoguava formiranje niza X od n
(n<31) elementa, a potom odreuje
broj pozitivnih, minimum meu
negativnim, maksimum i zbir svih
elemenata
niza
do
prvog
maksimuma.
Niz se smeta u jedan Memo,
a izvetaj u drugi Memo. Program poseduje i kontrolu unosa celobrojnog podatka.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "minmax_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
150
#define MAX_NIZ 30
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='-' && Key!='\r') Key=0;
else{
if(Key=='-' && Edit1->Text!="") Key=0;
if(Edit1->Text=="0" && Key!=8 && Key!=\r) Key=0;
if(Key=='0' && Edit1->Text=="-") Key=0;
if(Key=='\r')
{
if(Edit1->Text=="") Key=0;
else{
if(Memo1->Lines->Count<MAX_NIZ)
Memo1->Lines->Add(Edit1->Text);
else{
Edit1->Enabled=false;
ShowMessage("Prekoracenje memorije niza!!");
Button2->SetFocus();
return;
}
Edit1->Clear();
}
}
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Memo1->Lines->Count==0)
{
Memo1->Lines->Add("Nema niza!!");
}else{
int x[MAX_NIZ],i,n,min,max,s,brp;
bool kon;
for(i=0;i<Memo1->Lines->Count;i++) x[i]=StrToInt(Memo1->Lines->Strings[i]);
n=Memo1->Lines->Count;
151
//Logicka promenljiva kon bice false sve dok se ne pojavi prvi negativan broj. Ako
//negativnih brojeva nema, promenljiva ce imati posle ciklusa i dalje vrednost false.
kon=false;
brp=0;
max=x[0];
for(i=0;i<n;i++)
{
if(x[i]>0) brp++;
if(x[i]>max) max=x[i];
if(x[i]<0)
{
//Pojavio se negativan broj, Prilikom trazenja minimuma mora se prvi broj
//proglasiti da je minimum, a da li je prvi negativan znamo po vrednosti
//logicke promenljive kon. Ako promenljiva kon ima vrednost false znak
je //da je to prvi negativan broj.
if(kon==false)
{
//Logicka prommenljiva kon sada ima vrednost kon jer smo pronasli prvi
//negativan broj, a svi ostali i ako su mozda negativni nisu prvi.
kon=true;
min=x[i];
}else{
if(x[i]<min) min=x[i];
}
}
}
//Trazi se prolazak kroz deo niza ili ceo niz, a tada se koristi while ciklus. U uslovu
//while ciklusa mora postojati uslov prekida cikl;usa. Prolazimo kroz niz dok ne
//dodjemo do kraja niza ili ne nadjemo prvi maksimum.
s=0;
i=0;
while(i<n && x[i]!=max) s+=x[i],i++;
//Prvo prikazujemo broj pozitivnih jer tu nema nikakvih uslova.
Memo2->Lines->Clear();
Memo2->Lines->Add("Broj pozitivnih = "+IntToStr(brp));
Memo2->Lines->Add("");
//Sada nam logicka promenljiva kon sluzi da utvrdimo da li je bilo negativnih brojeva u
//nizu ili ne. Ako promenljiva kon ima vrednost true bilo je negativnih brojeva.
if(kon==true) Memo2->Lines->Add("Minimim medju negativnim = "+IntToStr(min));
else Memo2->Lines->Add("Niz nema negativnih brojeva!!");
Memo2->Lines->Add("");
//Sada se prikazuje maksimum i zbir do prvog maksimuma.
152
Memo2->Lines->Add("Maksimum = "+IntToStr(max));
Memo2->Lines->Add("Zbir do prvog maksimuma = "+IntToStr(s));
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Enabled=true;
Edit1->ReadOnly=false;
Memo1->Lines->Clear();
Memo2->Lines->Clear();
Edit1->Clear();
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title="GRESKA...";
}
//--------------------------------------------------------Primer 85:
Napraviti aplikaciju koja omoguava
formiranje niza A od n (n<31) elementa i na
osnovu njega formira novi niz B koga
pretstavljaju pozitivni elementi niza A.
Niz A se smeta u jedan Memo, a niz B u
drugi Memo.
Program poseduje i kontrolu unosa
celobrojnog podatka.
Reenje
//-------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "minmax_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
#define MAX_NIZ 30
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
153
154
}
Memo2->Lines->Clear();
if(k==0) Memo2->Lines->Add("Nema niza!!");
else{
for(i=0;i<k;i++) Memo2->Lines->Add(IntToStr(b[i]));
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Enabled=true;
Edit1->ReadOnly=false;
Memo1->Lines->Clear();
Memo2->Lines->Clear();
Edit1->Clear();
Edit1->SetFocus();
}
//--------------------------------------------------------------------------Primer 86:
Napisati deo C koda koji vri:
a) cirkularnu rotaciju niza X od n elemenata za jedno mesto u desno,
b) cirkularnu rotaciju niza X od n elemenata za jedno mesto u levo,
c) izbacivanje iz niza X od n elemenata, sve one elemente koje imaju odreenu
vrednost,
d) sortira niz X od n elemenata u rastuem redosledu, i
e) proirivanje niza X od n elemenata umetanjem elementa kljuc na poziciju k..
Reenje:
a)
pom=x[n-1];
i=n-1;
while(i>0) x[i]=x[i-1],i--;
x[0]=pom;
b)
pom=x[0];
i=1;
while(i<n-1) x[i]=x[i+1],i++;
x[n-1]=pom;
c)
Sazimanje niza izbacivanjem onih elemenata koji imaju istu vrednost kao
promenljiva izbaci.
/*Veliki problemi nastaju ako bi se u ovom primeru koristio for ciklus kao
brojacki ciklus za prolazak kroz niz. Kako for ciklus najcesce povecava brojac za
1 to u slucaju da se u nizu jedan do drugog nalazi vise elemenata koji imaju
vrednost izbaci, nece svi biti izbaceni iz niza, jer se prilikom zavrsetka iteracije
brojac poveca za jedan a nama se nakon pomeranja (sazimanja niza za jedno
155
mesto) sledeci element niza koji ima vrednost izbaci pomerio na mesto gde smo
izbacili prethodni element, tada se brojac pomeri za jedan i nama ostane ne
izbaceni element. */
i=0;
while(i<n)
{
while(x[i]!=izbaci) i++;
if(i<n-1)
{
/*Pomeranje niza u levo za jedno mesto. */
for(k=i+1;k<n;k++) x[k-1]=x[k];
x[n-1]=0;
n--; /*Obaveyno smanjiti n za jedan jer niz nakon
ima jedan element manje. */
} else{
if(i==n-1) x[n-1]=-0,n--;
/*U slucaju da je izbaci poslednji element niza. */
}
}
d)
e)
Prosirivanje niza.
j=n;
while(j>k) x[j]=x[j-1],j--;
x[k]=kljuc;
n++;
//--------------------------------------------------------------------------Primer 87:
156
izbacivanja
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "pravo_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString ss;
int a[30],n,i;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int j;
i=0;
ss=""; //Inicijalizacija stringa.
for(j=0;j<30;j++) a[j]=0; //Inicijalizacija niza. Niz se inicijalizuje pomocu ciklusa.
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(Edit1->Text=="") return;
n=StrToInt(Edit1->Text);
if(n>30)
{
ShowMessage("Pogresno unet N!!");
return;
}
//Dugmadi Button3 i Button4 su sakriveni, a kako su po Default-u true, to reaguju na
taster //Ender kao da ste na njega kliknuli iako ga na formi ne vidite. Sa svojstvom
Enabled //podesavamo da samo jedan od dugmadi bude aktivan kako bi pravi reagovao na
taster Enter.
157
158
pom=a[0];
j=0;
while(j<n-1)
{
a[j]=a[j+1];
j++;
}
a[n-1]=pom;
}
ss="";
for(i=0;i<n;i++)
{
ss+=IntToStr(a[i])+" ";
Label6->Caption=ss; //Ispis niza nakon izvrsene rotacije.
}
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button2->Enabled=false;
Button3->Enabled=true;
Edit1->Enabled=true;
Edit1->Clear();
Edit1->SetFocus();
Label4->Caption="";
Label6->Caption="";
for(i=0;i<n;i++) a[i]=0; //Brisu se elementi prethodnog niza.
i=0; //Indeks formiranja niza je na nuli.
ss=""; //Inicijalizacija stringa.
}
//-----------------------------------------Primer 88:
Napraviti aplikaciju koja omoguava
unos celobrojnog niza A od N (N<30)
elemenata, a potom u Memo komponenti
prikazuje izvetaj o ekstremima niza.
Prvi red Memo komponente sadri
tekstove VREDNOST i TIP razdvojenih
tabulatorom. Ostale redove ine vrednost
elementa niza koji je ekstrem i tip ekstrema.
Tip ekstrema moe biti: MINIMUM (ako je
159
element niza manji od svog sledbenika i prethodnika) i MAKSIMUM (ako je element niza vei
od svog prethodnika i sledbenika).
Postoji poseban unos broja N, a pos eban gde se unose elementi niza. Program poseduje
zatitu unosa celobrojnog podatka sa jednim dogaajem OnKeyPress, kao i zatitu da broj N bude
prirodan broj i ne vei od 29.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "pravo_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString ss;
int a[30],n,i;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int j;
i=0;
ss="";
for(j=0;j<30;j++) a[j]=0;
Memo1->Lines->Clear();
Memo1->Lines->Add("VREDNOST
TIP");
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(Edit1->Text=="") return;
n=StrToInt(Edit1->Text);
if(n>30)
{
ShowMessage("Pogresno unet N!!");
return;
}
160
Button3->Enabled=false;
Button4->Enabled=true;
Edit1->Enabled=false;
Edit2->Enabled=true;
Edit2->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(Edit2->Text=="") return;
a[i]=StrToInt(Edit2->Text);
i++;
ss+=Edit2->Text+" ";
Label4->Caption=ss;
Edit2->Clear();
Edit2->SetFocus();
if(i==n)
{
Button4->Enabled=false;
Button1->Enabled=true;
Edit2->Enabled=false;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
for(i=1;i<n-1;i++)
{
if(a[i]>a[i-1] && a[i]>a[i+1]) Memo1->Lines->Add(" "+
IntToStr(a[i])+"
if(a[i]<a[i-1] && a[i]<a[i+1]) Memo1->Lines->Add(" "+
IntToStr(+a[i])+"
}
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button2->Enabled=false;
Button3->Enabled=true;
Edit1->Enabled=true;
Edit1->Clear();
Edit1->SetFocus();
Label4->Caption="";
161
MAKSIMUM");
MINIMUM");
for(i=0;i<n;i++) a[i]=0;
i=0;
ss="";
Memo1->Lines->Clear();
}
//--------------------------------------------------------------------------Primer 89:
Napraviti aplikaciju
koja omoguava formiranje
niza X od n (n<31)
elementa i potom vri
transformaciju niza tako to
prvo odredite vrednosti
minimuma i maksimuma,
saimate niz izbacivanjem
svih
minimalnih
i
maksimalnih,
a
potom
minimalne dodajete na
poetak niza proirivanjem
niza i na kraju dodajete
maksimalne na kraj niza.
Niz X se smeta u
jedan Memo, a nakon
transformacija
u
drugi
Memo. Program poseduje i kontrolu unosa celobrojnog podatka.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "minmax_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
#define MAX_NIZ 30
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='-' && Key!='\r') Key=0;
else{
162
163
164
Visine devojica upisuje se u prvi memo, a visine deaka u drugi Memo. Klikom na dugme
UTVRDI utvruje se prosena visina deaka i prosena visina devojica i kao posebni podatak
upisuju kao poslednji red Memo komponenti.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Zbir_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='-' && Key!='\r') Key=0;
else{
if(Key=='-' && Edit1->Text!="") Key=0;
if(Edit1->Text=="0" && Key!=8 && Key!='\r') Key=0;
if(Key=='0' && Edit1->Text=="-") Key=0;
if(Key=='\r')
{
if(Edit1->Text=="" || StrToInt(Edit1->Text)==0) Key=0;
165
else{
int k=StrToInt(Edit1->Text);
//Utvrdjujemo da li je visina u granicama od 141 do 250.
if(abs(k)>250 || abs(k)<140) Key=0;
else{
//Utvrdjujemo da li je unesena visina decaka ili devojcice
//i upisujemo podatak u odgovarajucu Memo
//komponentu.
if(k>0)Memo1->Lines->Add(Edit1->Text);
else{
int k=StrToInt(Edit1->Text);
k=-k;
Memo2->Lines->Add(IntToStr(k));
}
}
Edit1->Clear();
}
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
//Onemogucava se unos podataka ako je sracunata srednja visina i vizuelno se bojom
//prikazuje da je unos nemoguc.
Edit1->ReadOnly=true;
Edit1->Color=clActiveBorder;
//Sracunava se srednja visina decaka.
if(Memo1->Lines->Count==0)
{
Memo1->Lines->Add("Nema decaka!!");
}else{
int s=0;
for(int i=0;i<Memo1->Lines->Count;i++)
{
s+=StrToInt(Memo1->Lines->Strings[i]);
}
float sr=(float)s/Memo1->Lines->Count;
Memo1->Lines->Add("********************");
Memo1->Lines->Add("Srednja visina: "+Format("%.1f",ARRAYOFCONST((sr))));
}
//Izracunava se srednja visina devojcica.
166
if(Memo2->Lines->Count==0)
{
Memo2->Lines->Add("Nema devojcica!!");
}else{
int s=0;
for(int i=0;i<Memo2->Lines->Count;i++)
{
s+=StrToInt(Memo2->Lines->Strings[i]);
}
float sr=(float)s/Memo2->Lines->Count;
Memo2->Lines->Add("********************");
Memo2->Lines->Add("Srednja visina: "+Format("%.1f",ARRAYOFCONST((sr))));
}
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo1->Lines->Clear();
Memo2->Clear();
Edit1->ReadOnly=false;
Edit1->Color=clWhite;
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------Primer 91:
Napraviti aplikaciju koja
omoguava
unos niza brojeva i smeta ga u komponentu
Memo. Potrebno je bez korienja pomonih
niozova osim komponenti Memo1 i Memo2, u
komponentu Memo2 upisati samo brojeve iz
komponente Memo1 bez ponavljanja. Program
poseduje i kontrolu unosa celobrojnog podatka.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "minmax_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
167
168
Memo1->Lines->Clear();
Memo2->Lines->Clear();
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
Primer 92:
Napraviti aplikaciju koja se sastoji od niza od 15 Panela bele boje u jednom redu.
Paneli su sa natpisima koji pretstavljaju brojeve dobijene na sluajan nain. Ispod Panela
nalaze se dve Labele, sa tekstovima i i j.
Program pravi simulaciju ortiranja niza u rastuem redosledu. Panel gde se nalazi
indeks i je crvene boje, a panel gde se nalazi indeks j je plave boje.
Jedna iteracija prilikom sortiranja ekvivalentna je jednom pritisnutom tasteru
Enter.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "stviri_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPanel *np[15]; //Niz Panela.
TLabel *lb[2]; //Niz Labela.
int i,j,n; //Indeksi sortiranja i i j a n je broj Panela koji se sortira.
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
n=15; //Inicijalizujemo broj Panela.
randomize();
169
170
lb[1]->Font->Style=TFontStyles()<<fsBold;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
//Iteracija sortiranja niza se odvija pritiskom na taster Enter, te iz tog razloga koristimo
//dogadjaj OnKeyPress.
if(Key!='\r') Key=0;
else{
//Proveravamo uslov prilikom sortiranja brojeva u rastucem redosledu.
if(StrToInt(np[j]->Caption)<StrToInt(np[i]->Caption))
{
AnsiString pom;
//Vrsimo zamenu natpisa na Panelima.
pom=np[i]->Caption;
np[i]->Caption=np[j]->Caption;
np[j]->Caption=pom;
}
if(i==n-2) return; //Uslova kada je sortiranje zavrseno.
//Prilikom sortiranja niza indeks i je indeks spoljasnje petlje, dok je indeks j indeks
//unutrasnje petlje. To znaci da indeks i stoji dok se indeks j menja. Indeks i se
//menja tek kada indeks j dodje do kraja niza.
if(j==n-1)
{
//Indeks j je stigao do kraja niza.
np[n-1]->Color=clWhite; //Gde je bio postaje ponovo bele boje.
//Kada j dodje do kraja niza znak je da je unutrasnji ciklus zavrsen i prelazi
se //na spoljasnji ciklus gde se indeks i povecava za jedan, a potom se
ponovo //ulazi u unutrasnji ciklus gde indeks j postaje i+1.
i++;
j=i+1;
np[j]->Color=clBlue; //Panel gde se sada indeks j nalazi postaje plav.
np[i-1]->Color=clWhite; //Prethodni Panel gde je i bio postaje beo.
np[i]->Color=clRed; //Panel gde se sada indeks i nalazi postaje crven.
}else{
j++; //Unutrasnji je ciklus te se samo j pomera.
np[j]->Color=clBlue; //Panel gde se indeks j sada nalazi postaje plav.
np[j-1]->Color=clWhite; //Panel gde je indeks j bio postaje beo.
}
lb[0]->Left=30+i*40; //Pomeramo Labele koje prikazuju indekse i i j.
171
lb[1]->Left=30+j*40;
}
}
//-------------------------------------------------------------------Primer 93:
Napraviti aplikaciju koja kada se pokrene dinamiki
formira niz Panela, istih dimenzija, ute boje, crne boje
fonta natpisa, font je boldovan i veliine 12.
Na formi se nalaze i dve RadioGroup komponente
kojom se moe birati boja fonta natpisa Panela i boja
Panela. Paneli su rasporeeni po redovima i to u pet
redova po pet Panela. Natpisi na Panelima su brojevi od
1..25 rasporeeni svi sa leva na desno.
Boja fonta natpisa Panela moe biti: crna, crvena,
plava i zelena. Boja pozadine moe biti: uta, siva i bela.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Paneli_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPanel *niz[25];
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
TPanel *pn=new TPanel(this);
pn->Parent=this;
pn->Color=clYellow;
pn->Width=30;
172
pn->Height=30;
pn->Font->Color=clBlack;
pn->Caption=IntToStr(5*i+j+1);
pn->Left=RadioGroup1->Left+j*(pn->Width+20);
pn->Top=150+i*(pn->Height+20);
pn->Font->Style=TFontStyles()<<fsBold;
niz[5*i+j]=pn;
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
switch(RadioGroup1->ItemIndex)
{
case 0: niz[0]->Font->Color=clBlack;
break;
case 1: niz[0]->Font->Color=clRed;
break;
case 2: niz[0]->Font->Color=clBlue;
break;
case 3: niz[0]->Font->Color=clGreen;
break;
}
int i;
for(i=1;i<25;i++) niz[i]->Font->Color=niz[0]->Font->Color;
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup2Click(TObject *Sender)
{
switch(RadioGroup2->ItemIndex)
{
case 0: niz[0]->Color=clYellow;
break;
case 1: niz[0]->Color=clGray;
break;
case 2: niz[0]->Color=clWhite;
break;
}
int i;
for(i=1;i<25;i++) niz[i]->Color=niz[0]>Color;
}
//----------------------------------------------------
Primer 94:
173
Napraviti aplikaciju koja omoguava unos prirodnog broja N, a unos je prihvaen kada je
pritisnut taster Enter, a potom u Memo komponenti prikazuje broj pojavljivanja odabranih cifara.
Nakon unosa broja polja za unos vie nije aktivno a aktivna je komponenta GroupBox sa
komponentama CheckBox. Ako je ekiran CheckBox ta cifra se pojavljuje u Memo izvetaju a u
suprotnom ne.
U Memo izvetaju cifre i ako se dodaju za posmatranje uvek je ureen po rastuem
redosledu u odnosu na cifre koje se posmatraju.
Klikom na dugme PONISTI nestaje izvetaj i aplikacija se vraa u poetno stanje.
Reenje
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x[10];
TCheckBox *niz[10];
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i;
Edit1->Clear();
Memo1->Enabled=false;
GroupBox1->Enabled=false;
for(i=0;i<10;i++)
{
TCheckBox *bx=new TCheckBox(this);
bx->Parent=GroupBox1; //Svi CheckBox-ovi pripadaju grupi GroupBox1
niz[i]=bx;
bx->Checked=false;
bx->OnClick=Klik; //Svaki CheckBox reaguje na dogadjaj OnClick pod imenom
//Klik.
bx->Height=15;
bx->Width=150;
bx->Left=10;
bx->Top=20+i*(10+bx->Height);
switch(i)
{
case 0: bx->Caption="Pojava broja 0";
174
break;
case 1: bx->Caption="Pojava broja 1";
break;
case 2: bx->Caption="Pojava broja 2";
break;
case 3: bx->Caption="Pojava broja 3";
break;
case 4: bx->Caption="Pojava broja 4";
break;
case 5: bx->Caption="Pojava broja 5";
break;
case 6: bx->Caption="Pojava broja 6";
break;
case 7: bx->Caption="Pojava broja 7";
break;
case 8: bx->Caption="Pojava broja 8";
break;
case 9: bx->Caption="Pojava broja 9";
break;
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Klik(TObject *Sender)
{
int i;
//Brisemo prethodni izvestaj iz komponente Memo.
Memo1->Lines->Clear();
//Prolazimo kroz sve CheckBox-ove i utvrdjujemo ko je kliknut. Moramo to raditi
da //bi prikaz pojave cifara bio po redu.
for(i=0;i<10;i++)
{
if(niz[i]->Checked==true)
{
//Resenje se svodi u tome da vrednost indeksa niza X predtstavlja `
//odgovarajucu cifru. Znaci indeks i je cifra a z[i] je broj pojave te cifre.
Memo1->Lines->Add("Broj "+IntToStr(i)+
" pojavio se "+IntToStr(x[i])+" puta.");
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
for(int i=0;i<10;i++) niz[i]->Checked=false; //Nista nije cekirano.
175
GroupBox1->Enabled=false;
Memo1->Lines->Clear();
Memo1->Enabled=false;
Button2->Enabled=false;
Button2->Enabled=true;
Edit1->Enabled=true;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,pom;
if(Edit1->Text=="")
{
ShowMessage("Niste uneli broj!!");
return;
}
//Promenl;jiva pom je vrednost unesenog broja. Izdvajamo cifru po cifru.
pom=StrToInt(Edit1->Text);
while(pom!=0)
{
x[pom%10]++; //pom%10 je cifra, a x[pom%10] je broj pojave te cifre.
pom/=10;
}
Edit1->Enabled=false;
Button1->Enabled=false;
Button2->Enabled=true;
Memo1->Enabled=true;
GroupBox1->Enabled=true;
}
//---------------------------------------------------------------------------
Primer 95:
Napraviti
aplikaciju
koja
omoguava premetanje Labele. Labela
je plave boje pozadine i nema nikakav
tekst.
. Premetanjem Labele, Labela
ostaje plave boje. Pritiskom na desni
taster mia onemoguava se dalje
premetanje Labele, a pri vrhu forme
pojavljuje se centrirani tekst u odnosu
na irinu forme sa sadrajem LABEL
SE VISE NEMOZE POMERATI
Prilikom realizacije programa koristiti dogaaje OnDragDrop i OnDragOwer.
176
Reenje
Odvlaenje Drag&Drop deava se kada se mi dovede iznad odreene komponente I
pritisne se levi taster mia. Dok je taster mia pritisnut pokaziva mia se pomeri na drugo mesto,
esto iynad neke komponente. Koponenta iznad koje je zapoeto odvlaenje naziva se izvorite, a
komponenta iznad koje se zavrava odvlaenje naziva se odredite.
Svojtvo DragMode predstavlja nain odvlaenja. Vrednosti su dmAutomatic (komponenta
je stalno spremna za odvlaenje) i dmManual (komponenta nijec stalno spremna za odvlaenje
ve se mora prvo pripremiti podeavanjem).
Dogaaj OnDragOver deava se u toku odvlaenja. Sender je komponenta iznad koje se
nalazi pokaziva mia. Source je komponenta koja se odvlai. X i Y su koordinate mia iznad
tekue komonente. Aceppt odreuje da operacija sme da se zavri iznad tekue komponente ako
je njena vrednost true.Ako se iznad komponente desilo odvlaenje a Accept ima vrednost true
desie se dogaaj OnDragDrop.
Dogaaj OndragDrop deava se komponenti iznad koje je odvlaenje neke druge
komponente zavreno. Sender je komponenta iznad koje se nalazi pokaziva mia. Source je
komponenta koja se odvlai. X i Y su koordinate mia iznad odredine komponente.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Vuci_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool kon=true;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::FormDragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
Accept = Source->ClassNameIs("TLabel");
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormDragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
int k,m;
//Promenljive k i m pretstavljaju koordinate granica premestanja Labele.
k=Form1->Width-Label1->Width;
177
m=Form1->Height-2*Label1->Height;
//Ako se proba preci van granica postavljamo ispravan polozaj Labele.
if((X>k)||(Y>m)||(X<0)||(Y<0))
{
if(X<0) X=0;
if(Y<0) Y=0;
if(X>k) X=k;
if(Y>m) Y=m;
}
//Labela se moze pustiti bilo gde na formu.
TForm *DestList = (TForm *)Sender;
DestList->Font = ((TLabel *)Source)->Font;
//Labela koja se premesta dobija svoje koordinate.
((TLabel *)Source)->Left=X;
((TLabel *)Source)->Top=Y;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Label1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
switch(Button)
{
case mbLeft: if(kon==true) Label1->DragMode=dmAutomatic;
//Moze se premestati ako ranije nije kliknut desi taster misa jer ce tada
//logicka promenljiva kon imati vrednost false.
break;
case mbRight: Label1->DragMode=dmManual; //Ne moze se premestati.
kon=false;
Label2->Visible=true;
Label2->Caption="LABEL SE VISE NEMOZE POMERATI";
Label2->Left=(this->Width-Label2->Width)/2;
break;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
//Aplikacija se zatvara i ako se pritisne taster Esc.
if(Key==27) Application->Terminate();
}
//---------------------------------------------------------------------------
Primer 96:
Napraviti
aplikaciju
koja
formira dva reda Panela sa brojevima
178
kao natpisi od 1 do 5. Mogue je izvriti premetanje Panela tako to Panel premetamo na Panel
koji ima isti natpis.
Mogu se premetati samo Paneli iz donjeg reda. Kada naie nad Panelom koji ima isti
natpis mogue je zavriti sa prevlaenjem i tada Panel iz gornjeg reda postaje crvene boje.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "formiranje_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=0;i<5;i++)
{
TPanel *pn=new TPanel(this);
pn->Parent=this;
pn->Height=50;
pn->Width=50;
pn->Top=20;
pn->Left=20+i*60;
pn->Caption=IntToStr(i+1);
pn->Tag=i;
pn->Font->Size=12;
pn->Color=clWindow;
pn->DragMode=dmManual;
pn->OnDragDrop=DragDrop;
pn->OnDragOver=DragOver;
}
for(int i=0;i<5;i++)
{
TPanel *pn=new TPanel(this);
pn->Parent=this;
pn->Height=50;
pn->Width=50;
179
pn->Top=100;
pn->Left=20+i*60;
pn->Caption=IntToStr(i+1);
pn->Tag=i;
pn->Font->Size=12;
pn->DragMode=dmAutomatic;
pn->OnDragDrop=DragDrop;
pn->OnDragOver=DragOver;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::DragDrop(TObject *Sender, TObject *Source, int X,int Y)
{
TPanel *pn1=dynamic_cast <TPanel *> (Sender);
TPanel *pn2=dynamic_cast <TPanel *> (Source);
if((pn1->Caption)==(pn2->Caption))
{
pn2->Visible=false;
pn1->Color=clRed;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState
State, bool &Accept)
{
TPanel *pn=dynamic_cast <TPanel *> (Source);
if(pn) Accept=true;
else Accept=false;
}
//---------------------------------------------------------------------------
Primer 97:
Napraviti
aplikaciju
koja
prilikom startovanja ima izgled kao
slika sa leve strane, kao da je stao
jedan Panel kvadratnog oblika sa
slike sa desne strane.
U zaglavlju forme nema teksta. Aplikacija
reaguje samo na taster decimalne cifre 1 9.
Pritiskom na neki od tih tastera forma se iri i
omoguava formiranje matrice Panela nnn
pravilnog rasporeda, gde n pretstavlja broj Panela
po redu i ujedno broj redova, a vrednost mu je
jednaka vrednosti pritisnutog tastera. Natpisi na
Panelima su sluajni brojevi.
180
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "PANEL_O.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key>'9' || Key<'1') Key=0; //Mora biti pritisnut taster sa intervala 1 -9
else{
int n=Key-48; //ASSCII kod broja 0 je 48, tj redni broj karaktera '0' je 48.
//Prilikom projektovanja ili dinamikog formiranja komponente, programsko
//okruyrnje Borland C++ Builder automatski adrese komponenti upisuje u svoj niz
//pokazivaca na komponente Components, koji ima ComponentCount
elemenata. //Takodje prilikom brisanja komponente sa metodom Free(), brise se
element iz //niza Components automatski i automatski se menja vrednost
svojstva //ComponentCount. Ako nema brisanja komponenti vec samo formiranja
moglo bi //doci do blokiranja programa zbog zauzetosti memorije. Iz tog razloga u
ovom //primeru prvo se vrsi brisanje svih komponenti sa forme koriscenjem
while //ciklusa.
while(ComponentCount!=0)
{
Components[0]->Free(); //Metodom Free brise se komponenta.
}
//Formiramo matricu Panela.
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
TPanel *pn = new TPanel(Sender);
pn->Parent=this;
pn->Width=30;
pn->Height=30;
pn->Caption=IntToStr(random(100));
181
pn->Color=clWhite;
pn->Font->Size=14;
pn->Font->Style=TFontStyles()<<fsBold;
pn->Left=10+j*(pn->Width+10);
pn->Top=10+i*(pn->Height+10);
}
}
//Menjamo velicinu forme sobzirom na broj komponenti na njoj.
this->Width=(n+1)*40-25;
this->Height=(n+1)*40;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
this->Height=80; //Minimalna visina forme.
this->Width=55; //Minimalna sirina forme.
}
//-------------------------------------------------
Primer 98:
Napraviti aplikaciju koja se sastoji
od jedne komponente ListBox i vie
Memo komponenti. Kroz LisBox se
kreemo strelicama ili klikom na naku od
stavki. Prilikom kretanja samo jedna
stavka je aktivna.
Stavke ListBoxa
su tipovi podataka u C++ jeziku. U
odgovarajuoj
Memo
komponenti
prikazane su osobine izabranog tipa
podatka.
Reenje
Komponenta ListBox
(okvir sa listom) sadri listu iz koje korisnik moe da izabere
jednu ili vie stavki. Okvir sa listom je komponenta tipa TlistBox i nalazi se na kartici Standard,
na paleti komponenti.
Svojstva:
Items Predstavljaju listu stavki koje se nalaze u okviru sa listom.
Tipa je TStrings.
Sorted Svojstvo je tipa bool sa vrednou true ako je lista svakog trenutka ureena po
abecednom redosledu. Podrazumevana vrednost false oznaava da lista nije
ureena po abecednom redosledu i da se sve stavke prikazuju u redosledu kako
su dodavane u listu.
182
183
Primer 99:
Naraviti aplikaciju koja omoguava
uitavanje liste od 12 igraa iz tekstualne
datoteke i njeno smetanje u ListBox
komponentu prilikom startovanja programa iz
tekstualne
datoteke
SPISAK.TXT.
Automatski je izvreno i sortiranje po
abecednom redosledu. Prva stavka ListBox
komponente je aktivna. Sa njene desne strane
nalazi se druga ListBox komponenta gde nema
imena igraa. Izmeu ove dve komponente
nalaye se dva dugmeta. Dugme sa natpisom
>> premeta selektovanog igraa sa levog na
desni ListBox, pri emu desni ListBox moe
imati najvie pet imena. Drugo dugme sa natpisom << premeta imena igraa sa desnog na levi
ListBox.
Reenje
#include <vcl.h>
#pragma hdrstop
#include "Levodesno_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
184
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
ListBox1->Items->LoadFromFile("Spisak.txt"); //Ucitava se datoteka u ListBox
ListBox1->ItemIndex=0;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int poz;
if(ListBox2->Items->Count<5)
{
//Premestamo stavku iz prvog ListBox-a u drugi.
poz=ListBox1->ItemIndex;
ListBox2->Items->Add(ListBox1->Items->Strings[poz]);
ListBox1->Items->Delete(poz);
ListBox1->ItemIndex=poz;
}else ShowMessage("Ne moze vise od 5 igraca!!");
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
int poz;
if(ListBox2->Items->Count>0)
{
//Premestamo stavku iz drugog ListBox-a u prvi.
poz=ListBox2->ItemIndex;
ListBox1->Items->Add(ListBox2->Items->Strings[poz]);
ListBox2->Items->Delete(poz);
}else ShowMessage("Nema se sta prebaciti!!");
}
//---------------------------------------------------------------------------
Primer 100:
Napraviti
aplikaciju
koja pomou ComboBox
komponente menja veliinu
fonta Labele.
Stavke ComboBox-sa su: 8, 9,
10, 11, 12, 14, 16, 18, 20,
22,
24, 26, 28, 36, 48 I 72.
Prilikom starovanja
aplikacije
tekst
u
ComboBox-u je 12, a I veliina fonta Labele je 12. Klikom na jeziak
komponente ComboBox pojavljuje se spisak opcija a oznaena je samo jedna
opcija sa brojem 12.
185
Svojstva:
Text Tipa je String i predstavlja kao i kod edita sadraj okvira za tekst.
Items Tipa je TStrings I sadri listu stavki od kojih moe da se odabere jedna. Odabrana
stavka e se pojaviti kao novi sadraj svojstva Text.
ItemIndex Predstavlja indeks odabrane stavke. Tipa je int. Podrazumevana vrednost -1
oznaava da nijedna stavka nije odabrana.
Sorted Svojstvo je tipa bool sa podrazumevanom vrednou false to oznaava da lista
nije ureena po abecednom redosledu.
DropDownCount Svojstvo je tipa int i odreuje najvei broj stavki kiji se prikazuje u
padajuoj listi. Ako je broj stavki u celoj listi vei, korisnik e morati
prelistavati deo po deo liste. U tom sluaju mora postojati i uspravni
kliza. Podrazumevana vrednost ovog svojstva je 8.
AutoDropDown Svojstvo je tipa bool sa podrazumevanom vrednou false to oznaava
da se lista otvara kada korisnik pritisne strelicu nadole na desnom kraju
komponente ili kombinacijom tastera alt+strelica nadole. Vrednost true
oznaava da se lista automatski otvara im korisnik pone sa unosom
teksta.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Opcija_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
186
Primer 101:
Napraviti aplikaciju koja omoguava prikaz izabrane stavke ComboBox-a, kao na
slici.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Stavke_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
187
Primer 102:
Napraviti aplikaciju koja omoguava
formiranje niza koji se smeta u Memo
komponentu. Aplikacija pomou ComboBox
komponente omoguava izbor jedne od tri
akcije: rotiranje niza u desno, rotiranje niza u
levo i povratak na poetno stanje uz ponovni
unos niza.
Reenje
#include <vcl.h>
#pragma hdrstop
#include "Niz_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int n,br,brt,a[30];
bool kon;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i;
br=0;
for(i=0;i<30;i++) a[i]=0;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key)&&Key!=8)Key=0;
else{
if(Edit1->Text==""&&Key=='0') Key=0;
}
}
188
189
case 2: Memo1->Lines->Clear();
Edit1->Enabled=true;
Edit2->Enabled=true;
Button1->Enabled=true;
ComboBox1->Enabled=true;
Edit1->ReadOnly=false;
Edit1->SetFocus();
Edit1->Text="";
}
}
//---------------------------------------------------------------------------
Primer 103:
Napraviti aplikaciju koja omoguava prikaz vremena toperice u obliku hh:mm:ss. Vreme
poinje od oblika 00:00 i menja se sa pokretanjem aplikacije.
Reenje
Timer
je nevizuelna komponenta pomou koje moe da se meri vreme. Timer
periodino izvrava dogaaj OnTimer nakon svakog isteka vremenskog intervala Interval.
Komponenta Timer je tipa TTimer i nalazi se na paleti komponenti kartica System.
Svojstva:
Enabled
Interval
#include <vcl.h>
#pragma hdrstop
#include "vreme_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k=0;
//---------------------------------------------------------------------------
190
Primer 104:
Napraviti aplikaciju, kao na slici,
koja se sastoji od tri Panela koji obrazuju
sto.Na Panelu koji pretstavlja plou stola
nalazi se kvadrat sa brojem 60 kao
natpisom. irina poe stola je deljiva sa
irinom Panela.
Pri startovanju aplikacija Panel se
kree sa levog kraja stola prema desnom.
Prilikom pomeranja vrednost broja natpisa
Panela se umanjuje za jedan. Kada kvadrat
stigne u desni ugao Panela vrednost
natpisa Panela je broj 00.
Reenje
191
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "kreci_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
int br;
br=StrToInt(Panel4->Caption);
br--; //Posle svake sekunde Panel se pomera a vrednost broja se smanjuje za jedan.
//Ako je broj jednocifren ispred se dodaje nula.
if(br>9) Panel4->Caption=IntToStr(br);
else Panel4->Caption="0"+IntToStr(br);
//Pomeranje se vrsi u levo tako to se svojstvo Left Panela povecava za broj pet.
Panel4->Left+=5;
//Kada broj postane nula prestaje se sa kretanjem tako to se iskljui Timer, jer se pomeranje
//desava u dogadjaju Timera.
if(br==0)Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
Primer 105:
Napraviti
aplikaciju
koja
omoguava
dogaajem OnCreate forme formiranje niza Panela
u etiri reda po pet Panela. Paneli su iste veliine
bele boje, fonta 12, boldovanog i sadri za natpise
brojeve 1..20.
U neparnim redovima brojevi se poveavaju i
upisuju u Panele sa leva na desno, a u parnim brojevi
se poveavaju i upisuju u Panele sa desna na levo.
U zaglavlju forme postoji vreme u sekundama
formata ispisa VREME: 00.
Nakon pokretanja aplikacije vreme stoji sve
dok se ne pritisne taster Enter. Tada kree vreme.
Prve sekunde Panel se boji u plavo, druge sekunde u
crveno, a tree sekunde nestaje, prelazi se na sledei
Panel koji ima broj za natpis za jedan vei od natpisa broja prethodnog Panela koji je nestao.
192
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad6za3.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int k=0,p;
TPanel *niz[20];
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i,j;
//Formiramo i rasporedjujemo matricu Panela
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
niz[i*5+j]= new TPanel(this);
niz[i*5+j]->Parent=this;
niz[i*5+j]->Color=clWhite;
niz[i*5+j]->Font->Style=TFontStyles()<<fsBold;
niz[i*5+j]->Caption=IntToStr(j+1+i*5);
niz[i*5+j]->Width=50;
niz[i*5+j]->Height=50;
niz[i*5+j]->Font->Size=12;
niz[i*5+j]->Top=30+i*(niz[i*5+j]->Height + 30);
//U zavisnosti od reda, da li je paran ili neparan zavisi smer stvaranja Panela.
Ako //je red neparan formiranje je sa leva na deso, a ako je paran sa desna na levo.
if(i%2==0) niz[i*5+j]->Left=30+j*(niz[i*5+j]->Width +30);
else niz[i*5+j]->Left=30+(4-j)*(30+niz[i*4+j]->Width);
}
}
this->Width=430;
this->Height=380;
}
193
Primer 106:
Napraviti aplikaciju koja u gornjem levom uglu
forme stalno prikazuje aktivni asovnik u obliku
HH:MM:SS, a donjem levom uglu trenutni dan u
nedelji.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "DAN_O.h"
194
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
AnsiString sh,sm,ss;
Word h,m,sek,msec,dan;
TDateTime datum=Date(); //Funkcijom Date utvrdjuje se datum u obliku TDateTime
dan=DayOfWeek(datum)-1; //Izdvajamo redni broj dana u nedelji.
switch(dan)
{
case 1: Label2->Caption="PONEDELJAK";
break;
case 2: Label2->Caption="UTORAK";
break;
case 3: Label2->Caption="SREDA";
break;
case 4: Label2->Caption="ETVRTAK";
break;
case 5: Label2->Caption="PETAK";
break;
case 6: Label2->Caption="SUBOTA";
break;
case 7: Label2->Caption="NEDELJA";
break;
}
DecodeTime(Time(),h,m,sek,msec); //Dekodiramo sat od funkcije Time() u cas h,
//minuti m, sekundi sek i milisekundi msec.
if(h<10) sh="0"+IntToStr(h);
else sh=IntToStr(h);
if(m<10) sm="0"+IntToStr(m);
else sm=IntToStr(m);
if(sek<10) ss="0"+IntToStr(sek);
else ss=IntToStr(sek);
Label1->Caption=sh+":"+sm+":"+ss;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Timer1->Enabled=true;
195
}
//-----------------------------------------------
Primer 107:
Napraviti
aplikaciju
koja
omoguava korienjem komponente
Timer simulaciju kretanja brodia po
jezeru.
Potrebno je prvo u Windowsu
pronai sluku jezera, a potom u
programu Paint nacrtati sliku brodia sa
tekstom, kao na slici.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int pom = 0;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image1->Picture->LoadFromFile("Sunset.bmp");
Image2->Picture->LoadFromFile("brod.bmp");
Form1->Left = Screen->Width/2 - Form1->Width/2;
Form1->Top = Screen->Height/2 - Form1->Height/2;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//Brodic se prilikom udaljavanja smanjuje.
Image2->Width = Image2->Width - 1;
Image2->Height = Image2->Height - 1;
196
//Brodic se udaljava.
if (pom==4)
{
Image2->Top = Image2->Top + 1;
pom=0;
}
//Ako je komponenta, slika brodica jako mala, nema svrhe dalje komponentu
//smanjivati, vec gasimo Timer i ispisujemo poruku da je brodic nestao.
if(Image2->Width == 10)
{
Timer1->Enabled = false;
ShowMessage ("brod otisao :)");
}
pom++; //Regulisemo pomeranje brodica.
}
//-----------------------------------------------
Primer 108:
Napraviti aplikaciju koja pretstavlja
koarkaki semafor. Vreme prilikom
startovanja aplikacije je 10:00. Postojie tri
dugmeta za rukovanje semaforom:
START, STOP i RESET, kao i dva
dugmeta za korekciju vremena: + i
Klikom na dugme START dugme je
neaktivno a semafor radi i u tada se ne
moe korigovati vreme. Klikom na dugme
STOP semafor se zaustavlja, dugme
STOP postaje neaktivno a START
aktivno, i tada je mogue korigovati
vreme. Klikom na dugme RESTART
vreme se vraa na poetno 10:00, a
dugmadi START i RESTART su neaktivni. Prilikom startovanja aplikacije samo je
dugme START aktivno. Korekcija vremena vrsi se u sekundama, pri emu se klikom na
taster + vreme uveava za sekundu, a klikom na taster vreme smanjuje za jednu
sekundu..
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "VREME_O.h"
//---------------------------------------------------------------------------
197
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int vr=600;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(vr>0)
{
vr--;
if(vr/60>9 && vr%60>9)
Label1->Caption=Format("%d:%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60>9 && vr%60<10)
Label1->Caption=Format("%d:0%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60<10 && vr%60>9)
Label1->Caption=Format("0%d:%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60<10 && vr%60<10)
Label1->Caption=Format("0%d:0%d",ARRAYOFCONST((vr/60,vr%60)));
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled=true;
Button1->Enabled=false;
Button2->Enabled=true;
Button3->Enabled=true;
GroupBox2->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer1->Enabled=false;
Button1->Enabled=true;
Button2->Enabled=false;
GroupBox2->Enabled=true;
198
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
{
vr=600;
Label1->Caption="10:00";
Button1->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=false;
GroupBox2->Enabled=false;
Timer1->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender)
{
if(vr<600)
{
vr++;
if(vr/60>9 && vr%60>9)
Label1->Caption=Format("%d:%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60>9 && vr%60<10)
Label1->Caption=Format("%d:0%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60<10 && vr%60>9)
Label1->Caption=Format("0%d:%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60<10 && vr%60<10)
Label1->Caption=Format("0%d:0%d",ARRAYOFCONST((vr/60,vr%60)));
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button5Click(TObject *Sender)
{
if(vr>00)
{
vr--;
if(vr/60>9 && vr%60>9)
Label1->Caption=Format("%d:%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60>9 && vr%60<10)
199
Label1->Caption=Format("%d:0%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60<10 && vr%60>9)
Label1->Caption=Format("0%d:%d",ARRAYOFCONST((vr/60,vr%60)));
if(vr/60<10 && vr%60<10)
Label1->Caption=Format("0%d:0%d",ARRAYOFCONST((vr/60,vr%60)));
}
}
//--------------------------------------------------------------------------Primer 109:
Napraviti aplikaciju koja pretstavlja
igricu Kliktanje redom na brojeve.
Dinamiki formirati na Formi pet redova
po pet dugmadi, pri emu se na sluajan
nain na svakom dugmetu pojavljuje
natpis sa sluajno izabranim brojem sa
intervala od 1 do 25.
Za svako dugme vai dogaaj
OnClick. Ako broj nije po redeu na koji
kliknemo potrebno ja da dugme ostane
vidljivo, a ako je po redu dugme e biti
nevidljivo.
Kada nestanu svi dugmadi sa
fornme pojavie se poruka Bravo, Dobro
je, Moze i bolje ili Lose.
U zaglavlju tokom igre ispisuje se
trenutno vreme. Nakon proitane poruke,
potrebno je sve dugmadi fiziki izbrisati i
pozvati ponovo dogaaj za stvaranje
forme OnCreate.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include <stdlib.h>
#include "primer17_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TButton *comp[25];
int k=0,t=0;
200
int niz[25];
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
int br=0;
k=0;
t=0;
randomize();
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
TButton *bn = new TButton(this);
bn->Parent=this;
bn->Width=50;
bn->Height=50;
bn->Left=10+j*(bn->Width+10);
bn->Top=10+i*(bn->Height+10);
niz[br]=random(24)+1;
bn->Caption=IntToStr(niz[br]);
comp[k]=bn;
br++;
bn->Font->Style=TFontStyles()<<fsBold;
bn->OnClick=ButtonClick;
}
}
//Sortiranje niza u rastucem redosledu, kako bi kasnije mogli kontrolisati da
li //igrac redom klikce po panelima, tj po brojevima.
int pom;
for (int i=0; i<24; i++)
{
for (int j=i+1; j<25; j++)
{
if (niz[j]<niz[i])
{
pom=niz[i];
niz[i]=niz[j];
201
niz[j]=pom;
}
}
}
Form1->Width=315;
Form1->Height=340;
Application->Title="Kraj igre!!!";
Timer1->Enabled=true; //Startujemo igricu.
}
//--------------------------------------------------------------------------void __fastcall TForm1::ButtonClick(TObject *Sender)
{
//Promenljiva k je indeks niza, a vrednost niza sa tom vrednosti indeksa je broj
koji //je po redu. Ako se vrednosti kliknutog natpisa i vrednosti niza poklope
kliknuti //panel nestaje.
TButton *bn=dynamic_cast<TButton *>(Sender);
if(niz[k]==StrToInt(bn->Caption))
{
bn->Visible=false;
k=k+1;
}
if(k==25)
{
bn->Visible=false;
Timer1->Enabled=false;
if (t<=20) ShowMessage("Prolazno vreme je "+IntToStr(t)+", Bravo");
if (t>20 && t<=40) ShowMessage("Prolazno vreme je "+
IntToStr(t)+", Dobro je");
if (t>40 && t<=60) ShowMessage("Prolazno vreme je "+
IntToStr(t)+", Moze i bolje");
if (t>60) ShowMessage("Prolazno vreme je "+IntToStr(t)+", Lose!!");
for(int i=0; i<25; i++) comp[i]->Free();
Form1->FormCreate(Sender);
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
t++;
Form1->Caption="Trenutino vreme: "+IntToStr(t)+" sec";
}
//--------------------------------------------------------------------------Primer 110:
202
Napisati aplikaciju koja predstavlja poznatu igricu Memorija sa jednim igraem. Na tabli se
nalazi 30 SpeedButton-a koji na samom pocetku aplikacije imaju istu sliku. Klikom na dugme na
dugmetu se pojavljuje nova slika. U jednom trenutku na tabli mogu biti otvorene dve slike ili
jedna slika. Ako su slike indentine oba dugmeta nestaju sa table. Na panelu kao na slici nalaze se
trenutno proteklo vreme i broj otvaranja. Pod otvaranjem podrazumeva se otvaranje dve slike.
Igrica se zavrava kada se pogode svi parovi i vreme se zaustavlja.
Reenje
SpeedButton je dugme sa slikom nad kojim se mogu desiti samo dogaaji sa miem.
Odnosno dugme nikada ne moe dobiti fokus. SpeddButton obino ima sliku a ne i natpis, tipa je
TspeedButton i nalazi se na paleti komponenti kartica Additional.
#include <vcl.h>
#pragma hdrstop
#include "Memorija_o.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x[30];
int pom1;
int pom2,brpokusaja=0;
int brsec=0,brmin=0;
TSpeedButton *btnx1=NULL;
TSpeedButton *btnx2=NULL;
int pogodjenih;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
203
{
unsigned i,j;
int m;
Application->Title="Memorija...";
Label2->Caption = "00:00";
Timer2->Enabled=true;
randomize();
pom1=pom2=pogodjenih=0;
Label4->Caption = "0";
//Formiraju se dugmadi ravnomerno rasporedjeni po formi. Svi dugmadi dobijaju istu pocetnu
//sliku i reaguju na dogadjaj ButtonClick. Svojstvo Tag dobija vrednost rednog broja
//dugmeta.
for(i=0;i<6;i++)
{
for(j=0;j<5;j++)
{
TSpeedButton *pok=new TSpeedButton(this);
pok->Parent=this;
pok->Height=80;
pok->Width=80;
pok->Top=20+j*(pok->Height+20);
pok->Left=20+i*(pok->Width+20);
pok->OnClick=ButtonxClick;
pok->Tag=(i+1)+(j*6);
pok->Glyph->LoadFromFile("x.bmp"); //Loaduje se pocetna slika.
}
}
for(i=0;i<30;i++) x[i]=0; //Inicijalizuje se pomocni niz.
//Formira se par sa istim slikama (u nizu x dva clana niza imace jednake vrednosti). Par
//clanova niza bira se na slucajan nacin, medju onim clanovima koji do tada nisu izabrani, a
//to se vidi po tome sto je vrednost tih clanova niza jednaka nuli.
for(i=1;i<16;i++)
{
m=random(30);
while(x[m]!=0) m=random(30);
x[m]=i;
m=random(30);
while(x[m]!=0) m=random(30);
x[m]=i;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::ButtonxClick(TObject *Sender)
{
204
TSpeedButton *btnx=dynamic_cast<TSpeedButton*>(Sender);
//Promenljivama pom1 i pom2 predstavljaju brojeve dugmadi iz niza koji su kliknuti.
Ako //je vrednost pom1 jednaka sa vrednosti opom2 i ujedno su razliciti od nule, znak je
da su //otvorena dva dugmeta koja su indenticna. Ukoliko su razlicita od nule i medjusobno
nisu //jednaka znak je da ih treba vratiti na stare slike, jer je u pitanju promasaj.
if(pom1!=pom2&&pom1!=0&&pom2!=0)
{
btnx1->Glyph->LoadFromFile("x.bmp");
btnx2->Glyph->LoadFromFile("x.bmp");
pom1=pom2=0;
}
int br=0;
br=btnx->Tag;
br=br-1;
//Ako je pom1 jednak nuli trenutno treba otvoriti jedno dugme, te pom1 dobija redni broj tog
//dugmeta. Ako je pom1 razlicit od nule znak je da treba otvoriti drugo dugme te pom2 dobija
//redni broj drugog dugmeta.
if(pom1==0) pom1=x[br],btnx1=btnx;
else pom2=x[br],btnx2=btnx;
//Sada se na osnovu rednog broja dugmeta dugmetu pridruzuje odgovarajuca slika.
if(x[br]==1) btnx->Glyph->LoadFromFile("1.bmp");
if(x[br]==2) btnx->Glyph->LoadFromFile("2.bmp");
if(x[br]==3) btnx->Glyph->LoadFromFile("3.bmp");
if(x[br]==4) btnx->Glyph->LoadFromFile("4.bmp");
if(x[br]==5) btnx->Glyph->LoadFromFile("5.bmp");
if(x[br]==6) btnx->Glyph->LoadFromFile("6.bmp");
if(x[br]==7) btnx->Glyph->LoadFromFile("7.bmp");
if(x[br]==8) btnx->Glyph->LoadFromFile("8.bmp");
if(x[br]==9) btnx->Glyph->LoadFromFile("9.bmp");
if(x[br]==10) btnx->Glyph->LoadFromFile("10.bmp");
if(x[br]==11) btnx->Glyph->LoadFromFile("11.bmp");
if(x[br]==12) btnx->Glyph->LoadFromFile("12.bmp");
if(x[br]==13) btnx->Glyph->LoadFromFile("13.bmp");
if(x[br]==14) btnx->Glyph->LoadFromFile("14.bmp");
if(x[br]==15) btnx->Glyph->LoadFromFile("15.bmp");
//Ako su promenljive pom1 i pom2 indenticni i dugmadi indenticni znak je da je otvoreni
par //pogodjen, te dugmadi nestaju sa forme a broj pogodaka se povecava za jeda,
if(pom1==pom2&&btnx1!=btnx2)
{
btnx->Visible=false;
btnx1->Visible=false;
pom1=pom2=0;
pogodjenih++;
205
Timer2->Enabled=true;
}
//Ako je broj pogodaka jednak 15, znak je da su svi parovi pogodjeni, te je nastupio kraj
//igrice, a vreme se zaustavlja.
if(pogodjenih==15)
{
Timer2->Enabled=false;
ShowMessage("Vreme: "+Label2->Caption+" Broj pokusaja: "+Label4->Caption);
}
brpokusaja++;
if(brpokusaja%2==0)
{
//Broj pokusaja jednak je polovini broja otvorenih dugmadi.
Label4->Caption = IntToStr(brpokusaja/2);
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
brsec++; //Kako se istekom 1000ms sto odgovara vremenu od jedne sekunde desava
//dogadjaj tajmera, to ako postavimo neki brojac da se svaki put kada se dogadjaj desi
//povecava za jedan, taj brojac ce predstavljati vreme koje je proteklo od pocetka //igrice.
brmin=brsec/60;
if(brmin<10&&brsec<10)
{
Label2->Caption="0"+IntToStr(brmin)+":0"+IntToStr(brsec-brmin*60);
}else if(brmin<10){
Label2->Caption="0"+IntToStr(brmin)+":"+IntToStr(brsec-brmin*60);
}else if(brsec<10){
Label2->Caption=IntToStr(brmin)+":0"+IntToStr(brsec-brmin*60);
}
}
//---------------------------------------------------------------------------
Primer 111:
Napraviti aplikaciju koja
omoguava unos stringa
i
pritiskom na dugme BROJ
utvruje koliko string sadri
samoglasnika
a
koliko
suglasnika.
Dugme
BRISI
omoguava
brisanje teksta iz polja za unos, a na
mestima gde se prikazuje broj
suglasnika i broj samoglasnika prikazuje
se etiri znaka pitanja.
206
Reenje
STRINGOVI
Definicija stringa:
String je niz znakova. Slui za pretstavljanje tekstova. Borland C++ Builder
koristi dve vrste stringova: AnsiString i string koji se zavrava znakom '\0'.
Funkcije za prervaranje iz jednog stringa u drugi su:
Pretvaranje AnsiString-a u string koji se zavrava znakom '\0':
s=StrPCopy(s,ss); //ss je AnsiString
Pretvaranje string koji se zavrava znakom '\0' u AnsiString:
ss=StrPas(s); //ss je AnsiString
AnsiString:
Svojstvo Caption ili Text su tipa AnsiString-a a nalaze se kao svojstva veine
komponenti.
U definiciji stringa naznaeno je da je string niz. To znai da se kroz string
prolazi kao i kroz niz sa indeksom. Indeks prvog znaka stringa je 1 kod AnsiString-a, a
kod stringa koji se zavrava znakom '\0' indeks prvof znaka stringa je 0.
Kod AnsiString-a koristi se operator + koji omoguava spajanje stringova.
Tip podatka AnsiString ne dozvoljava da se u string upisuje karakter po karakter
pomocu dodele. Svi poslovi se rade pomou funkcija.
207
208
209
Primer 112:
Napraviti aplikaciju koja
omoguava unos stringa, a potom
ptitiskom na taster UTVRDI
utvruje da li uneseni string
predstavlja palindrom. Ako je
polindrom u Labeli gde je
odgovor upisae se re DA, a u
suprotnom re NE.
Kada se klikne na dugme
BRISI vri se brisanje stringa i aplikacija se vraa u poetno stanje.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Brojsamisugl_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s;
int i,j;
s=Edit1->Text;
s=s.UpperCase();
char *ss=new char[30];
ss=StrPCopy(ss,s);
//Iz stringa brisemo sve praznine.
i=0;
while(ss[i]!='\0')
{
if(ss[i]==' ')
{
j=i;
while(ss[j]!='\0') ss[j]=ss[j+1],j++;
ss[j]='\0';
}else i++;
}
210
//Da bi string bio palindrom, prva polovina stringa mora biti indenticna sa inverznom
//drugom polovinom stringa. Znaci jednim indeksom prolazicemo od pocetka stringa, a
//drugim od kraja stringa, sve dok se indeksi ne poklope ili mimoidju.
i=0;
j=strlen(ss)-1;
while(ss[i]==ss[j] && i<=j) i++,j--;
if(j<=i)Label3->Caption="DA";
else Label3->Caption="NE";
delete []ss;
Button2->Enabled=true;
Button1->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
Button2->Enabled=false;
Button1->Enabled=true;
Label3->Caption="????";
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
Primer 113:
Napraviti
aplikaciju
koja
omoguava unos stringa, a potom vri
izbor formatiranja stringa..
Izbor je: sva slova postaju
mala, sva slova postaju velika,
inverzna slova (mala u velika i
obrnuto) i vraanje prvobitnog stringa.
Prilikom
startovanja
aplikacije nijedna stavka komponente
RadioGroup nije aktivna.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Brojsamisugl_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString pom;
211
212
Primer 114:
Napraviti
aplikaciju
koja
omoguava unos stringa, a potom
svako malo slovo pretvarac u velika
slova, u stringu nema tabulatora i
svaki
viestruki
niz
praznina
zamenjuje sa jednom prazninom.
Izmenjeni string prikazati u
posebnom
polju
za
prikaz
rezultantnog stringa.
Aplikacija
poseduje
dva
dugmeta: RADI i BRISI.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "praznine_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s;
char *p= new char[300];
s=Edit1->Text;
s=s.UpperCase();
p=StrPCopy(p,s);
//Prvo sve tabulatore zamenjujemo sa prazninama.
int i=0;
while(p[i]!='\0')
{
if(p[i]=='\t') p[i]=' ';
i++;
}
//Niz uzastopnih praznina zamenjujemo sa jednom prazninom.
213
i=1;
while(p[i]!='\0')
{
if(p[i]==' ' && p[i-1]==' ')
{
int j=i;
while(p[j]!='\0') p[j]=p[j+1],j++;
p[j]='\0';
}else i++;
}
s=StrPas(p);
Edit2->Text=s;
delete []p;
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//-------------------------------------------------
Primer 115:
Napraviti aplikaciju koja na
osnovu prirodnog broja N i
racionalnog broja X ra;una sumu S po
dole navedoj formuli. Program
poseduje zatitu unosa prirodnog i
racionalnog broja.
S = x
x2
x3
x4
xn
+ 2
3
+ ...(1) n 1 n 1
x +1+ 2 x +1+ 2 + 3 x +1+ 2 + 3 + 4 + 5
x + 1 + 2 + 3 + 4 + ... + n
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Zbir_o.h"
//---------------------------------------------------------------------------
214
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='+' && Key!='-' && Key!='.') Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
AnsiString s=ed->Text;
if((Key!='.' && Key!=8) && (s=="0" || s=="+0" || s=="-0")) Key=0;
switch(Key)
{
case '+': case '-': if(s!="") Key=0;
break;
case '.': int k=s.Pos(".");
if(k!=0 || s=="" || s=="+" || s=="-") Key=0;
break;
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8) Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
AnsiString s=ed->Text;
if(s=="" && Key=='0') Key=0;
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="" || Edit2->Text=="")
{
ShowMessage("Niste uneli oba podatka!!");
if(Edit1->Text=="") Edit1->SetFocus();
else Edit2->SetFocus();
}else{
215
float s,x,pre,p;
int t,z,n;
n=StrToInt(Edit1->Text);
x=StrToFloat(Edit2->Text);
for(int i=1;i<=n;i++)
{
if(i==1) s=x, z=-1, p=x, t=1;
else t+=i, pre=p, p*=x, s=s+z*p/(pre+t),z=-z;
}
Edit3->Text=Format("%.3f",ARRAYOFCONST((s)));
Button1->Enabled=false;
Button2->Enabled=true;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
Primer 116:
Napraviti
aplikaciju
koja
omoguava unos stringa, a potom
ptitiskom na taster RADI vri saimanje
stringa tako to se uzastopni niz istih
znakova zamenjuje samo sa jednim
znakom.
Kada se klikne na dugme BRISI
vri se brisanje stringa i aplikacija se vraa
u poetno stanje.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Brojsamisugl_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
216
217
Primer 117:
Napraviti aplikaciju koja pravi
statistiki prikaz pojave slova u
unesenom stringu. Program ne
razlikuje prilikom brojanja mala i
velika slova.
Program se sastoji od polja za
unos stringa, GroupBox-a sa natpisom
Pojava slova u kojoj se nalaze dve
Memo komponente. Prva Memo
komponenta je sive boje i u njoj se
nalaze sva velika slova Engleske
azbuke. Drugi Memo sadri prilikom
startovanja aplikacije sve nule. Niti
jedan Memo ne sadri ukljucen
ScrollBar jer redovi prve Memo
komponente moraju pratiti redove
druge Memo komponente.
Klikom na dugme URADI u
Memo komponenti Pojava menjaju se
vrednosti, tako da one odgovaraju
broju pojava odreenog slova u
stringu. Klikom na dugme BRISI
stanje se vraa na sluaaj kada smo startovali aplikaciju.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "pojava_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=0;i<26;i++)
{
AnsiString s;
218
219
Reenje
#include <vcl.h>
#pragma hdrstop
#include "korrdic_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
220
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s1,s2,p="#",p1,p2;
int a,br;
s1=Edit1->Text; //Izvorni string.
s2=Edit2->Text; //Sifrovani string.
a=s2.Pos(p); //Trazi se pozicija karaktera # u sifrovanom stringu.
p1=s2; //Pamtim sifrovani string.
p2=s2.SubString(1,a-1); //Izdvajam prvi deo sifrovanog stringa..
br=StrToInt(p2); //Dobijamo podatak broj iz sifre.
p1.Delete(1,a); //Brisemo prvi deo stringa.
p1=p1.UpperCase(); //Pretvaramo drugi deo stringa string u velika slova.
p1+=" "; //Dodajemo prazno mesto u string.
s1.Insert(p1,br); //Umescemo sifrovani string na odredjenu poziciju.
Label1->Caption=s1; //Upisujemo string u Labelu.
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->Text="";
Edit2->Text="";
Label1->Caption="??????????";
}
//-----------------------------------------------
Primer 119:
Napraviti
aplikaciju
koja
omoguava unos dekadnog broja, a
potom po izboru vri njegovo
pretvaranje u drugi brojevni sistem.
Na raspolaganju su etiri brojevna
sistema: dekadni, binarni, oktalni i
heksadecimalni.
Klikom na dugme PRETVORI
vri se pretvaranje iz dekadnog u neki
drugi izabrani brojevni sistem, a klikom
na dugme RESETUJ vri se podstavljanje aplikacije na poetno stanje.
221
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Broj_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
//Ako se ne unese string greska je i polje unosa se boji u crveno.
Edit1->Color=clRed;
Edit1->SetFocus();
return;
}
//Izdvajamo broj iz polja unosa ogranicenog na maksimalno osam cifara.
int broj=StrToInt(Edit1->Text);
AnsiString s;
int pom;
//Utvrdjujemo u koji sistem treba pretvarati uneseni broj.
switch(RadioGroup1->ItemIndex)
{
case 0: Edit2->Text=Edit1->Text; //Vec je dekadni i treba ga samo prepisati.
break;
case 1: pom=broj; //Pamtim broj u pomocnu promenljivu.
s=""; //Broj se formira dodavanjem u pomocni string s nule i jedinice.
//Ciklus se odvija sve dok postoji broj..
while(pom!=0)
{
//Osnova binarnog sistema je broj dva. To je razlog sto se cifra
//izdvaja deljenjem sa brojem dva.
222
223
Primer 120:
224
225
//Promenljiva bio ima vrednost true ako je bio zavrsen unos operanda (broja), a false u
//suprotnom..
float rez=0;
bool prvi=false, bio=false;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panelx1Click(TObject *Sender) //Cifre 1 - 9
{
AnsiString s=Memo1->Lines->Strings[0];
//Zavrsen je u prethodnom trenutku unos operanda ako je bio true.
if(bio==true)
{
Memo1->Lines->Strings[0]="0."; //Postavlja se pocetak unosa novog operanda.
bio=false; //Novi broj se unosi.
s=Memo1->Lines->Strings[0];
}
if(prvi==false) s.Delete(1,1); //Ako se unosi prva cifra ostace broj 0 a unosi se cifra
//celobrojnog dela.
TPanel *pn = dynamic_cast <TPanel *> (Sender);
//Ako je smer = 1 unosi se cifra celobrojnog dela a u suprotnom decimalnog dela.
if(smer==1) s.Insert(pn->Caption,s.Length());
else s.Insert(pn->Caption,s.Length()+1);
prvi=true; //Unesena je cifra.
Memo1->Lines->Strings[0]=s;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel14Click(TObject *Sender) //Decimalna tacka.
{
//Uneta je decimalna tacka, te je znak da ce se cifre unositi u decimalnom delu broja.
smer=0; }
//--------------------------------------------------------------------------void __fastcall TForm1::Panel15Click(TObject *Sender) //Znak.
{
AnsiString s=Memo1->Lines->Strings[0];
//Ako je broj pozitivan znak je da je broj pozitivan, te mu dodajemo znak minus. U
//suprotnom broj je negativan, te sec znak mora iz broja izbrisati.
if(StrToFloat(Memo1->Lines->Strings[0])>0) s.Insert("-",1);
else s.Delete(1,1);
226
Memo1->Lines->Strings[0]=s;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel13Click(TObject *Sender) //Cifra 0.
{
//Ne moze se uneti cifra 0 ako se unosi celobrojni deo, a trenutna vrednost broja je 0.
if(smer==1 && StrToFloat(Memo1->Lines->Strings[0])==0) return;
AnsiString s=Memo1->Lines->Strings[0];
if(smer==1) s.Insert("0",s.Length());
else s.Insert("0",s.Length()+1);
Memo1->Lines->Strings[0]=s;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel17Click(TObject *Sender) //C. Ponistava se sav niz operacija.
{
//Pri novo nizu operacija sve je isto sa promenljivama kao i prilikom startovanja programa.
smer=1;
Memo1->Lines->Strings[0]="0.";
prvi=false;
rez=0;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel18Click(TObject *Sender) //CE.
{
//Ponistava se samo poslednje uneseni operand, ali je dosadasnji rezultat niza operacija
//sacuvan.
prvi=false;
smer=1;
Memo1->Lines->Strings[0]="0.";
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panelx2Click(TObject *Sender)
{
float pod=StrToFloat(Memo1->Lines->Strings[0]);
//Pamtimo prethodnu operaciju, jer uvek se izvrsava prethodna operacija ops, stim da
kada //se klikne na = izvrsavace se poslednja operacija op.
ops=opn;
TPanel *pn = dynamic_cast <TPanel *> (Sender);
opn=pn->Tag;
227
switch(ops)
//Izvrsava se operacija.
{
case 1: rez+=pod;
break;
case 2: rez-=pod;
break;
case 3: rez*=pod;
break;
case 4: rez/=pod;
break;
}
//Ako nije bilo prethodne operacije, a to je slucaj kada se unese samo prvi operand.
if(ops==0) rez=pod;
//Utvdjuje se da li je rezultat celobrojan ili racionalan, radi dopisivanja decimalne tacke.
int pom=rez;
if(pom!=rez) Memo1->Lines->Strings[0]=FloatToStr(rez);
else Memo1->Lines->Strings[0]=IntToStr(pom)+".";
bio=true;
smer=1;
prvi=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel19Click(TObject *Sender)
{
float pod=StrToFloat(Memo1->Lines->Strings[0]);
switch(opn) //Izvrsavace se poslednja operacija.
{
case 1: rez+=pod;
break;
case 2: rez-=pod;
break;
case 3: rez*=pod;
break;
case 4: rez/=pod;
break;
}
smer=1;
prvi=false;
bio=false;
int pom=rez;
ops=opn=0;
if(pom!=rez) Memo1->Lines->Strings[0]=Format("%f",ARRAYOFCONST((rez)));
else Memo1->Lines->Strings[0]=IntToStr(pom)+".";
}
//---------------------------------------------------------------------------
228
Primer 121:
Napisati aplikaciju koja na osnovu unetog prirodnog broja n izraunava zbir kvadrata prvih
n prirodnih brojeva. Za izraunavanje zbira koristiti funkciju Zbir iji je prototip: int Zbir(int n);
Program poseduje zatitu unosa prirodnog broja.
Reenje
FUNKCIJE
Definicija funkcije:
Funkcije su potprogrami koji na osnovu izvesnog broja argumenata daju
jedan rezultat koji se naziva vrednost funkcije.
Osobine funkcija:
Definisanje funkcije
Funkcija se definie naredbom za definisanje funkcije:
tip naziv_funkcije(lista _argumenata)
{
telo_ funkcije
}
tip - predstavlja osnovni tip vrednosti funkcije (svi standardni prosti tipovi).
Vrednost funkcije moe da bude samo jedan podatak. Za tip vrednosti
229
230
//--------------------------------------------------------------------------//--------------------------------------------------------------------------int ZbirKvadrata(int n)
{
int i,s;
s=0;
for(i=1;i<=n;i++) s+=i*i;
return s;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned s,i,n;
if(Edit1->Text=="")
{
Edit1->SetFocus();
return;
}
n=StrToInt(Edit1->Text);
s=ZbirKvadrata(n);
Label3->Caption=IntToStr(s);
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text="";
Label3->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key)) Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
if(ed->Text=="" && Key=='0') Key=0;
}
}
//---------------------------------------------------------------------------
231
Primer 122:
Napraviti aplikaciju koja na osnovu unesenog prirodnog broja N izraunava zbir prvih N
lanova beskonanog niza kao na slici.
Prva dva lana beskonanog niza imaju vrednost 1, a poev od treeg lana elementi sa
neparnim rednim brojem dobijaju se sabiranjem prethodna dva lana, dok se elementi sa parnim
rednim brojem dobijaju tako to se prethodi lan pomnoi sa brojem 2. Program poseduje zatitu
unosa prirodnog broja. Prilikom realizacije programa obavezno koristiti funkciju Zbir koja
izraunava zbir prvih N lanova beskonanog niza.
Reenje
Jedna bitna akcija prilikom pozivanja funkcije je prosleivanje vrednosti stvarnih
argumenata formalnim argumentima funkcije, ili predaja parametara.
Vrednosti stvarnih argumenata funkcije slue za inicijalizaciju formalnih argumenata
funkcije pre obrade tela funkcije.
Predaja parametara moe se biti: predaja parametara po vrednost i predaja
parametara po referenci.
Prilikom predaje parametara po vrednoasti kopija vrednosti promenljive se
prosleuje funkciji, odnosno formalnim parametrima funkcije. Vrednost promenljive koja
je predala vrednost ostaje nepromenjena nakon zavretka funkcije.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "zad10za2.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
232
//--------------------------------------------------------------------------int Zbir(int n)
{
int i,p,q,s;
s=0;
for(i=1;i<=n;i++)
{
if(i>2)
{
if(i%2==1) q=p+q, p=q-p;
else p=q, q*=2;
s+=q;
}else{
if(i==1) s=1;
else s=2, p=q=1;
}
}
return s;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n,i;
float s=0;
if(Edit1->Text=="")
{
ShowMessage("Niste uneli podatak!!");
Edit1->SetFocus();
return;
}
n=StrToInt(Edit1->Text);
Label6->Caption=IntToStr(Zbir(n));
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Label6->Caption="????";
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
233
234
235
236
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "zad1za2_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------float Pravougaonik(float a, float b, float *p)
{
//U kodu funkcije pristu podatku pomocu pokazivaca vrsi se uvek operatorom
//diferenciranja *
*p=a*b;
//Funkcija vraca obim, a to se radi koriscenjem rezervisanom reci return.
return 2*a+2*b;
}
//--------------------------------------------------------------------------void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
switch(RadioGroup1->ItemIndex)
{
case 0: Label6->Font->Color=clBlack;
237
Label7->Font->Color=clBlack;
break;
case 1: Label6->Font->Color=clBlue;
Label7->Font->Color=clBlue;
break;
case 2: Label6->Font->Color=clRed;
Label7->Font->Color=clRed;
break;
case 3: Label6->Font->Color=clGreen;
Label7->Font->Color=clGreen;
break;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a,b,p,o;
if(Edit1->Text=="" || Edit2->Text=="")
{
ShowMessage("Niste uneli podatke!!");
return;
}
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
if(a<=0 || b<=0)
{
ShowMessage("Duzine stranica nemogu biti negativne!!");
if(a<0)
{
Edit1->Clear();
Edit1->SetFocus();
}else{
Edit2->Clear();
Edit2->SetFocus();
}
return;
}
}
//---------------------------------------------------------------------------
238
239
240
//---------------------------------------------
241
Primer 126:
Napraviti aplikaciju koja omoguava unos celobrojnog niza X od n (n<31) elementa.
Korienjem funkcije FormNiz na osnovu niza X formira niza A Elemente niza A ine po jedan
elemenat niza X koji se u nizu X vie puta ponavljaju.
Formirani niz se prikazuje u drugoj Memo komponenti. Program poseduje zatitu unosa
celobrojnog podatka.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "minmax_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
#define MAX_NIZ 30
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void FormNiz(int x[],int n,int a[],int *m)
{
*m=0;
for(int i=0;i<n;i++)
{
int j=0;
while(j<*m && a[j]!=x[i]) j++;
if(j==*m)
{
int br=0;
for(j=0;j<n;j++)
{
if(x[i]==x[j]) br++;
}
if(br>1)
{
a[*m]=x[i];
(*m)++;
}
}
}
242
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='-' && Key!='\r') Key=0;
else{
if(Key=='-' && Edit1->Text!="") Key=0;
if(Edit1->Text=="0" && Key!=8 && Key!=\r) Key=0;
if(Key=='0' && Edit1->Text=="-") Key=0;
if(Key=='\r')
{
if(Edit1->Text=="") Key=0;
else{
if(Memo1->Lines->Count<MAX_NIZ)
Memo1->Lines->Add(Edit1->Text);
else{
Edit1->Enabled=false;
Application->Title="GRESKA...";
ShowMessage("Prekoracenje memorije niza!!");
Button2->SetFocus();
return;
}
Edit1->Clear();
}
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo2->Lines->Clear();
if(Memo1->Lines->Count==0)
{
Memo1->Lines->Add("Nema niza!!");
}else{
int x[MAX_NIZ],i,n,a[MAX_NIZ],m;
n=Memo1->Lines->Count;
for(i=0;i<n;i++) x[i]=StrToInt(Memo1->Lines->Strings[i]);
FormNiz(x,n,a,&m); //Poziv funkcije.
Memo2->Lines->Clear();
if(m!=0)
{
for(i=0;i<m;i++) Memo2->Lines->Add(IntToStr(a[i]));
}else Memo2->Lines->Add("Nema niza!!");
}
}
//---------------------------------------------------------------------------
243
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Uvecati_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
244
: TForm(Owner)
{
}
//--------------------------------------------------------------------------AnsiString Uvecaj(AnsiString s, int poc, int kraj)
{
AnsiString pom;
pom=s.SubString(poc,kraj-poc+1); //Izdvajamo deo stringa koji se transformise.
pom=pom.UpperCase(); //Pretvorimo string u velika slova.
//Iz izvorisnog stringa izbacimo deo stringa koji ce se transformisati.
s=s.Delete(poc,kraj-poc+1);
s=s.Insert(pom,poc); //Transformisani string ubacujemo u izvorisni string.
return s; //Vraca se transformisani string.
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1Change(TObject *Sender)
{
AnsiString s=Edit1->Text;
if(s.Length()==0) GroupBox1->Enabled=false; //Ako nema stringa nema se sta podesavati.
else{
GroupBox1->Enabled=true; //Moze se podesavati.
UpDown1->Max=s.Length(); //Indeks se moze kretati od 1 do duzine stringa.
UpDown2->Max=s.Length();
Button1->Enabled=true;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
Application->Title="GRESKA...";
if(Edit1->Text=="")
{
ShowMessage("Nema se sta raditi!!");
Edit1->SetFocus();
}else{
if(UpDown1->Position>=UpDown2->Position)
{
ShowMessage("Pogresan interval!!");
}else{
AnsiString s;
s=Edit1->Text;
int poc,kraj;
poc=UpDown1->Position; //Indeks pocetka.
kraj=UpDown2->Position; //Indeks kraja.
245
246
Primer 128:
Napraviti aplikaciju koja omoguava unos celobrojnog niza X od n (n<31) elemenata, a
potom potvrivanjem izabrane opcije saimanja i klikom na dugme RADI saziima niz
izbacivanjem odgovarajuih elemenata iz izbora. Transformisani niz prikazati u novoj Memo
komponenti. Klikom na dugme BRISI sve se vraa na poetak.
Prilikom realizacije programa potrebno je realizovati i pozivati funkcije:
int TraziMinMax(int x[],int n,char c,int *rez); , void IzbaciIzNiza(int x[],int *n,int broj); i
void Sazimanje(int x[],int *n,int odluka);
Funkcija TraziMinMax u nizu x od n elemenata, a na osnovu izbora c odreuje minimum
ili maksimum niza. Ako se argumentu funkcije c prosledi vrednost '<' funkcija po referenci
odreuje vrednost minimuma a vraa broj minimuma. Ako se argumentu funkcije c prosledi
vrednost '>' funkcija po referenci odreuje vrednost maksimuma a vraa broj maksimuma.
Funkcija IzbaciIzNiza iz niza x od n elemenata izbacuje sve elemente niza ija je vrednost
jednaka vrednosti promenljive broj.
Funkcija Sazimanje u odnosu na izabranu odluku vri saimanje niza X od n elemenata.
Promenljiva odluka moe imati vrednosti od 1 do 4 jer je to broj kombinacija koje se mogu desiti
prilikom ekiranja.
Program poseduje ui zatitu unosa celobrojnog podatka.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "minmax_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
#define MAX_NIZ 30
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------int TraziMinMax(int x[],int n,char c,int *rez)
{
switch(c)
{
case '<': *rez=x[0];
for(int i=1;i<n;i++)
{
if(x[i]<*rez) *rez=x[i];
}
break;
case '>': *rez=x[0];
for(int i=1;i<n;i++)
247
{
if(x[i]>*rez) *rez=x[i];
}
break;
}
int br=0;
for(int i=0;i<n;i++)
{
if(x[i]==*rez) br++;
}
return br;
}
//--------------------------------------------------------------------------void IzbaciIzNiza(int x[],int *n,int broj)
{
int i,j;
i=0;
while(i<*n)
{
if(x[i]!=broj) i++;
else{
j=i;
while(j<*n-1) x[j]=x[j+1],j++;
x[*n-1]=0;
(*n)--;
}
}
}
//--------------------------------------------------------------------------void Sazimanje(int x[],int *n,int odluka)
{
int br,min,max;
switch(odluka)
{
case 1: br=TraziMinMax(x,*n,'<',&min);
IzbaciIzNiza(x,&(*n),min);
break;
case 2: br=TraziMinMax(x,*n,'>',&max);
IzbaciIzNiza(x,&(*n),max);
break;
case 3: br=TraziMinMax(x,*n,'<',&min);
IzbaciIzNiza(x,&(*n),min);
br=TraziMinMax(x,*n,'>',&max);
IzbaciIzNiza(x,&(*n),max);
break;
}
248
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='-' && Key!='\r') Key=0;
else{
if(Key=='-' && Edit1->Text!="") Key=0;
if(Edit1->Text=="0" && Key!=8 && Key!=\r) Key=0;
if(Key=='0' && Edit1->Text=="-") Key=0;
if(Key=='\r')
{
if(Edit1->Text=="") Key=0;
else{
if(Memo1->Lines->Count<MAX_NIZ)
Memo1->Lines->Add(Edit1->Text);
else{
Edit1->Enabled=false;
Application->Title="GRESKA...";
ShowMessage("Prekoracenje memorije niza!!");
Button2->SetFocus();
return;
}
Edit1->Clear();
}
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo2->Lines->Clear();
if(Memo1->Lines->Count==0)
{
Memo1->Lines->Add("Nema niza!!");
}else{
int i,n;
n=Memo1->Lines->Count;
int x[MAX_NIZ];
for(i=0;i<Memo1->Lines->Count;i++) x[i]=StrToInt(Memo1->Lines->Strings[i]);
if(CheckBox1->Checked==true && CheckBox2->Checked==true)
Sazimanje(x,&n,3);
if(CheckBox1->Checked==true && CheckBox2->Checked==false)
Sazimanje(x,&n,1);
if(CheckBox1->Checked==false && CheckBox2->Checked==true)
Sazimanje(x,&n,2);
Memo2->Lines->Clear();
if(n!=0)
249
{
for(i=0;i<n;i++) Memo2->Lines->Add(IntToStr(x[i]));
}else Memo2->Lines->Add("Nema niza!!");
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Enabled=true;
Edit1->ReadOnly=false;
Memo1->Lines->Clear();
Memo2->Lines->Clear();
CheckBox1->Checked=false;
CheckBox2->Checked=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------Primer 129:
Napraviti aplikaciju koja predstavlja kalkulator sa etiri osnovne aritmetike operacije:
sabiranje, oduzimanje, mnoenje i deljenje. Prvo se moraju uneti oba operanda pa se tek tada bira
operacija pritiskom na odgovarajue dugme. Tada ako su operandi ispravno uneseni na ekranu e
se prikazati reenje ili poruka o greci. Aplikacija poseduje i dugme POMOC ijim aktiviranjem
pojavljuje se tekst sa opisom ta program radi, pri emu se tekst ne moe menjati niti kopirati deo
teksta. Sa dugmetom POVRATAK vraa se na aktivni deo.
Prilikom izrade aplikacije koristiti funkciju provera koja utvruje da li je podatak u
komponenti Edit za unos vrednosti operanada ispravan. U sluaju da jeste funkcija vraa vrednost
true a u suprotnom false.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Memo_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
250
251
252
Reenje:
__fastcall
MessageDlg(constAnsiString
Msg,
TMsgDlgType
TMsgDlgButtons Buttons, int HelpCtx);
253
DlgType,
int
__fastcall
254
255
Edit1->Clear();
Edit1->SetFocus();
k=6;
}
//--------------------------------------------------------------------------Primer 131:
Napraviti aplikaciju koja na formi poseduje
Labelu sa tekstom koji pretstavlja broj. Prilikom
startovanja aplikacije broj je 20. Font Labele je:
veliina 48, podebljano plave boje.
Program poseduje kontekst menisa opcijama: +2
(preice F1) koja broj uveava za dva, -2 (preice F2)
koja vrednost broja smanjuje za dva I Znak (preice
F3) koja menja znak broja.
Reenje:
Komponenta PopupMenu
omoguava kreiranje kontekstnog menija koji se pojavljuje
kada se klikne desnim tasterom mia iznad komponente kojoj je prikljuena. Komponenta
PopupMenu je tipa TpopupMenu i nalazi se na paleti komponenti kartica Standard.
Komponenta
PopupMenu
je
nevizuelna komponenta. Sada je potrebno
definnisati stavke PopUpMenu-ja. Postupak
je da se na ikonicu PopupMenu-ja dvostruko
klikne i pojavie se prozor dizajner menija.
U dijalogu dizajnera menija se u
svojstvu Caption unosi naziv stavke.
Pritiskom na Enter otvara se nova stavka
menija. Ako se ispred nekog slova stavke
menija nalazi znak &, slovo e biti
podvueno. Ako se u svojstvu Caption stavi
samo jedan znak crtica, stavka e
pretstavljati podvuena crta.
Kada je stavka menija u dizajner meniju plave boje za datu stavku mogu se podesiti
svojstva koja se na datu stavku odnose. Obavezno se mora podesiti svojstvo PopupMenu
komponente nad kojom e se pojaviti kontekst meni desnim klikom mia.
Svojtvo ShortCut omoguava postavljanje tastera preice date stavke.
Svojstvo Bitmap omoguava da se pored imena stavke nalazi sliica. Obavezno podfesiti
da svojstvo AutoPopUp ima vrednost true, to obezbeuje da se kontekst meni automatski
pojavljuje uvek kada se pritisne desni taster mia.
Svojstvo Aligment odreuje poziciju pojavljivanja menija. Na visini kursora bie: paLeft
(leva ivica menija), paRight (desna ivica menija) ili paCenter (centar gornje ivice menija).
Ako svojstvo Enabled ima vrednost true stavka je dostupna, a u suprotnom ako je false je
nedostupna.
Ako je vrednost Visible true stavka je vidljiva, a u suprotnom ako je false je nevidljiva.
Osnovni dogaaj stavke menija je OnClick i dobija se dvostrukim klikom na stavku menija
u dizajner meni prozoru.
//---------------------------------------------------------------------------
256
#include <vcl.h>
#pragma hdrstop
#include "PopUp_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::N21Click(TObject *Sender)
{
int br;
br=StrToInt(Label1->Caption);
br+=2;
Label1->Caption=IntToStr(br);
}
//--------------------------------------------------------------------------void __fastcall TForm1::N22Click(TObject *Sender)
{
int br;
br=StrToInt(Label1->Caption);
br-=2;
Label1->Caption=IntToStr(br);
}
//--------------------------------------------------------------------------void __fastcall TForm1::Znak1Click(TObject *Sender)
{
int br;
br=StrToInt(Label1->Caption);
br=-br;
Label1->Caption=IntToStr(br);
}
//--------------------------------------------------------------------------Primer 132:
Napraviti aplikaciju koja podeava: boju teksta, font teksta i boju pozadine aplikacije.
Podeavanje fonta vri se korienjem FontDijalog-a, podeavanje boje teksta i pozadine vri se
korienjem ColorDialog-a. Izbor podeavanja vri se korienjem pomonog menija sa
opcijama: Boja teksta(F1), Boja pozadine(F2), Font teksta(F3) i Izlaz(F4).
257
Reenje:
Komponente FontDijalog i ColorDialog spadaju u standardne diaoke protore. To su
nevizuelne komponente. Dijaloke komponente aktiviraju se aktiviranjem njihove metode
Execute. Metoda vraa vrednost true ako je korisnik upotrebio prozor za dialog i da ga je
zatvorio dugmetom OK. Metoda vraa vrednost false ako je prozor dijaloga zatvoren dugmetom
Cancel, pritisnut taster Esc ili kliknuto dugme za zatvaranje prozora.
Font dialog
Color dialog
Svojstvo MinFontSize je tipa int i odreuje najmanju vrednost veliine slova koju e
korisnik moi da odabere, Svojstvo MaxFontSize je tipa int i odreuje najveu vrednost veliine
slova koju e korisnik moi da odabere,
#include <vcl.h>
#pragma hdrstop
#include "Boje.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1:: Bojateksta(TObject *Sender)
{
if(ColorDialog1->Execute()==true) Label1->Font->Color=ColorDialog1->Color;
}
//---------------------------------------------------------------------------
258
259
260
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Sopan_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
261
262
c=StrToInt(Pn[j]->Caption);
ps=false; //Kraj pocetka iteracije.
}else{
j++;
b=StrToInt(Pn[i]->Caption);
c=StrToInt(Pn[j]->Caption);
}
//Promenljiva n je broj Panela. Prvo podesimo sve Panele da su iste boje i fonta.
for (int r=0;r<n;r++)
{
Pn[r]->Color=clInactiveCaptionText;
Pn[r]->Font->Color=clBlack;
}
//Menjamo boje i fonta onih Panela na koje pokazuju indeksi i i j.
Pn[i]->Color=clBlue;
Pn[j]->Color=clRed;
Pn[i]->Font->Color=clWhite;
Pn[j]->Font->Color=clWhite;
//Pamtim pozicije Panela pre nego sto pocne animacija pomeranja.
L1=Pn[i]->Left;
L2=Pn[j]->Left;
L=Pn[j]->Left-Pn[i]->Left; //koliko je rastojanje koje treba preci animacijom.
k=0; //Brojac iteracija, a krece se od 0 do 10.
}
//Uslovi sortiranja.
if(j<=n-1)
{
if(b>c) //Ako je zadovoljeno potrebno je izvrsiti zamenu mesta animacijom.
{
p1=false; //Zabrana pomeranja i unutrasnjeg indeksa dok traje animacija
//pomeranja.
k++;//Povecavamo iteraciju.
Pn[i]->Top=60; //Plavi Panel prilikom pomeranja krece se ispod niza Panela.
Pn[j]->Top=180; //Crveni Panel prilikom pomeranja krece se iznad niza Panela.
//Svaki put pomeramo se za jednu desetinu puta, plavi Panel u desno,
//a crveni u levo.
Pn[i]->Left=Pn[i]->Left+L/10;
Pn[j]->Left=Pn[j]->Left-L/10;
}
263
//Ako je proteklo deset koraka pomeranja, treba Panele vratiti u isti nivo.
if(k==11)
{
Pn[i]->Caption=IntToStr(c);
Pn[j]->Caption=IntToStr(b);
Pn[i]->Left=L1;
Pn[j]->Left=L2;
Pn[i]->Top=120;
Pn[j]->Top=120;
p1=true; //Dozvoljava se pomeranje unutrasnjeg brojaca j.
k=0; //Resetuje se brojac koraka animacije.
}
}
//Ako je doslo do kraja unutrasnje iteracije i ne traje animacija, tj dozvoljeno je pomeranje
//unutrasnjeg indeksa.
if((j==n-1)&&(p1))
{
p=true; //Dozvoljava se promena spoljasnjeg ciklusa.
if(i==n-2)
{
Tmr1->Enabled=false; //Isklucuje se Timer jer je sortiranje zavrseno.
Label1->Visible=true; //Ispisuje se poruka da je sortiranje zavrseno.
btnNovi->Enabled=true; //Moguce je ponovo starovati sortiranje.
NoviNiz1->Enabled=false; //Moguce je generisati novi niz.
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::btnSortClick(TObject *Sender)
{
Tmr1->Enabled=true; //Ukljucujemo Timer.
btnNovi->Enabled=false;
btnSort->Enabled=false;
NoviNiz1->Enabled=false;
Sortiranje1->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::btnNoviClick(TObject *Sender)
{
//Definisem i inicijalizujem niz Panela sa adresama nasih postavljenih Panele.
TPanel *Pn[15]={P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15};
Randomize();
i=-1;
p=p1=true;
264
Label1->Visible=false;
btnSort->Enabled=true;
Sortiranje1->Enabled=true;
for(int i1=0;i1<15;i1++)
{
a[i1]=random(100)+random(i1);
Pn[i1]->Caption=IntToStr(a[i1]);
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::NoviNiz1Click(TObject *Sender)
{
if(btnNovi->Enabled==true) btnNoviClick(Sender);
}
//--------------------------------------------------------------------------void __fastcall TForm1::Sortiranje1Click(TObject *Sender)
{
if(btnSort->Enabled==true) btnSortClick(Sender);
}
//--------------------------------------------------------------------------Primer 135:
265
Naziv stavke iz linije menija unosi se pomou svojstva Caption. Pritiskom na taster Enter
nakon unosa pojavljuje se nova stavka u liniji menija. Ako se klikne na stavku iz linije menija
pojavie se okvir za unos stavke podmenija. Nakon unosa stavke pritiskom na taster Enter
pojavie se sledea stavka podmenija. Pritiskom na taster Insert vri se ubacivanje nove stavke
bilo u liniju menija ili kao stavku podmenija. Pritiskom na kombinaciju tastera Ctrl i desna
strelica vrsi se obrazovanje potpodmenija. Pritiskom na taster Delete vri se brisanje stavke
menija. Ako se ispred nekog slova stavke menija nalazi znak &, slovo e biti podvueno. Ako se
u svojstvu Caption stavi samo jedan znak crtica, stavka e pretstavljati podvuena crta.
Svojstva:
ImageIndex Oznaava indeks slika u listi slika u svojstvu Images.
ShorCut Omoguava izbor tastera preice za datu stavku.
Checked Oznaava da li e ispred natpisa stavke stojati znak za potvrdu. Ako ima
vrednost true znak za potvrdu e se pojaviti.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Kraj1Click(TObject *Sender)
{
this->Close();
}
//---------------------------------------------------------------------------
266
267
Edit3->Text=FloatToStr(rez);
}
//--------------------------------------------------------------------------void __fastcall TForm1::BojaPozadine1Click(TObject *Sender)
{
if(ColorDialog1->Execute()) this->Color=ColorDialog1->Color;
}
//--------------------------------------------------------------------------void __fastcall TForm1::BojapoljaUnosa1Click(TObject *Sender)
{
if(ColorDialog1->Execute())
{
Edit1->Color=ColorDialog1->Color;
Edit2->Color=ColorDialog1->Color;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::BojapoljaResenja1Click(TObject *Sender)
{
if(ColorDialog1->Execute()) Edit3->Color=ColorDialog1->Color;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Fontpoljapodataka1Click(TObject *Sender)
{
if(FontDialog1->Execute())
{
Edit1->Font=FontDialog1->Font;
Edit2->Font=FontDialog1->Font;
Edit3->Font=FontDialog1->Font;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Brisanje1Click(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
Label1->Caption="?";
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='+' && Key!='-' && Key!='.') Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
AnsiString s=ed->Text;
if((Key!='.' && Key!=8) && (s=="0" || s=="+0" || s=="-0")) Key=0;
268
switch(Key)
{
case '+': case '-': if(s!="") Key=0;
break;
case '.': int k=s.Pos(".");
if(k!=0 || s=="" || s=="+" || s=="-") Key=0;
break;
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::ZaglavljeClick(TObject *Sender)
{
if(Zaglavlje->Checked==false)
{
Zaglavlje->Checked=true;
this->Caption="DIGITRON SA SISTEMOM MENIJA";
}else{
Zaglavlje->Checked=false;
this->Caption="";
}
}
//-------------------------------Primer 136:
Napraviti
aplikaciju
koja poseduje sistem menija
za podeavanje fonta i boje
Panela.
Na formi postojie dva
Panela kao na slici. Glavi
meni sastoji se od stavki: Prvi, Drugi i Obe. Stavka Prvi odnosi se na prvi Panel, stavka Drugi
na drugi Panel i stavka Obe na oba Panela. Stavkama se aktivira podmeni sa stavkama Boja i
Font. Program poseduje i kontekst meni sastavljen od dve grupe. Prva grupa sastoji se samo od
jedne stavke iji natpis moe biti: Prvi Panel, Dtrugi Panel ili Oba Panela. Druga grupa sastoji
se od dve stavke: Boja... i Font....
Aktiviranjem stavke Boja otvara se Color dialog, dok izborom stavke Font otvara se Font
dialog. Program mora zadovoljiti sledee uslove: Sve opcije iz glavnog menija stavke Prvi moi
e se koristiti ako se kursor mia nalazi nad prvim Panelom. Sve opcija iz glavnog menija stavke
Drugi moi e se koristiti ako se kursor mia nalazi nad drugim Panelom. Sve opcije iz glavnog
menija stavke Obe moi e se koristiti ako se kursor mia nalazi nad formom a ne nad nekim
Panelom. Ako se mi nalazi nad prvim Panelom aktiviranjem kontekst menija stavka iz prve
grupe imae natpis Prvi Panel. Ako se mi nalazi nad drugim Panelom aktiviranjem kontekst
menija stavka iz prve grupe imae natpis Drugi Panel. Ako se mi ne nalazi nad Panelima ve
formom aktiviranjem kontekst menija stavka iz prve grupe imae natpis Oba Panela.
Reenje:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
269
#include "MenLab_o.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool prvi, drugi;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::BojaPrviogClick(TObject *Sender)
{
if(cdBoja->Execute()) lblPrvi->Color=cdBoja->Color;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FontPrvogClick(TObject *Sender)
{
if(FontDialog1->Execute()) lblPrvi->Font=FontDialog1->Font;
}
//--------------------------------------------------------------------------void __fastcall TForm1::BojaDrugogClick(TObject *Sender)
{
if(cdBoja->Execute()) lblDrugi->Color=cdBoja->Color;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FontDrugogClick(TObject *Sender)
{
if(FontDialog1->Execute()) lblDrugi->Font=FontDialog1->Font;
}
//--------------------------------------------------------------------------void __fastcall TForm1::BojaObaClick(TObject *Sender)
{
if(cdBoja->Execute())
{
lblPrvi->Color=cdBoja->Color;
lblDrugi->Color=cdBoja->Color;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::FontObaClick(TObject *Sender)
{
if(FontDialog1->Execute())
{
lblPrvi->Font=FontDialog1->Font;
lblDrugi->Font=FontDialog1->Font;
}
}
//---------------------------------------------------------------------------
270
271
desne strane prikazuje koliko je bilo pogodaka na mestu (crveni krui) i koliko pogodaka je bilo
a da nisu na mestu (beli krui).
Igrica se zavrava sa igrom ako se u toku 7 pokuaja (paleta) ne pogodi dobitna paleta, ili
ako seun nekom od pokuaja pogodi paleta boja. Po zavretku igre prikazuje sedobitna paleta
boja i odgovarajua poruka.
Igrica sadri liniju menija sa poljima File i Help. Padajui meni File sadri opcije New
Game ija je preica F2 (pokretanje nove igrice) i Exit (izlazak iz programa). Meni Help sadri
dva polja: Poodaci o igri i Pomo.
R
Reenje
Komponentom Shape
moe se prikazati jedna od nekoliko osnovnih oblika, kao to
su kvadrat, pravougaonik, krug i elipsa. Veliina oblika je odreena veliinom komponente, i
moe biti popunjen i uokviren popunama i linijama razliite boje i vrste.
Komponenta Shape nalazi se na paleti komponenti kartica Addiotional i tipa je TShape.
Svojstva:
272
Brush
Pen
Shape -
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Duga.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TShape *pok[61];
int niz1[4],niz2[4];
int i;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize();
Application->Title="Duga";
//Ukupno se na paletama moze pojaviti 60 Shape-ova
pok[1]=Shape1; pok[2]=Shape2; pok[3]=Shape3;
pok[4]=Shape4; pok[5]=Shape5; pok[6]=Shape6;
pok[7]=Shape7; pok[8]=Shape8; pok[9]=Shape9;
pok[10]=Shape10; pok[11]=Shape11; pok[12]=Shape12;
pok[13]=Shape13; pok[14]=Shape14; pok[15]=Shape15;
pok[16]=Shape16; pok[17]=Shape17; pok[18]=Shape18;
pok[19]=Shape19; pok[20]=Shape20; pok[21]=Shape21;
pok[22]=Shape22; pok[23]=Shape23; pok[24]=Shape24;
pok[25]=Shape25; pok[26]=Shape26; pok[27]=Shape27;
pok[28]=Shape28; pok[29]=Shape29; pok[30]=Shape30;
pok[31]=Shape31; pok[32]=Shape32; pok[33]=Shape33;
pok[34]=Shape34; pok[35]=Shape35; pok[36]=Shape36;
pok[37]=Shape37; pok[38]=Shape38; pok[39]=Shape39;
pok[40]=Shape40; pok[41]=Shape41; pok[42]=Shape42;
pok[43]=Shape43; pok[44]=Shape44; pok[45]=Shape45;
pok[46]=Shape46; pok[47]=Shape47; pok[48]=Shape48;
pok[49]=Shape49; pok[50]=Shape50; pok[51]=Shape51;
pok[52]=Shape52; pok[53]=Shape53; pok[54]=Shape54;
pok[55]=Shape55; pok[56]=Shape56; pok[57]=Shape57;
273
274
275
}
//--------------------------------------------------------------------------void __fastcall TForm1::Newgame1Click(TObject *Sender)
{
//Ako se iz menija izabere nova igra.
randomize();
i=1;
int k = 0,m;
while(k < 5)
{
do{
m=random(6);
}while(m<1);
niz1[k]=m;
k++;
}
//Podese se da svi krugovi budu bele boje.
for(int j=1;j<57;j++)pok[j]->Brush->Color=clWhite;
//Krugovi gde ce se prikazati rezultat se sakrivaju.
for(int j=29;j<57;j++)pok[j]->Visible=false;;
Shape57->Visible=false;
Shape58->Visible=false;
Shape59->Visible=false;
Shape60->Visible=false;
Panel9->Visible=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Exit1Click(TObject *Sender)
{
exit(1);
}
//--------------------------------------------------------------------------void __fastcall TForm1::About1Click(TObject *Sender)
{
//Prikazuje se dijalog sa porukom ko je autor igrice.
ShowMessage("CSoft Duga Version 1.0\n\nProduced by
ChileSoftware\n\nVeternik,Serbia and Montenegro\n04.02.2006");
}
//--------------------------------------------------------------------------void __fastcall TForm1::Pomoc1Click(TObject *Sender)
{
//Izborom stavke pomoc iz menija, bice prikazano upustvo
//za koriscenje ove igrice.
Memo1->Visible=true;
Button1->Visible=true;
Panel9->Visible=false;
}
//---------------------------------------------------------------------------
276
277
for(j=0;j<4;j++)
{
if(niz1[j]==niz2[j]) pok[i+n+24]->Brush->Color=clRed,n++;
if(niz1[j]!=niz2[j])
{
for(k=0;k<4;k++)
{
if(niz2[j]==niz1[k]&&niz2[k]!=niz1[k]&&
p[0]!=k&&p[1]!=k&&p[2]!=k&&p[3]!=k)
{
p[l]=k, k=4, l++;
}
}
}
}
for(j=0;j<(l+n);j++) pok[i+j+24]->Visible=true;
}
if(i==29||n==4)
{
i=29;
for(j=0;j<4;j++)
{
Shape57->Visible=true;
Shape58->Visible=true;
Shape59->Visible=true;
Shape60->Visible=true;
Panel9->Visible=true;
if(niz1[j]==1)pok[57+j]->Brush->Color=clRed;
if(niz1[j]==2)pok[57+j]->Brush->Color=clBlue;
if(niz1[j]==3)pok[57+j]->Brush->Color=clYellow;
if(niz1[j]==4)pok[57+j]->Brush->Color=clGreen;
if(niz1[j]==5)pok[57+j]->Brush->Color=clFuchsia;
}
}
}
//--------------------------------------------------------------------------Primer 138:
Napraviti aplikaciju koja omoguaba
unos imena korisnika aplikacije i nakon
pritiska na taster POTVRDI predaje
korisniku pozdravnu poruku. U sluaju da
korisnik nije uneo svoje ime umesto
pozdravne poruke dobija informaciju o
greci.
Poruke predstaviti korienjem nove
forme.
Reenje
278
Metode forme:
Create Omoguava kreiranje forme i pozivanje OnClose dogaaja.
Release Unitava se obrazac i oslobaa se memorija koju je on zauzeo. Za razliku od
metode Free Realese metoda eka da se zavre svi dogaaji forme i pripadajuih
komponenti.
Show Bez ikakvog uslova omoguava da forma za koji se pozove postane vidljiv, tj da je
u ii.
ShowModal Prikazuje formu u modalnom stanju, odnosno iz forme se ne moe izai dok
se ne zatvori.
Hide Omoguava da prozor za koji se pozove postane nevidljiv.
Close Za glavnu formu predstavlja unitavanje, a za sekundarne forme njihovo skrivanje.
CloseQuery Ova metoda poziva dogaaj OnCloseQuery i vraa vrednost true ili false u
zavisnosti od dozvole za zatvaranje forme.
CreateNew Kreira novu formu istog tipa kao i forma iji se CreateNew metod poziva.
Dogaaji forme:
OnActivate Nastaje kada forma primi fokus.
OnClose Poziva se kada se forma zatvara. Pre ovog dogaaja uvek se automatski poziva
dogaaj OnCloseQuery.
OnCloseQuery U njemu se programski moe onemoguiti izvravanje dogaaja OnClose
u sluaju da se iz nekih razloga zabrani zatvaranje forme.
OnCreate Poziva se kada se forma prvi put kreira.
OnHide Poziva se kada forma postane nevidljiva pozivom metode Hide ili postavljanjem
Visible svojstva na false. Forma i dalje postoji i mogu joj se menjati svojstva i
izvravati metode, ali nije vidljiva na ekranu.
OnShow Poziva se kada forma postane vidljiva.
OnResize Poziva se svaki put kada forma promeni veliinu.
Pozdravna_poruka_o.cpp
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Pozdravna_poruka_o.h"
279
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
s="Greska!!\nNiste uneli svoje ime?";
Form2->Label1->Caption=s;
Form2->Left=Form1->Left+Form1->ClientWidth +10;
Form2->ShowModal(); //Form2 postaje aktivna.
Edit1->SetFocus();
}else{
s= "Zdravo "+Edit1->Text+"!!";
Form2->Label1->Caption=s;
Form2->Left=Form1->Left+Form1->ClientWidth+10;
Form2->ShowModal(); //Form2 postaje aktivna.
Edit1->Text="";
Edit1->SetFocus();
}
}
//--------------------------------------------------------------------------Pozdravna_poruka_o.h
//--------------------------------------------------------------------------#ifndef Pozdravna_poruka_oH
#define Pozdravna_poruka_oH
//--------------------------------------------------------------------------#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
280
281
Reemje:
Bitno svojstvo dugmeta Button je ModalRezult sa dve najvanije vredmosti mrOK
i mrCancel. Nakon klika na dugme forma se zatvara I vraa rezultat koji je u svojstvu
ModalRezult podeen.
Forma 2
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "upustvo.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//--------------------------------------------------------------------------__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm2::Panel1Click(TObject *Sender)
{
if(ColorDialog1->Execute())
{
Panel1->Color=ColorDialog1->Color;
}
}
//--------------------------------------------------------------------------Forma 1:
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "dinform_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
282
{
Form2 = new TForm2(this);
if(Form2->ShowModal()==mrOk){
int brv,brk,vis,sir;
brv=StrToInt(Form2->Edit1->Text);
brk=StrToInt(Form2->Edit2->Text);
sir=(Panel1->Width-10-brk*10)/brk;
vis=(Panel1->Height-10-brv*10)/brv;
for(int i=1;i<=brv;i++)
for(int j=1;j<=brk;j++)
{
TPanel *pan = new TPanel(Panel1);
pan->Parent=Panel1;
pan->Width=sir;
pan->Height=vis;
pan->Left=10+(j-1)*(sir+10);
pan->Top=10+(i-1)*(vis+10);
pan->Color=Form2->Panel1->Color;
}
}
Form2->Free();
}
//---------------------------------------Primer 140:
Napraviti aplikaciju koja se
sastoji od dva polja, prvi za unos
teksta, a drugi za prikaz kopije
teksta. Drugo polje je sive boje i
iz njega se moe samo itati
sadraj. Na formi se nalaze i tri
dugmeta koja su neaktivna
prilikom startovanja aplikacije.
im se promeni sadraj prvog
unosa (tj polje sadri neki tekst) aktivira se dugme KOPIJA i dugme BRISANJE. Klikom na
dugme KOPIJA tekst prvog polja se upisuje u drugo polje i dugme ZAMENA postaje aktivno.
Klikom na dugme ZAMENA menja se sadraj polja i to pod uslovom da polja nemaju isti
sadraj, dok se u suprotnom prijavljuje poruka o greci.
Klikom na dugme BRISANJE brie se sadraj oba polja i sva tri dugmeta postaju
neaktivna.
Program sadri meni i kontekst meni sa potpuno istim stavkama: Kopiranje (preica
Ctrl+C), Zamena (preica Ctrl+B) i Brisanje (preica Del) Koje dugme se moe koristiti je
povezano sa menijima (ako je dugme Kopiranje neaktivno, sive boje, automatski je neaktivna i
stavka iz menija Kopiranje). U realizaciji programa obavezno koristiti komponentu ActionList.
283
Reemje:
Komponenta ActionList
nalazi se na
Standard traci sa alatkama. Komponenta sadri spisak
akcija koje se mogu desiti. Prednost korienja ove
komponente je u tome to pre nego to se desi dogaaj
akcije proveravaju se uslovi od svih akcija automatski
tako da programmer ne mora da voidi rauna o tome.
Akcije se u listu akcija dodaju tako to se duplo
klikne na komponentu nakon ega se pojavljuje Edit
prozor sa slike:
Klikom na dugme NewAction dodaje se akcija a
sa DeleteAction brie se sa spiska odabrana akcija.
Nakon dodavanja akcija potrebno je svaku akciju povezati sa nekom komponentom, a to
se radi pomou svojstva Action od komponente nad kojom e se akcija odvijati.
Dva osnovna dogaaja komponente ActionList su OnUpdate i OnExecute.
Dogaajem OnUpdate kontrolie se uslov koji je potreban da komponenta postane
aktivna nad kojom da bi se uopte akcija mogla sprovesti. Dogaaj OnExecute vri sprovoenje
akcije.
U ovom primeru svojstva Action dugmeta sa natpisom Kopiranje, stavke Kopiranje iz
menija i stavke Kopiranje iz kontekst menija imaju ime Kopiranje, a stavka ActionListe je akcija
sa imenom Kopiranje. Ovim smo povezali dugme, stavku iz menija i stavku iz kontekst menija,
tako da e reagovati sve na istu akciju preko dogaaja OnExecute I biti istovremeno aktivne ili
neaktivne na osnovu automatske provere putem dogaaja OnUpdate.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "za30_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::KopiranjeUpdate(TObject *Sender)
{
if(Edit1->Text!="" && Edit2->Text=="") Kopiranje->Enabled=true;
else Kopiranje->Enabled=false;
}
284
285
Reemje:
Komponenta BitBtn
je dugme sa slikom I nalazi se na kartici Additional.
Svojstvo Kind odreuje vrstu dugmeta. Ako ima vrednost bkCustom oznaava da je
dugmetu sliku pridruio programer.
Svojstvo Layout odreuje poloaj slike i teksta na dugmetu: blGlyphLeft (slika se nalazi
levo od natpisa), blGlyphRight (slika se nalazi desno od natpisa). Slika se podrazumevano nalazi
levo od natpisa.
Svojstvo Margin je tipa int i odreuje razmak izmeu slike i ivice dugmeta.
Svojstvo Spacing je tipa int i odreuje razmak izmeu slike i natpisa.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Kraj1Click(TObject *Sender)
{
this->Close();
}
//--------------------------------------------------------------------------void __fastcall TForm1::Abort1Click(TObject *Sender)
{
Application->Title = "DIGITRON";
ShowMessage("Posle unetih vrednotstioperanada,\nizaberite operaciju!!");
}
//---------------------------------------------------------------------------
286
287
288
{
double a, b, rez;
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
rez=a-b;
Label1->Caption="-";
Edit3->Text=FloatToStr(rez);
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::MnoziExecute(TObject *Sender)
{
double a, b, rez;
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
rez=a*b;
Label1->Caption="*";
Edit3->Text=FloatToStr(rez);
}
//--------------------------------------------------------------------------void __fastcall TForm1::DeliExecute(TObject *Sender)
{
double a, b, rez;
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
Label1->Caption=":";
if(b==0)
{
ShowMessage("Greska!! Deljenje sa nulom!!");
Edit1->Clear();
Edit2->Clear();
Edit1->SetFocus();
return;
}
rez=a/b;
Edit3->Text=FloatToStr(rez);
}
//--------------------------------------------------------------------------void
__fastcall
TForm1::Help1Click(TObject
*Sender)
{
Form2 = new TForm2(this);
Form2->ShowModal();
Form2->Free();
289
}
//---------------------------------------------
Primer 142:
Napraviti aplikaciju koja prilikom startovanja aplikacije iz datoteke SPISAK.TXT uitava
redove i smeta ih kao stavke ComboBox-a, pri emu se prva stavka vidi u polju unosa
ComboBox-a..
Postoji polje za unos nove stavke, a to je Edit komponenta. Pritiskom na dugme UNESI,
sadraj Edit komponente ako nije prazan i nema ga ve meu stavkama ComBox-a, se prenosi
meu stavke ComboBox-a i prikazuje u polju C omboBox-a, a ako takve stavke ima prikazuje se
poruka o greki.
Postoji i polje za unos stavke koja treba da se izbrie iz ComboBox-a. Pritiskom na dugme
BRISI, ako stavka postoji u ComboBox-u, bie iz ComboBox-a izbrisana, a u suprotnom e se
prijaviti poruka o greki.
Klikom na neku stavku, sadraj stavke se upisuje u drugi Efdit.
Zatvaranjem prozora aplikacije celokupni sadraj stavki ComboBoxa se upisuju u datoteku
STAVKE.TXT.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "txt.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
ComboBox1->Items->LoadFromFile("SPISAK.TXT");
ComboBox1->ItemIndex=0;
Application->Title="GRESKA...";
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")ShowMessage("Greshka!'");
else{
int i=0;
while(i<ComboBox1->Items->Count &&
Edit1->Text!=ComboBox1->Items->Strings[i]) i++;
if(i==ComboBox1->Items->Count)
290
{
ComboBox1->Items->Add(Edit1->Text);
ComboBox1->Text=Edit1->Text;
}else ShowMessage("Stavka "+Edit1->Text+" vec postoji u listi!!");
Edit1->Clear();
}
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ComboBox1->Items->SaveToFile("SPISAK.TXT");
}
//--------------------------------------------------------------------------void __fastcall TForm1::ComboBox1Click(TObject *Sender)
{
Edit2->Text=ComboBox1->Text;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i=0;
while(i<ComboBox1->Items->Count &&
Edit2->Text!=ComboBox1->Items->Strings[i]) i++;
if(i<ComboBox1->Items->Count)
{
ComboBox1->Items->Delete(ComboBox1->ItemIndex);
Edit2->Clear();
}else ShowMessage("Stavka "+Edit1->Text+" ne postoji u listi!!");
}
//---------------------------------------------------------------------------
291
Primer 143:
Napraviti aplikaciju
koja
e
predstavljati
poznatu
deiju
igru
vealica. Igrica se igra dok
se ne pogodi odgovarajui
predmet, biljka, ivotinja,
grad ili drava. Na sluajan
nain se bira ta e se
pogaati
iz
tekstualne
datoteke.
Svaki
red
tekstualne datoteke sastoji
se od jednog pojma koga
treba pogaati i to oblika
slovo na ta se pogaanje
odnosi zarez i ta se
pogaa. Slovo moe biti:
P predmet,
ivotinja,
G grad,
B biljka i
D drava.
Prvi red datoteke
sadri broj redova gore opisanog formata. Izgled igrice je kao na slici. Slova se zadaju
klikom na panele na kojima pie odgovarajue slovo. Samoglasnici su crv ene, a
suglasnici crne boje slova. Na sivom panelu dinamiki se kreira niz Edita gde e se
prikazati pogoena slova. Edit gde treba prikazati prazninu, koja se ne pogaa, se sakriva.
TstringList je novi tip podatka, koji pretstavlja niz stringova. Poseduje u sebi metode
LoadFromFile(AnsiString Files); i SaveToFile(AnsiString Files); Svojstvo Count odreuje broj
stringova u listi. Stringu iz liste se pristupa pomou indeksa. Stringovi u listi su tipa AnsiString.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "chicha_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TStringList *ss;
AnsiString zrec; //Zadata rec
bool bilapraz; //Da li u reci koja se trazi postoji praznina
292
293
pom=pom.UpperCase();
sta=pom.SubString(1,1); //Slovo pojma sta se pogadja.
zrec=pom.Delete(1,2); //Zadata rec koja se pogadja
//Na osnovu slova ispisujemo u Labeli pojam koji se pogadja.
if(sta=="P") Label2->Caption="PREDMET";
if(sta=="") Label2->Caption="IVOTINJA";
if(sta=="B") Label2->Caption="BILJKA";
if(sta=="D") Label2->Caption="DRAVA";
if(sta=="G") Label2->Caption="GRAD";
int brdvoz=0,br;
pom=zrec;
brdvoz=BrojDvoznaka(pom); //Utvrdjujemo broj dvoznaka.
int inde=zrec.Pos(" "); //Utvrdjujemo da li ima praznine u zadatoj reci.
pom=zrec.SubString(1,inde); //Rec do praznine.
br=BrojDvoznaka(pom); //Broj dvoznaka do praznine.
int ind=inde-br; //Indeks gde se praznina nalazi.
int poz=Panel2->Width/2-(47*zrec.Length()-15)/2;
brslova=zrec.Length()-brdvoz; //Moramo u zadatoj reci utvrditi broj slova, a kako je
//dvoznak slovo to se od broja slova mora izbaciti broj
//dvoznaka.
for(int i=0;i<brslova;i++) //Formiramo niz Edita koliko ima slova u zadatoj reci.
{
TEdit *ed = new TEdit(Panel2); /
ed->Parent=Panel2;
ed->Width=22;
ed->Height=25;
ed->Left=poz+i*(15+ed->Width);
ed->Font->Size=12;
ed->Font->Style=TFontStyles()<<fsBold;
ed->Top=15;
ed->ReadOnly=true;
ed->Font->Color=clBlack;
ned[i]=ed;
}
bilapraz=false;
if(inde!=0) //Ako ima praznina u zadatoj reci.
{
ned[ind-1]->Visible=false; //Edit komponenta gde bi trebalo da pise praznina a
//sobzirom da se praznina ne pogadja to se praznina mora
//sakriti.
brslova--; //U slova se ne racuna praznina.
bilapraz=true; //Praznina je bila u zadatoj reci.
}
294
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ss->Free(); //Brise se lista jer smo je mi dinamiki formirali.
}
//--------------------------------------------------------------------------void __fastcall TForm1::Panel3Click(TObject *Sender)
{
TPanel *pn=dynamic_cast <TPanel *> (Sender);
//Definisemo i inicijalizujemo niz slika. Prva slika sadrzi gredu za vesanje, na drugoj se
//nalazi obesena glava, itd, Slika ima sedam. Nakon sest neuspesnih pokusaja telo je
//obeseno.
TImage *im[7]={Image1,Image2,Image3,Image4,Image5,Image6,Image7};
int i=0;
bool kon=false;
AnsiString pom=zrec,pompre;
//Radi dok ima slova u zadatoj reci.
while(pom.Pos(pn->Caption))
{
kon=true; //Postoji slovo u zadatoj reci.
int j=pom.Pos(pn->Caption);//Trazi poziciju slova u reci.
if(j!=0) //Ako slova ima u reci.
{
pompre=pom.SubString(1,j); //Izdvajamo string do tog slova.
int br=BrojDvoznaka(pompre); //Utvrdjujemo broj dvoznaka do njega.
if(j<pom.Length()) //Ako slovo nije poslednje u reci.
{
if(pn->Caption.Length()>1) //Ako je slovo dvoznacno.
{
i+=j-br; //Sabiramo prethodni indeks jer brisemo deo po deo reci.
ned[i-1]->Text=pn->Caption; //U pravi Edit upisujemo slovo.
//Brisemo deo reci zakljucno sa tim slovom.
pom.Delete(1,j-1+pn->Caption.Length());
}else{
//Ako je slovo koje je uneto jednoznacno ne sme se porediti sa delom
//dvoznacnog slova.
if(!(pom[j]=='N' && pom[j]=='j')&& !(pom[j]=='L' &&
pom[j]=='j')&& !(pom[j]=='D' && pom[j]=='') )
{
//Slovo je jednoznacno a oduzimamo broj ranije dvoznacnih
//slova..
i+=j-br;
ned[i-1]->Text=pn->Caption;
295
pom.Delete(1,j-1+pn->Caption.Length());
}
}
}else{
//Slovo je poslednje u reci.
i+=j-br;
ned[i-1]->Text=pn->Caption;
pom.Delete(1,j-1+pn->Caption.Length());
}
}
}
if(kon==false) //Ako nije bilo slova u reci, promasio je.
{
im[bro]->Visible=false; //Dosadasnja slika se sakriva.
bro++; //Broj neuspelih pokusaja se uvecava.
im[bro]->Visible=true; //Nova slika koja je po redu se prikazuje.
if(bro==6) //Ako je iskoristio svih sest pokusaja.
{
GroupBox1->Enabled=false; //Ne moze vise igrati potez izbora slova.
//Prikazuje se poruka da nije uspeo i rec koju je trebao pogoditi.
ShowMessage("Obesen si!!\nResenje je> "+zrec);
}
}else{
int brojac=0,br;
//Moramo znati broj Edita a zeza nas praznina jer postoji skriveni Edit. Ako postoji
//praznina.
if(bilapraz==true) br=brslova+1;
else br=brslova;
for(int i=0;i<br;i++)
{
if(ned[i]->Enabled==true) //Samo vidljive Editec a ne skriveni.
{
if(ned[i]->Text!="") brojac++; //Brojimo pogotke, a time su polja puna.
}
}
if(brojac==brslova) //Ako je broj slova jednak broju pogodaka, pogodio ja pojam.
{
GroupBox1->Enabled=false;
ShowMessage("Svaka cast!!"); //Prikazuje se poruka o uspehu.
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Igra1Click(TObject *Sender) Opcija menija,
{
TImage *im[7]={Image1,Image2,Image3,Image4,Image5,Image6,Image7};
296
Image1->Visible=true; //Samo prva slika mora postati vidljiva a sve ostale skrivene.
for(int i=1;i<7;i++) im[i]->Visible=false;
GroupBox1->Enabled=true; //Moze otvarati slovo.
int br;
if(bilapraz==true) br=brslova+1;
else br=brslova;
//Unistavamo sve Edite jer cemo ih ponovo formirati pokretanjem nove igrice.
for(int i=0;i<br;i++) ned[i]->Free();
bro=0;
FormCreate(Sender);
}
//--------------------------------------------------------------------------void __fastcall TForm1::Kraj1Click(TObject *Sender) //Opcija menija.
{
int br;
if(bilapraz==true) br=brslova+1;
else br=brslova;
for(int i=0;i<br;i++) ned[i]->Free();
this->Close();
}
//---------------------------------------------------------------------------
Primer 144:
Napraviti
aplikaciju
koja
omoguava uitavanje tekstualne datoteke,
na osnovu imena datoteke sa ekstenzijom.
Pritiskom na taster OTVORI datoteka se
otvara i smeta u Memo komponentu.
Pojedine rei datoteke poinju i
zavravaju se znakom #. Druga
komponenta Memo sadrae sve rei bez
ponavljanja koje se nalaze izmeu
znakova #. Rei su u Memo komponenti
prikazuje pretvorene u velika slova. Re
koja poinje I zavrava se znakom # mora
zadovoljiti osobinu da ne moe poeti u
jednom redu a zvravati i drugom redu.
Obe komponente Memo slue samo
za prikazivanje datoteke i izvetaja i ne
moe im se sadraj menjati.
Program poseduje zatitu od
pogreno unesenog imena datoteke, tako
to se u vidu poruke o greci u vidu
dijalog prozora pojavljuje upozorenje.
Klikom na dugme PONOVO
aplikacija se vraa u prvobitno stanje.
Reenje
297
DATOTEKA
Definicija:
Datoteka je osnovna logika jedinica u pogledu zapisa informacija na
jedinicama masovne memorije.
Za unos velikog obima podataka u programu ne koristimo ulaz sa tastature ve iz
datoteke (to takoe vai i u sluaju izlaza).
Prema nainu smetanja podataka, postoje dve vrste datoteka:
tekstualne datoteke, i
binarna datoteke.
Tekstualne datoteke sastoje se od niza znakova koji je znakovima za prelazak u
novi red ('\n') podeljen u redove. Binarne datoteke sastoje se od niza bajtova iji je
sadraj verna slika naina predstavljanja podataka u memoriji. U toku prenosa ne
primenjuje se konverzija, ve se vri prosto prenoenje podataka bajt po bajt. Podela
tekstualnih datoteka u redove je logika, a ne fizika organizacija. Tekstualne datoteke su
samo dugaki niz znakova (bajtova).
Za svaku datoteku koja se koristi u programu mora da postoji pokaziva na podatak
tipa FILE. Neka je to pokaziva pod nazivom dat, njegova deklaracija je:
FILE *dat;
Otvaranje datoteke
Datoteka pre bilo kakve obrade mora biti otvorena. To se postie funkcijom
fopen(). Funkcija fopen otvara navedenu datoteku i vraa pokaziva na tu datoteku (tip
FILE), a ako doe do greke funkcija vraa vrednost NULL. Prototip funkcije fopen je:
FILE fopen(const char *ime_staze, const char *access_mode);
ime_staze - je niz znakova koji sadri konpletnu stazu do navedene datoteke.
access_mode - odreuje nain pristupa datoteci. Dozvoljene vrednosti za
access_mode su:
"r" - otvara tekstualnu datoteku samo za itanje.
"w" - otvara tekstualnu datoteku samo za pisanje, odbacujui postojei sadraj
ako postoji bez opomene, ili kreirajui datoteku ako ona ne postoji.
"a" - otvara tekstualnu datoteku za pisanje, dodajui nove elemente na njen
kraj, ili stvarajui potpuno novu datoteku ako je nema.
"r+" - otvara tekstualnu datoteku za auriranje, itanje i pisanje, postavljajui
pokaziva na poetak datoteke.
"w+" - otvara tekstualnu datoteku za auriranje, itanje i pisanje, odbacujui
postojei sadraj ako postoji, ili kreira datoteku ako ona ne postoji.
"a+" - otvara tekstualnu datoteku za auriranje, itanje i pisanje, dodajui nove
elemente na njen kraj, ili stvara novu datoteku ako je nema.
298
Reimi otvaranja datoteka: "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b",
"ab+", "a+b" imaju istu sematiku kao i prethodno opisani naini, sa jednom razlikom
to oznaka b upuuje na binarni umesto tekstualnog reima pristupa datoteci.
Na primer:
FILE *dat;
dat = fopen("primer.txt","r");
Zatvaranje datoteke
Zatvaranje datoteke vri se funkcijom fclose(); iji je prototip:
int fclose(FILE *dat);
//--------------------------------------------------------------------------#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "zad6za3_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text=="")
{
ShowMessage("Niste uneli ime fajla!!!");
Edit1->SetFocus();
return;
}
FILE *dat;
char *ss= new char[30];
AnsiString p=Edit1->Text;
ss=StrPCopy(ss,p);
299
dat=fopen(ss,"r");
if(dat!=NULL)
{
Memo1->Lines->LoadFromFile(Edit1->Text);
fclose(dat);
}else{
ShowMessage("Nema takve datoteke!!");
Edit1->Clear();
Edit1->SetFocus();
return;
}
AnsiString pom,s;
int i,j,k;
bool kon=false;
for(i=0;i<Memo1->Lines->Count;i++) //Posmatramo red po red.
{
s=Memo1->Lines->Strings[i]; //Uzimamo red.
j=1;
while(j<s.Length()) //Dok ne dpdjemo do kraja stringa.
{
while(s[j]!='#'&&j<s.Length()) j++; //Trazimo znak '#'
if(j<s.Length()) //Ako smo ga nasli.
{
j++;
k=j;
while(s[j]!='#'&&j<s.Length()) j++; //Trazimo drugi znak '#'
pom=s.SubString(k,j-k); //Uzimamo string izmedju znakova '#'
j++;
//Posmatramo da li takve reci ima vec upisane te ako je nama
//vrsimo upis.
kon=false;
for(k=0;k<Memo2->Lines->Count&&kon!=true;k++)
{
if(Memo2->Lines->Strings[k].UpperCase()==
pom.UpperCase()) kon=true;
}
if(kon==false) Memo2->Lines->Add(pom.UpperCase());
}
}
}
300
Button1->Enabled=false;
Button2->Enabled=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Memo1->Lines->Clear();
Memo2->Lines->Clear();
Button1->Enabled=true;
Button2->Enabled=false;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title="Grerska!!";
Memo2->Lines->Clear();
}
//---------------------------------------------------------------------------
Primer 145:
Napraviti aplikaciju koja
prikazuje izvetaj izabrane
tekstualne datoteke. Klikom na
dugme Open pojavljuje se
Open dialog gde su prikazani
samo tekstualni fajlovi, a
korisnik bira i otvara jednu od
njih. U posebnoj Labeli nalazi
se naziv fajla sa ekstenzijom
bez putanje.
Izvetaj sadri podatke:
Broj znakova u datoteci, Redni
broj prvog najdueg reda u datoteci i Broj samoglasnika u datoteci.
Klikom na dugme Clear
program se vraa u poetno stanje.
Reenje
Komponenta
OpenDialog
301
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Red_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::OpenUpdate(TObject *Sender)
{
if(Label8->Caption=="Nema fajla") Open->Enabled=true;
else Open->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::OpenExecute(TObject *Sender)
{
if(OpenDialog1->Execute()) //Otvara se Open dialog, te ako je kliknuto na OK.
{
TStringList *s = new TStringList;
s->LoadFromFile(OpenDialog1->FileName);//Otvaramo datoteku sa tom putanjom.
AnsiString ime=OpenDialog1->FileName;
302
303
Primer 146:
Napraviti aplikaciju koja omoguava
izbor i otvaranje tekstualne datoteke pomou
Open dialoga i njeno smetanje u Memo
komponentu. U posebnoj Labeli upisuje se
celohupna putanja izabrane datoteke.
Program poseduje jedan ComboBox sa
velikim slovima Engleske abecede, pri emu
je trenutno aktivno slovo A, prilikom
startovanja aplikacije.. U posebnom Editu
prikazuje se broj pojavljivanja izabranog
slova u datoteci.
Komponenta ComboBox moe da
prihvati unos samo jedanog karaktera. Slova
se moraju automatski pretvarati u velika, a u
polju ispisa, uvek je aktivan broj pojave
slova u odnosu na stanje sadraja polja
ComboBoxa.
Koristiti
i
ActionList
komponentu, radi aktiviranju dugmadi Open
i Clear, kao i uslova kada su dugmadi
aktivna, a kada ne.
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
304
#include "Pojava_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1:: FormCreate( TObject *Sender)
{
//Upisuju se velika slova u ComboBox
for(int i=0;i<25;i++)
{
char c='A'; //Karakter a prvo je A.
AnsiString s;
c=c+i; //Prelazimo na sledeci karakter jer su oni slozeni u ASSCII tabeli po bbecedi.
s=s.StringOfChar(c,1); //Na osnovu karaktera c formiram string od jednog karaktera.
ComboBox1->Items->Add(s); //Dodajem string u listu ComboBoxa
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, char &Key)
{
if(!isalpha(Key)) Key=0; //Mogu se unositi samo slova.
}
//--------------------------------------------------------------------------void __fastcall TForm1::ClearExecute(TObject *Sender) //Akcija brisanje.
{
Memo1->Lines->Clear(); //Brisemo Memo prikaz datoteke.
ComboBox1->Enabled=false; //Onemogucavamo bviranje slova.
ComboBox1->Text="0"; //Brisemo polje prikaza ComboBoxa uz upis broja nula.
Label3->Caption="Nema Fajla"; //Upisujemo da Nema prikaza fajla.
Edit1->Text="0"; //Trenutni zbir kao i na pocetku je nula.
}
//--------------------------------------------------------------------------void __fastcall TForm1::ClearUpdate(TObject *Sender)
{
//Ako je Memo prazan znak je da nije otvorena datoteka a to je znak da je akcija neaktivna,
//a u suprotnom je aktivna.
if(Memo1->Lines->Count!=0) Clear->Enabled=true;
else Clear->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::OpenExecute(TObject *Sender) //Akcija Otvaranja datoteke.
305
{
ComboBox1->Enabled=true; //Mozemo birati slovo.
if(OpenDialog1->Execute())
{
//Otvaramo izabranu tekstualnu datoteku.
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
Label3->Caption=OpenDialog1->FileName; //Upisujemo putanju datoteke.
//Brojimo pojavu izabranog slova u datoteci. Tako sto trazimo pojavu slova red po red
//iz Memo komponente.
int br=0;
for(int i=0;i<Memo1->Lines->Count;i++)
{
AnsiString t,s=Memo1->Lines->Strings[i];
s=s.UpperCase(); //Sva slova pretvaramo u velika radi poredjenja.
306
Primer 147:
Napraviti aplikaciju koja omoguava dodavanje imena izabranih datoteka u listu
komponente ComboBox. Klikom na dugme Odredi u Memo je prikazan izvetaj o
datoteci iz liste koja je imala najvei zbir, pri emu se ispisuje ime fajla sa ekstenzijom
bez putanje. Spisak izabranih datoteka u komponenti ListBox takodje sadri samo imena
datoteka sa ekstenzijama bez putanja, kao i vrednost tog najveeg zbira.
Niti jedna stavka prilikom dodavanja naziva fajla u ListBox komponentu nije
aktivna, a time je i izvetaj GroupBox komponente prazan. Klikom na neku stavku iz
ListBox komponente, stavka postaje aktivna, a u izvetaju GroupBox komponente
upisana je celokupna putanja datoteke oznaene u ListBoxu, kao i zbir koji se nalazi u toj
datoteci. Klikom na dugme Brisi stanje aplikacije se vraa kao da se nalazimo na
poetku.
Program poseduje meni i kontekst meni sa istim opcijama: Dodaj (preica Ins),
Brisi (preica Del) i Odredi (preica F10), stim to meni sadri i stavku Izvestaj.
Pomou komponente ActionListe povezati dugmadi, oipcije menija i opcije kontekst
menija.
Brojevi u datoteci moraju biti celobrojni i svaki red u datoteci sadri samo
jedan broj.
Ako je neka datoteka, u listti komponente ListBoxa, prazna, program je izbacuje iz
List Boxa.
Meni glavni sadri i stavku Izvestaj ispred koga ako je ekiran bie prikazan
izvetaj u GroupBox komponenti, a u suprotnom i GroupBox komponente nema na
formi.
307
Reenje
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Zbir_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TStringList *list;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Izvestaj1Click(TObject *Sender)
{
if(Izvestaj1->Checked==true)
{
Izvestaj1->Checked=false;
GroupBox1->Visible=false;
}else{
Izvestaj1->Checked=true;
GroupBox1->Visible=true;
}
308
}
//--------------------------------------------------------------------------void __fastcall TForm1::DodajUpdate(TObject *Sender)
{
Dodaj->Enabled=true; //Uvek se moze dodavati u listu.
}
//--------------------------------------------------------------------------void __fastcall TForm1::DodajExecute(TObject *Sender)
{
if(OpenDialog1->Execute()) //Biramo datoteku.
{
AnsiString s=OpenDialog1->FileName;
list->Add(s);
int k;
while((k=s.Pos("\\"))!=0) s=s.Delete(1,k); //Brisemo putanju.
ListBox1->Items->Add(s); //Dodajemo u ListBox
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
list = new TStringList; //Pravimo objekat liste stringova.
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::BrisiUpdate(TObject *Sender)
{
//Moze se brisati ako postoji lista u ComboBoxu
if(ListBox1->Count!=0) Brisi->Enabled=true;
else Brisi->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::BrisiExecute(TObject *Sender)
{
ListBox1->Clear();
Memo1->Clear();
Label2->Caption="???";
Label4->Caption="???";
}
//--------------------------------------------------------------------------void __fastcall TForm1::OdrediUpdate(TObject *Sender)
{
//Mozemo odrediti najveci zbir ako ima fajlova u ListBoxu
if(ListBox1->Count!=0) Odredi->Enabled=true;
else Odredi->Enabled=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::OdrediExecute(TObject *Sender)
{
309
Primer 148:
Napisati C program koji omoguava formiranje strukture radnik sa poljima:
310
1)
2)
3)
4)
Ime,
Prezime,
Koeficijen za dato radno mesto; i
Godine radnog staa.
Reenje
Definicija strukture:
Struktura predstavlja izvedeni tip podatka koji sadri promenljive istog ili
razliitog tipa. Koristi se u sluajevima kada su podaci u meusobnoj vezi, jer se
mogu grupisati pod istim imenom.
Definisanmje novog tipa podatka strukturnog tipa:
unsigned staz;
} Tradnik;
/* Deklaracija strukturne promenljive a i b tipa Tradnik. */
Tradnik a, b;
/* Inicijalizacija strukturne promenljive a.
a.prezime_i_ime=;
a.starost = 0;
a.staz = 0;
/* Naredbu dodele mozemo koristiti izmedju struktura. */
b = a;
Prilikom naredbe dodele vri se automatsko kopiranje odgovarajuih polja jedne
strukture u drugu. U ovom sluaju vrednosti polja strukture a su prekopirane u strukturu
b. Ovim se skrauje kod programa i ne mora se koristiti funkcija strcpy da bi se polje
koje predstavlja string prekopirao iz polja strukture a u polje strukture b.
Strukturna promenljiva se moe inicijalizovati i prilikom deklaracije.
Tradnik a = {"", 0, 0};
Prilikom realizacije ovog zadatka struktura Tradnik definie se u posebnom Uniti,
koji se potom ukljuuje u Unit Forme aplikacije.
Radnik.h
//--------------------------------------------------------------------------#ifndef RadniciH
#define RadniciH
#include <System.hpp>
//--------------------------------------------------------------------------typedef struct Radnik{
AnsiString ime;
AnsiString prezime;
float koeficijent;
int staz;
float dohodak;
}TRadnik; //Definisan je novi tip podatka Tradnik.
//--------------------------------------------------------------------------#endif
Glavni program
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Radnik_o.h"
312
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if(!isalpha(Key) && Key!=8) Key=0;
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit4KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8 && Key!='.') Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
AnsiString s=ed->Text;
if((Key!='.' && Key!=8) && s=="0") Key=0;
if(Key=='.')
{
int k=s.Pos(".");
if(k!=0 || s=="") Key=0;
}
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit3KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key) && Key!=8) Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
if(ed->Text==""&&Key=='0') Key=0;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::utvrdiExecute(TObject *Sender)
{
TRadnik rad; //Deklaracija strukturne promenljive rad.
float bod;
313
314
if(Edit4->Text=="0") Edit4->Clear();
}
//------------------------Primer 149:
Napraviti
aplikaciju
koja
omoguava
izvravanje osnovnih
aritmetikih operacija
nad
skupom
kompleksnih brojeva:
Sabiranje,
Oduzimanje,
Mnoenje i Deljenje.
Svaki
kompleksni
broj se sastoji od realnog i imaginarnog dela koji su oblika razlomka.
Formirati strukturne tipove podataka TRacBroj i TKompBroj. TRacBroj je tip
koji se sastoji od dva celobrojna podatka: brojilac i imenilac, pri emu imenilac mora biti
pozitivan broj. Nad podatkom tipa TRacBroj mogu se izvravati operacije: sabiranja,
oduzimanja, mnoenja i deljenja, korienjem odgovarajuih funkcija. Strukturni tip
podataka TKompBroj sastoji se od realnog i imaginarnog podatka tipa TRacBroj. Nad
podatkom TKompBroj mogu se koristiti funkcije za sabiranje, mnoenje i deljenje dva
kompleksna broja, pri emu funkcije kao rezultat vraaju kompleksni broj tipa
TKompBroj..
Reenje
Racionalni.h
//--------------------------------------------------------------------------#ifndef RacionalniH
#define RacionalniH
//--------------------------------------------------------------------------typedef struct Rac{
int x;
int y;
}TRacBroj;
TRacBroj SabRac(TRacBroj a, TRacBroj b);
TRacBroj OduRac(TRacBroj a, TRacBroj b);
TRacBroj MnoRac(TRacBroj a, TRacBroj b);
TRacBroj DelRac(TRacBroj a, TRacBroj b);
TRacBroj Sredi(TRacBroj a);
//--------------------------------------------------------------------------#endif
Racionalni.cpp
315
//--------------------------------------------------------------------------#pragma hdrstop
#include "Racionalni.h"
#include <math.h>
//--------------------------------------------------------------------------int nzd(int a, int b)
{
while(b!=0)
{
int c=a%b;
a=b;
b=c;
}
return a;
}
//--------------------------------------------------------------------------TRacBroj SabRac(TRacBroj a, TRacBroj b)
{
TRacBroj rez;
rez.x=a.x*b.y + b.x*a.y;
rez.y=a.y*b.y;
int z=nzd(abs(rez.x),rez.y);
rez.x/=z;
rez.y/=z;
return rez;
}
//--------------------------------------------------------------------------TRacBroj OduRac(TRacBroj a, TRacBroj b)
{
TRacBroj rez;
rez.x=a.x*b.y - b.x*a.y;
rez.y=a.y*b.y;
int z=nzd(abs(rez.x),rez.y);
rez.x/=z;
rez.y/=z;
return rez;
}
//---------------------------------------------------------------------------
316
317
}
//--------------------------------------------------------------------------#pragma package(smart_init)
Kompleksni.h
//--------------------------------------------------------------------------#ifndef KompleksniH
#define KompleksniH
#include "Racionalni.h"
//--------------------------------------------------------------------------typedef struct Komp{
TRacBroj real;
TRacBroj imag;
}TKompBroj;
TKompBroj SabKomp(TKompBroj a, TKompBroj b);
TKompBroj OduKomp(TKompBroj a, TKompBroj b);
TKompBroj MnoKomp(TKompBroj a, TKompBroj b);
TKompBroj DelKomp(TKompBroj a, TKompBroj b);
//--------------------------------------------------------------------------#endif
Kompleksni,cpp
//--------------------------------------------------------------------------#pragma hdrstop
#include "Kompleksni.h"
//--------------------------------------------------------------------------TKompBroj SabKomp(TKompBroj a, TKompBroj b)
{
TKompBroj rez;
rez.real=SabRac(a.real,b.real);
rez.imag=SabRac(a.imag,b.imag);
return rez;
}
//--------------------------------------------------------------------------TKompBroj OduKomp(TKompBroj a, TKompBroj b)
{
TKompBroj rez;
rez.real=OduRac(a.real,b.real);
rez.imag=OduRac(a.imag,b.imag);
return rez;
}
//---------------------------------------------------------------------------
318
319
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if(!isdigit(Key)) Key=0;
else{
TEdit *ed = dynamic_cast <TEdit *> (Sender);
if(ed->Text=="" && Key=='0') Key=0;
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::RacunajExecute(TObject *Sender)
{
TKompBroj prvi,drugi,rez;
prvi.real.x=StrToInt(Edit1->Text);
prvi.real.y=StrToInt(Edit2->Text);
prvi.imag.x=StrToInt(Edit3->Text);
prvi.imag.y=StrToInt(Edit4->Text);
drugi.real.x=StrToInt(Edit5->Text);
drugi.real.y=StrToInt(Edit6->Text);
drugi.imag.x=StrToInt(Edit7->Text);
drugi.imag.y=StrToInt(Edit8->Text);
switch(RadioGroup1->ItemIndex)
{
case 0: rez=SabKomp(prvi,drugi);
break;
case 1: rez=OduKomp(prvi,drugi);
break;
case 2: rez=MnoKomp(prvi,drugi);
break;
case 3: if(drugi.real.x==0 && drugi.imag.x==0)
{
Application->Title="GRESKA...";
ShowMessage("Deljenje sa nulom nije definisano!!");
Button2Click(Sender);
return;
}
rez=DelKomp(prvi,drugi);
break;
case -1: return;
}
Edit9->Text=IntToStr(rez.real.x);
Edit10->Text=IntToStr(rez.real.y);
Edit11->Text=IntToStr(rez.imag.x);
Edit12->Text=IntToStr(rez.imag.y);
}
320
Primer 150:
Napraviti aplikaciju koja omoguava unos polinoma u nesreenom obliku i njegovo
sreivanje po stepenima, klikom na dugme Radi.
Polinom se unosi tako to se unose lanovi polinoma razdvojeni prazninom. Svaki
lan polinoma sastoji se od koeficijenta i stepena, razdvojeni zarezom.
Ako nakon sreivanja koeficijent nekog lana ima vrednost nula, taj lan se ne pie
na izlazu.
U realizaciji zadatka koristiti strukturni tip podataka TPolinom koji se sastoji od
podataka koeficijent i stepen. Prilikom realizacije koristiti niz struktura tipa Tpolinom.
Na osnovu unetog polinoma u obliku AnsiStringa, kako je gore opisano, realizovati i
koristiti funkcije: void Stvori(TPolinom p[],int *n,AnsiString s); koja stvara polinom na
osnovu unesenog stringa, void Sredi(TPolinom p[],int *n); koja sreuje polinom sortiranjem i
saimanjem niza i AnsiString Stampa(TPolinom p[],int n); koja polinom sastavljen od niza
struktura pretvara u AnsiString.
321
Reenje
Polinom.h
//--------------------------------------------------------------------------#ifndef PolinomH
#define PolinomH
#include <system.hpp>
typedef struct Polinom{
int koef;
int step;
}TPolinom;
void Stvori(TPolinom p[],int *n,AnsiString s);
void Sredi(TPolinom p[],int *n);
AnsiString Stampa(TPolinom p[],int n);
//--------------------------------------------------------------------------#endif
Polinom.cpp
//--------------------------------------------------------------------------#pragma hdrstop
#include "Polinom.h"
#include <system.hpp>
#include <SysUtils.hpp>
//--------------------------------------------------------------------------void Stvori(TPolinom p[],int *n,AnsiString s)
{
AnsiString t;
int j;
*n=0;
while(s!="")
{
//Izdvoji koeficijent.
322
j=s.Pos(",");
t=s.SubString(1,j-1);
p[*n].koef=StrToInt(t);
s=s.Delete(1,j);
//Izdvoji stepen.
j=s.Pos(" ");
if(j!=0) t=s.SubString(1,j-1);
else t=s;
p[*n].step=StrToInt(t);
if(j!=0) s=s.Delete(1,j);
else s="";
(*n)++; //Predji na sledeci clan.
}
}
//--------------------------------------------------------------------------void Sredi(TPolinom p[],int *n)
{
int i,j,k;
for(i=0;i<*n-1;i++)
{
j=i+1;
while(j<*n)
{
//Trazim clan koji ima isti stepen.
if(p[i].step!=p[j].step) j++;
else{
//Ako sam ga nasao sabiram im koeficijente, upisivanjem na mesto
onog //clana koji je manjeg indeksa, tj i, a potom brisem onog koji ima
veci //indeks, tj j.
p[i].koef+=p[j].koef;
k=j;
while(k<*n-1) p[k]=p[k+1],k++;
p[*n-1].koef=0;
p[*n-1].step=0;
(*n)--;
}
}
}
//Nakon sabiranja desice se da su vrednosti takvih koeficijenata nula, te ih treba izbaciti.
i=0;
while(i<*n)
{
if(p[i].koef!=0) i++;
else{
k=i;
while(k<*n-1) p[k]=p[k+1],k++;
323
p[*n-1].koef=0;
p[*n-1].step=0;
(*n)--;
}
}
//Da bi polinom bio sredjen po stepenima, mora se izvrsiti sortiranje niza u opadajucem
//redosledu po stepenima.
for(i=0;i<*n-1;i++)
{
for(j=i+1;j<*n;j++)
{
if(p[j].step>p[i].step)
{
TPolinom pom=p[i];
p[i]=p[j];
p[j]=pom;
}
}
}
}
//--------------------------------------------------------------------------AnsiString Stampa(TPolinom p[],int n)
{
AnsiString s; //Formira se AnsiString s, tako sto se prolazi kroz niz i clanovi u poznatom
//formatu upisuju u string s.
for(int i=0;i<n-1;i++) s+=IntToStr(p[i].koef)+","+IntToStr(p[i].step)+" ";
s+=IntToStr(p[n-1].koef)+","+IntToStr(p[n-1].step);
return s;
}
//--------------------------------------------------------------------------#pragma package(smart_init)
Glavni program
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Glavni_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
324
Primer 151:
Napraviti aplikaciju koja pretstavlja Adresar. Podaci se uvaju u binarnoj datoteci.
Aplikacija akcije sprovodi preko dugmadi. Adresar jedne osobe sadri podatke: Ime i
prezime, Adresa stanovanja, Da li je profesor i Godine starosti. Ako je program u stanju
unosa ili izmene podataka dugmad Potvrdi i Odustani su neaktivna, sve dok se ne unesu
svi podaci osobe. Klikom na dugme Potvrdi podaci se upisuju u niz struktura, a po
zatvaranju aplikacije u binarnu datoteku.
Pomou dugmadi Prethodni i Sledeci lista se Adresar. Dugme Brisi vri brisanje
osobe iji su podaci prikazani na ekranu. Dugme Izmeni omoguava pristup stanju
Mmodifikacije podataka. Dugme Ubaci omoguava insertovanje osobe u Adresar, dok
dugme Novii omoguava dodavanje nove osobe kao poslednje u listi.
Prilikom realizacije programa koristite komponentu ActionList.
325
Reenje
Adresar.hpp
//--------------------------------------------------------------------------#ifndef KonUnosa_oH
#define KonUnosa_oH
//--------------------------------------------------------------------------#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CSPIN.h"
#include <ExtCtrls.hpp>
#include <ActnList.hpp>
//--------------------------------------------------------------------------typedef struct Osoba{
AnsiString Ime;
AnsiString Adresa;
bool od;
unsigned god;
}TOsoba;
//--------------------------------------------------------------------------typedef struct RasOsoba{
char Ime[30];
char Adresa[30];
bool od;
unsigned god;
}TRasOsoba;
326
327
int akt;
int n; //Broj osoba u nizu osoba.
bool Editing; //Ako je true moze se vrsiti Editovanje nove osobe.
bool Inserting; //Ako je true moze se vrsiti Insertovanje nove osobe.
bool Promena; //Ako je true moze se vrsiti Izmene podataka kod osobe.
public:
// User declarations
bool Provera(); //Proverava se da li su polja unosa popunjena.
__fastcall TForm1(TComponent* Owner);
};
//--------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;
//--------------------------------------------------------------------------#endif
Adresar.hpp
//--------------------------------------------------------------------------#include <vcl.h>
#include <stdio.h>
#include <fstream.h>
#include <stdio.h>
#pragma hdrstop
#include "KonUnosa_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
TOsoba *niz = new TOsoba[100]; //Definise se niz osoba.
//---------------------------------------------------------------------------
328
FILE *dat;
//Podaci se nalaze u binarnoj datoteci UNOS.DAT
if((dat=fopen("UNOS.DAT","rb"))!=NULL)
{
//Uzima se osoba po osoba iz binarne datoteke.
while(fread(&a,sizeof(TRasOsoba),1,dat))
{
pom.od=a.od;
pom.god=a.god;
pom.Ime=StrPas(a.Ime);
pom.Adresa=StrPas(a.Adresa);
niz[n]=pom; //Upisuje se osoba u niz osoba.
n++; //Prelazak na sledecu osobu.
}
fclose(dat); //Zatvaranje binarne datoteke, a adresar se nalazi u
//nizustruktura osoba.
}
if(n>0) //Ako je bilo osoba u datoteci.
{
akt=0; //Indeks osobe koja se prikazuje.
//Prikazuju se na ekranu podaci prve osobe.
Edit1->Text=niz[akt].Ime;
Memo1->Text=niz[akt].Adresa;
CheckBox1->Checked=niz[akt].od;
CSpinEdit1->Value=niz[akt].god;
Editing=false; //Nismo u fazi Editovanja ili Modifikacije.
Inserting=false;
}else{
Editing=true; //Nema podataka u nizu podataka te smo u stanju Editovanja ili
//Modifikacije.
Inserting=true;
}
Promena=false; //Nista se nece menjati kod osoba.
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
TOsoba pom;
TRasOsoba a;
FILE *dat;
dat=fopen("UNOS.DAT","wb"); //Otvara se datoteka za pisanje i prethodni sadrzaj
//datoteke se brise.
//Prolazimo kroz niz osoba i podatke upisujemo u datoteku.
for(int i=0;i<n;i++)
329
{
pom=niz[i];
StrPCopy(a.Ime,pom.Ime);
StrPCopy(a.Adresa,pom.Adresa);
a.od=pom.od;
a.god=pom.god;
fwrite(&a,sizeof(TRasOsoba),1,dat);
}
fclose(dat);
}
//--------------------------------------------------------------------------void __fastcall TForm1::NoviUpdate(TObject *Sender) //Uslov dodavanja nove osobe
{
Novi->Enabled=(!Editing) && (!Inserting) && Provera();
}
//--------------------------------------------------------------------------void __fastcall TForm1::NoviExecute(TObject *Sender)
{
Editing=true; //U fazi smo Editovanja.
Inserting=false; //Nismo u fazi insertovanja.
Promena=false; //Nizmo u fazi izmene.
//Brisemo polja unosa i fokusiramo se na prvo polje.
Edit1->Clear();
Memo1->Lines->Clear();
CheckBox1->Checked=false;
CSpinEdit1->Value=0;
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
330
331
}
//--------------------------------------------------------------------------void __fastcall TForm1::OdustaniExecute(TObject *Sender)
{
Editing=false; //Nismo vise u fazi Editovabnja. i ponovo upisujemo podatke do tada aktivne
//osobe, tj one ciji su podaci ranije prikazani, na ekranu.
Edit1->Text=niz[akt].Ime;
Memo1->Text=niz[akt].Adresa;
CSpinEdit1->Value=niz[akt].god;
CheckBox1->Checked=niz[akt].od;
}
//--------------------------------------------------------------------------void __fastcall TForm1::SledeciUpdate(TObject *Sender) //Uslov prelaska.
{
Sledeci->Enabled=(akt<n-1) && (!Editing) && (!Inserting);
}
//--------------------------------------------------------------------------void __fastcall TForm1::BrisiUpdate(TObject *Sender) //Kada se moze brisati osoba.
{
Brisi->Enabled= n>0 && (!Editing) && (!Inserting);
}
//--------------------------------------------------------------------------void __fastcall TForm1::BrisiExecute(TObject *Sender)
{
int j;
//Sazimanje niza, tj izbacivanje aktivne osobe iz niza osoba i smanjivanje broja osoba u nizu
//za jednu osobu.
j=akt;
while(j<n-1)
{
niz[j]=niz[j+1];
j++;
}
n--;
if(n!=0) //Ako nakon izbacivanja osobe, moze se desiti da nema osoba u nizu osoba.
{
//Ako ima osoba, prikazuje se trenutno aktivna osoba.
Edit1->Text=niz[akt].Ime;
Memo1->Text=niz[akt].Adresa;
CSpinEdit1->Value=niz[akt].god;
CheckBox1->Checked=niz[akt].od;
}else{
//Ako nema osoba u nizu osoba, polja se moraju isprazniti.
Edit1->Clear();
CSpinEdit1->Value=0;
CheckBox1->Checked=false;
Memo1->Lines->Clear();
332
akt=0;
}
Promena=true;
}
//--------------------------------------------------------------------------void __fastcall TForm1::SledeciExecute(TObject *Sender)
{
akt++; //Prelazak na novu osobu i prikaz njenih podataka na ekranu.
Edit1->Text=niz[akt].Ime;
Memo1->Text=niz[akt].Adresa;
CSpinEdit1->Value=niz[akt].god;
CheckBox1->Checked=niz[akt].od;
}
//--------------------------------------------------------------------------void __fastcall TForm1::IzmeniUpdate(TObject *Sender) //Uslov izmene podataka osobe.
{
Izmeni->Enabled=(n>0) && (!Editing) && (!Inserting);
}
//--------------------------------------------------------------------------void __fastcall TForm1::IzmeniExecute(TObject *Sender)
{
Editing=true;
Inserting=false;
Promena=true;
Edit1->SetFocus();
}
//--------------------------------------------------------------------------void __fastcall TForm1::UbaciUpdate(TObject *Sender) //Uslov Insertovanja nove osobe.
{
Ubaci->Enabled=(!Editing) && (!Inserting) && Provera();
}
//--------------------------------------------------------------------------//--------------------------------------------------------------------------void __fastcall TForm1::UbaciExecute(TObject *Sender)
{
Editing=false;
Inserting=true; //Vrsi se samo Insertovanje nove osobe.
Promena=false;
//Polja se prazne radi unosa podataka osobe i fokusira se prvo polje unosa.
Edit1->Clear();
Memo1->Lines->Clear();
CheckBox1->Checked=false;
CSpinEdit1->Value=0;
Edit1->SetFocus();
}
333
//--------------------------------------------------------------------------bool TForm1::Provera()
{
//Proverava se da li su polja unosa popunjena, te ako jesu vraca se vrednost true, a u
//suprotnom false.
if(Memo1->Text=="" || Edit1->Text=="") return false;
else return true;
}
//---------------------------------------------------------------------------
Primer 152:
Napraviti aplikaciju kao na slici, koja pretstavlja interfejs programa za Sluanje muzike.
Program mora zadovoljiti osobinu da se prilikom maksimiziranja ili promene veliine forme,
komponente na formi proporcionalno ire. Omoguiti korisniku programa mogunost promene
irine prozora prikaza stabla foldera i prikaza liste fajlova aktivnog foldera korienjem
komponente Splitter.
Reenje
Aplikacija pretstavlja program
ya sluanje muzike, koji mora sadrati listu pesama, mogunost filtriranja pesama, izbor jedinice
memorije i izbor foldera sa pesmama. Za realizaciju ovog problema potrebno je koristiti etiri
komponente koje se nalaze na kartici Win31.
DriveComboBox
FilterComboBox
334
DirectoryrListBox
FileListBox
FileListBox
Svojstva:
Directory Odreuje folder iji fajlovi se prikazuju kao stavke komponente.
Drive Slovo koje definie tekui drajv.
FileName Sadri naziv selektovanog fajla zajedno sa putanjom.
Mask Sadri masku koja odreuje koji fajlovi iz foldera se prikazuju.
DirectoryListBox
Svojstva:
Directory Odreuje selektovani folder.
Drive Slovo koje definie tekui drajv.
FileList Odfreuje FileListBox komponentu u kojoj se prikazuju fajlovi selektovanog
foldera.
335
DriveComboBox
FilterComboBox
Mask svojstvom.
Svojstva:
FileList Odreuje FileListBox komponentu u kojoj se primenjuje zadati filter.
Filter Odreeuje trenutno izabranu Masku.
Mask Definie mogue maske filtera.
Aplikacija poseduje mogunost proporcionalnog irenja komponenti sa promenom veliine
Forme. Problem se reava pomou dva svojstva: Align i Anchors.
Align
Anchors
336
ProgressBar
Svojstva:
Orientacion
Min
Max
Posicion
Step
Spliter
je komponenta koja se postavlja izmeu dve komponente koje popunjavaju
radni prostor neke kontejnerske komponente. Spliter moe da se postavi horizontalno ili
vertikalno. Korisnik pomou Splitera menja veliine komponenti izmeu koji se Spliter
nalazi.Komponenta Spliter nalazi se na kartici Additional.
Primer 153:
Napraviti aplikaciju koja pretstavlja program za Sluanje muzike. Prilikom
startovanja programa aktivna je ona jedinica memorije, folder i lista fajlova koji su bili
otvarani ranijim korienjem programa. Ako program nije u stanju da pronae takvu
putanju do foldera, ili se program prvi put startuje, prikazae se poruka o greki i prazna
lista.
Kada korisnik pronae folder sa pedmama, potrebno je da klikne na odabranu
pesmu sa liste. Tada poinje da se slua ta pesma, ProgressBar prikazuje koji deo pesme
se slua, a na Panelu iznad pie puni naziv pesme i ime izvoaa.
Nakon zavretka jedne pesme program automatski prelazi na drugu pesmu. Kada
zavri poslednju pesmu iz liste, automatski prelazi i startuje prvu pesmu sa liste.
337
Reenje
Za rad sa zvukom koristi se komponeta MediaPleyer
System. MediaPlayer je vizuelna komponenta izgleda kao na slici:
Play
Record
Stop
Prev
Next
Back
Step
Eject
Pause
338
Svojstva:
FileName Naziv datoteke
Length Ukupna duina medijuma, izraena jedinicama odreenim TimeFormat
svojstvom.
Frames Odreuje za koliko frejmova se vri pomeranje prilikom korienja metoda
Back i Next.
Position Izraava trenutnu poziciju medijuma u jedinicama podeenim TimeFormat
svojstvom.
Start
Odreuje poetnu poziciju medijuma izraenu TimeFormat svojstvom.
StartPos Odreuje poziciju od koje e se vriti sledea reprodukcija izraeno u
jedinicama podeenim TimeFormat svojstvom.
TimeFormat Odreuje format u kome se odreuju pojedine pozicije medijuma. Mogui
formati su:
tfMilliseconds Milisekunde.
tfMSF Minuti, sekundi i kadrovi.
tfFrames Kadrovi.
tfBytes - Bajtovi.
Metode:
Back Promena poloaja medijuma unapred za vrednost definisanu Frames svojsvom.
Close Zatvara ureaj.
Eject Izbacuje ureaj iz medijuma.
Next Pomera poloaj medijuma unapred za jednu stazu.
Open Otvara ureaj.
Pause Pauzira reprodukciju ili snimanje.
Play Zapoinje reprodukciju.
Previous Pomera poloaj medijuma unapred za jednu stazu.
Step Pomera poloaj medijuma unapred za vrednost definisanu Frames svojstvom.
Stop Zaustavlja reprodukciju ili snimanje.
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Muzi_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmPesme *frmPesme;
AnsiString a[1000]; //Spisak pesama.
int br=-1,kb+0; //Promenljiva br je redni broj pesme koja se slusa.
bool kon=false; //Ako je u toku pesma vrednost je true, a u suprotnom false.
//--------------------------------------------------------------------------__fastcall TfrmPesme::TfrmPesme(TComponent* Owner)
: TForm(Owner)
{
}
339
340
341
{
Label2->BringToFront();
Parametri = new TStringList();
//Sta je poslednje slusano, zapisano je u fajlu setings.dat koji se obavezno
//nalazi gde i exe fajl nase aplikacije.
ParametriFile =
IncludeTrailingPathDelimiter(ExtractFilePath(Application>ExeName))+
"settings.dat";
try{ //ovde pocinje blok koji je zasticen od Exception-a
Parametri->LoadFromFile(ParametriFile);
}catch(Exception* e){
//ovde pocinje blok koji kaze sta da se radi ako je Exception nastao
ShowMessage("Nema foldera od proslog puta sa muzikom!!");
}
}
//--------------------------------------------------------------------------void __fastcall TfrmPesme::FormClose(TObject *Sender, TCloseAction &Action)
{
if(Timer1->Enabled)mepPl->Close();
}
//--------------------------------------------------------------------------void __fastcall TfrmPesme::FormDestroy(TObject *Sender)
{
Parametri->Values["STARTUP_PATH"] = DirectoryListBox1->Directory;
try{
Parametri->SaveToFile(ParametriFile);
}catch(Exception* e){
}
Parametri->Free();
}
//--------------------------------------------------------------------------void __fastcall TfrmPesme::FormShow(TObject *Sender)
{
if(Parametri->Values["STARTUP_PATH"]!=""){
AnsiString path = Parametri->Values["STARTUP_PATH"];
DriveComboBox1->Drive = ExtractFileDrive(path)[1];
DirectoryListBox1->Directory = path;
}
}
//--------------------------------------------------------------------------Primer 154:
Napraviti aplikaciju koja pretstavlja interfejs Tekst procesor-a. Aplikacija poseduje: glavni
meni, PopupMenu i paletu dugmadi, koje su povezane ActionList komponentom. Glavni meni
sastoji se od stavki: File (New, Open, Save, SaveAs i Exit), Edit (Undo, Cut, Copy, Paste i
SelectAll) i Format (Font i Colors). PopupMenu sastoji se od stavki: Undo, Cut, Copy, Paste,
SelectAll , Font i Colors. Na traci sa alatkama nalaze se dugmadi New, Open, Save, Cut, Copy i
Paste. Tekst se prikazuje u komponenti Memo. Stavke Edita automatski ugradite pomou
ActionList komponente.
342
Reenje
ImageList
343
Primer 155:
Napraviti aplikaciju koja pretstavlja Tekst procesor. Aplikacija poseduje: glavni meni,
PopupMenu i paletu dugmadi, koje su povezane ActionList komponentom. Glavni meni sastoji se
od stavki: File (New, Open, Save, SaveAs i Exit), Edit (Undo, Cut, Copy, Paste i SelectAll) i
Format (Font i Colors). PopupMenu sastoji se od stavki: Undo, Cut, Copy, Paste, SelectAll , Font
i Colors. Na traci sa alatkama nalaze se dugmadi New, Open, Save, Cut, Copy i Paste. Tekst se
344
Reenje
TeksProcesor.hpp
//--------------------------------------------------------------------------#ifndef Text_oH
#define Text_oH
//--------------------------------------------------------------------------#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Menus.hpp>
#include <ToolWin.hpp>
#include <ImgList.hpp>
#include <ActnList.hpp>
#include <Dialogs.hpp>
#include <StdActns.hpp>
#include <ExtCtrls.hpp>
//--------------------------------------------------------------------------class TForm1 : public TForm
{
__published: // IDE-managed Components
345
TMainMenu *MainMenu1;
TPopupMenu *PopupMenu1;
TMenuItem *File1;
TMenuItem *Edit1;
TMenuItem *Format1;
TMenuItem *new1;
TMenuItem *Open1;
TMenuItem *Save1;
TMenuItem *SaveAs1;
TMenuItem *N1;
TMenuItem *Exit1;
TMenuItem *Undo1;
TMenuItem *N2;
TMenuItem *Cut1;
TMenuItem *Copy1;
TMenuItem *Paste1;
TMenuItem *N3;
TMenuItem *SelectAll1;
TMenuItem *Font1;
TMenuItem *ChangeCase1;
TMenuItem *Undo2;
TMenuItem *N4;
TMenuItem *Cut2;
TMenuItem *Copy2;
TMenuItem *Paste2;
TMenuItem *N5;
TMenuItem *SelectAll2;
TMenuItem *N6;
TMenuItem *Font2;
TMenuItem *ChangeCase2;
TMemo *Memo1;
TToolBar *ToolBar1;
TToolButton *ToolButton1;
TToolButton *ToolButton2;
TToolButton *ToolButton3;
TToolButton *ToolButton4;
TToolButton *ToolButton5;
TToolButton *ToolButton6;
TToolButton *ToolButton7;
TImageList *TBIL;
TImageList *TBHIL;
TImageList *TBDIL;
TImageList *Ikonice;
TActionList *Akcije;
TFontDialog *FontDialog1;
TOpenDialog *OpenDialog1;
TSaveDialog *SaveDialog1;
TAction *New;
TAction *Open;
TAction *Save;
TAction *SaveAs;
346
TAction *Exit;
TEditCut *EditCut1;
TEditCopy *EditCopy1;
TEditPaste *EditPaste1;
TEditSelectAll *EditSelectAll1;
TEditUndo *EditUndo1;
TAction *Font;
TToolButton *ToolButton8;
TPanel *Panel1;
TTimer *Timer1;
TAction *Colors;
TColorDialog *ColorDialog1;
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall ExitUpdate(TObject *Sender);
void __fastcall ExitExecute(TObject *Sender);
void __fastcall Memo1Change(TObject *Sender);
void __fastcall NewUpdate(TObject *Sender);
void __fastcall NewExecute(TObject *Sender);
void __fastcall OpenUpdate(TObject *Sender);
void __fastcall OpenExecute(TObject *Sender);
void __fastcall SaveUpdate(TObject *Sender);
void __fastcall SaveExecute(TObject *Sender);
void __fastcall SaveAsUpdate(TObject *Sender);
void __fastcall SaveAsExecute(TObject *Sender);
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
void __fastcall FontUpdate(TObject *Sender);
void __fastcall FontExecute(TObject *Sender);
void __fastcall ColorsUpdate(TObject *Sender);
void __fastcall ColorsExecute(TObject *Sender);
private: // User declarations
AnsiString FileName;
bool Modified;
public:
// User declarations
bool SaveChangess();
bool Savee();
bool SaveAss();
__fastcall TForm1(TComponent* Owner);
};
//--------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;
//--------------------------------------------------------------------------#endif
TeksProcesor.cpp
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
347
#include "Text_o.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
String sh,sm,ss;
Word h,m,sek,msec,dan;
DecodeTime(Time(),h,m,sek,msec);
if(h<10) sh="0"+IntToStr(h);
else sh=IntToStr(h);
if(m<10) sm="0"+IntToStr(m);
else sm=IntToStr(m);
if(sek<10) ss="0"+IntToStr(sek);
else ss=IntToStr(sek);
Panel1->Caption=sh+":"+sm+":"+ss;
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
Timer1Timer(Sender);
Application->Title=this->Caption;
NewExecute(Sender);
}
//------------------------------------------------------------------bool TForm1::SaveChangess()
{
bool Result;
//Prikaz poruke sa tri dugmeta kao na slici:
switch(MessageDlg("Da li zelite snimiti dokument "+
FileName+"?",mtConfirmation,mbYesNoCancel,0))
{
case mrYes: Result=Savee(); //Snimaj.
break;
case mrNo: Result=true; //Prihvatam promene.
break;
case mrCancel: Result=false; //Odustajem od promena.
break;
348
}
return Result;
}
//--------------------------------------------------------------------------bool TForm1::Savee()
{
bool Result;
if(FileName=="") Result=SaveAss(); //Snimi pod novim imenom.
else{
Memo1->Lines->SaveToFile(FileName); //Snimi fajl.
Modified=false;
Result=true; //Snimanje uspesno zavrseno.
}
return Result;
}
//--------------------------------------------------------------------------bool TForm1::SaveAss()
{
bool Result;
SaveDialog1->FileName=FileName; //Pomocu dialoga SaveDialog zadaje se ime fajla.
if(SaveDialog1->Execute())
{
FileName=SaveDialog1->FileName;
Savee();
Caption=Application->Title+" - "+FileName;
Result=true; //Uspesno zavrseno snimanje.
}else Result=false; //Odustalo se od snimanja.
return Result;
}
//--------------------------------------------------------------------------void __fastcall TForm1::ExitUpdate(TObject *Sender)
{
Exit->Enabled=true; //Uvek aktivna akcija.
}
//---------------------------------------------------------------------------
349
350
351