delphi, canvas, vežba umožavanje krugova

Поставите коментар

clip_image002Kreirati aplikaciju u kojoj se po formi iscrtava krug koji dodiruje sve četiri ivice forme. Preko spinedit kontrole se povećava broj krugova koji se iscrtavaju tako da se svi krugovi vide na formi. Svaki krug je različite boje.

(širina i visina forme moraju biti iste, spinedit min=1, value=1)

 

 

 

 

 

 

 

clip_image006clip_image004

Kod:

var

Form3: TForm3; n:integer;

implementation uses unit1;

{$R *.dfm}

procedure TForm3.FormPaint(Sender: TObject);

var x1,y1,x2,y2,i,a,b:integer;

begin

randomize;

n:=spinedit1.Value;

a:=clientwidth;

b:=round(a/n);

x1:=0;y1:=0;x2:=x1+b;y2:=y1+b;

for i := 1 to n do

begin

canvas.brush.color:=rgb(random(255),random(255),random(255));

canvas.Ellipse(x1,y1,x2,y2);

x1:=x2;x2:=x1+b;

end;

end;

procedure TForm3.SpinEdit1Change(Sender: TObject);

begin

refresh;

end;

end.

delphi, canvas, vežba duplirani krugovi

Поставите коментар

clip_image002Kreirati aplikaciju u kojoj se na formi iscrtava krug proizvoljnog prečnika, prislonjen na donju ivicu forme. Preko jednog spinedit-a se povećava broj krugova, svaki sledeći krug se iscrtava iznad prethodnog, udaljen za određeni razmak. Razmak između krugova se zadaje preko drugog spinedit-a. Svaki krug je druge boje.

 

 

 

clip_image004

Kod:

var

Form3: TForm3;

implementation uses unit1;

{$R *.dfm}

procedure TForm3.FormPaint(Sender: TObject);

var i,n,x1,y1,x2,y2,r:integer; boja:Tcolor;

begin

randomize;

r:=spinedit2.Value;

n:=spinedit1.Value;

x1:=round(clientwidth/2) -100;

y1:=clientheight-100;

x2:=x1+100;

y2:=y1+100;

for i:=1 to n do

begin

// canvas.Brush.Color:=rgb(random(255),random(255),random(255));

boja:= rgb(random(255),random(255),random(255));

canvas.Brush.Color:=boja;

canvas.Pen.Color:=boja;

canvas.Ellipse(x1,y1,x2,y2);

y1:=y1-r;

y2:=y2-r;

end;

end;

procedure TForm3.SpinEdit1Change(Sender: TObject);

begin

refresh;

end;

procedure TForm3.SpinEdit2Change(Sender: TObject);

begin

refresh;

end;

end.

delphi, canvas, vežba Šare

Поставите коментар

zadatak:

kreirati aplikaciju u kojoj se po formi iscrtava pravougaonik, a zatim se po pravougaoniku iscrtavaju izabrane šare (kvadrati ili krugovi). Unose se koordinate gornjeg levog ugla pravougaonika, kao i širina i visina pravougaonika (preko input boksa).

image

pravougaonik širine 400, visine 60, šare krugovi:

image

kod:

var
  Form3: TForm3;  var x1,x2,a,b,y1,y2,n,m:integer;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);

begin
    x1:=strtoint(inputbox(‘gornji levi ugao’,’unesi prvu koordinatu’,“));
    y1:= strtoint(inputbox(‘gornji levi ugao’,’unesi drugu koordinatu’,“));
    a:=   strtoint(inputbox(‘dimenzije pravougaonika’,’unesi širinu pravougaonika’,“));
    b:=   strtoint(inputbox(‘dimenzije pravougaonika’,’unesi visinu pravougaonika’,“));
    x2:=x1+a;
    y2:=y1+b;
    canvas.Rectangle(x1,y1,x2,y2);
    n:=a div 10;

end;

procedure TForm3.RadioGroup1Click(Sender: TObject);
var i,q,w,e,r:integer;
begin
q:=x1;
w:=y1+b div 2-5;
e:=x1+10;
r:=w+10;
case radiogroup1.ItemIndex of
0: begin
refresh; canvas.Rectangle(x1,y1,x2,y2);
for I := 0 to n-1 do  begin
       canvas.Rectangle(q,w,e,r);
       q:=e;  e:=q+10;
end;
end;
1: begin
refresh;    canvas.Rectangle(x1,y1,x2,y2);
for I := 0 to n-1 do  begin
       canvas.ellipse(q,w,e,r);
       q:=e;  e:=q+10;
end;
end;
end;
end;

end.

delphi–canvas, vežba Šrafure

Поставите коментар

Zadatak: Kreirati aplikaciju u kojoj se po formi iscrtavaju horizontalne linije, vertikalne linije ili mreža, u zavisnosti od izbora. Broj linija se određuje preko komponente SpinEdit, minimalan broj je 5, a maksimalan 100. Linije treba da su različite boje, slučajnim izborom.

mreža:

image

horizontalne linije:

image

vertikalne linije:

image

kod:

var
  Form1: TForm1;  stat:string;

implementation

{$R *.dfm}

procedure TForm1.horizontalne1Click(Sender: TObject);
var a,b,i,n:integer;
begin
stat:=’h’;
randomize;
refresh;
n:=spinedit1.Value;
  a:=round(clientheight/n);

  b:=a;
   for I := 0 to n do
       begin
          canvas.Pen.Color:=rgb(random(255),random(255),random(255));

     canvas.MoveTo(0,b);
     canvas.LineTo(clientwidth,b);
     b:=b+a;
end;   end;

procedure TForm1.mreza1Click(Sender: TObject);
var n,i,a,b,x,y:integer;
begin
stat:=’m’;
randomize;
refresh;
n:=spinedit1.Value;
  a:=round(clientheight/n);
   b:=round(clientwidth/n);
  x:=a;
      for I := 0 to n do
       begin
          canvas.Pen.Color:=rgb(random(255),random(255),random(255));

     canvas.MoveTo(0,x);
     canvas.LineTo(clientwidth,x);
    x:=x+a;
end;
y:=b;
      for I := 0 to n do
       begin
          canvas.Pen.Color:=rgb(random(255),random(255),random(255));

     canvas.MoveTo(y,0);
     canvas.LineTo(y,clientheight);
     y:=y+b
end;
end;

 

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
        if stat=’h’ then

horizontalne1.Click;
if stat=’v’ then  vertikalne1.Click;
if stat=’m’ then   mreza1.Click;

end;

 

procedure TForm1.vertikalne1Click(Sender: TObject);
var i,n,a,b:integer;
begin
     stat:=’v’;
randomize;
refresh;
n:=spinedit1.Value;
  a:=round(clientwidth/n);

  b:=a;
   for I := 0 to n do
       begin
          canvas.Pen.Color:=rgb(random(255),random(255),random(255));

     canvas.MoveTo(b,0);
     canvas.LineTo(b,clientheight);
     b:=b+a;
end;

end;

  end.

Timer komponenta

1 коментар

 

Časovnik (Timer) je nevizuelna komponenta pomoću koje može da se meri vreme. Ova komponenta periodično generiše događaj OnTimer (prilikom isteka vremena) kad god istekne zadati period vremena, tako da program može sam nešto da uradi a da korisnik ne čini nikakvu akciju.

Svojstvo Interval (integer) određuje koliko često će se generisati neki događaj OnTimer. Podrazumevana vrednost ovog svojstva je 1000 i predstavlja interval od 1 sekunde. Što je ova vrednost manja, događaji OnTimer će se brže generisati.

Ako se svojstvo enabled postavi na True, časovnik je aktivan, a ako je vrednost ovog svojstva False, časovnik je neaktivan, odnosno zaustavljen.

Da se podsetimo:

Funkcija Random geneiše slučajne cele brojeve između 0 i zadate gornje granice. Npr.

Random(100) generiše slučajan broj u intervalu od 0 do 100

Primer1:

clip_image002Na formi se nalazi Timer i jedan Shape (krug). Želimo da se svake sekunde taj krug pomeri na drugo mesto na formi. Znači, treba da se menja svojstvo Left (udaljenost od leve ivice forme) i svojstvo Top (udaljenost od gornje ivice forme).

Na događaj OnTimer komponente Timer treba da se promene ove vrednosti. Koristićemo slučajne brojeve (funkcija Random), ali ćemo ih ograničiti na širinu (clientwidth) i visinu (clientheight) forme.

To bi moglo da se napiše

procedure TForm1.Timer1Timer(Sender: TObject);

begin

shape1.Left:=random(clientwidth);

shape1.Top:=random(clientheight);

clip_image004end;

U ovom slučaju se može desiti da nam se ne vidi ceo krug, a to možemo sprečiti ako smanjimo gornje granice intervala za visinu, odnosno širinu kruga. Ako napišemo

procedure TForm1.Timer1Timer(Sender: TObject);

begin

shape1.Left:=random(clientwidth-shape1.Width);

shape1.Top:=random(clientheight-shape1.Height);

end;

neće se desiti da krug izađe iz forme.

Ako želimo da ubrzamo prikazivanje kruga, smanjimo interval.

Vežba sa oblicima (Shape komponenta)

1 коментар

 

Izvršnu verziju (exe fajl) možete da preuzmete sa sledećeg linka VezbaShape1

clip_image002Na formi se nalaze sledeće komponente:

Shape, oblik može biti krug ili kvadrat, bira se iz menija Oblik;

ColorDialog (cd) pomoću kojeg se bira boja. Color dijalog se otvara klikom na labelu u kojoj je prikazana boja popune (prvi kvadratić) ili klikom na labelu u kojoj je prikazana boja linije (drugi kvadratić);

SpinEdit, komponenta pomoću koje se bira debljina linije. Debljina linije se može zadati i unosom broja u edit polje ispod;

Dve komponente TrackBar, jedna nam služi da menjamo položaj Shape-a, a druga nam služi da menjamo veličinu oblika. Kod svakog TrackBar-a se nalazi i labela u kojoj se prikazuje trenutna pozicija na traci.

Kod prvog TrackBar-a je početna pozicija 0, min=-5, max=5. Kod drugog TrackBar-a početna pozicija je 1, min=1, max=10

Kod menjanja veličine oblika menjamo svojstvo Width i Height, odnosno visinu i širinu oblika. Sa trakom smo ga povezali tako što trenutnu poziciju na traci množimo sa nekim brojem (u primeru sa brojem 5, što je veći broj, oblik će se više smanjiti/povećati kako vučemo jezičak na traci) i tu vrednost dodajemo originalnoj širini i visini oblika. U primeru su uzete promenljive w (originalna, početna širina oblika) i h (originalna, početna visina oblika)

Kod menjanja položaja oblika (samo po horizontalnoj osi) menjamo svojstvo Left koje predstavlja udaljenost oblika od leve ivice forme. Što je svojstvo Left manje, oblik je bliži ivici, i obrnuto. Takođe poziciju na traci množimo sa nekim brojem (i ovde je u primeru u pitanju broj 5) i tu vrednost dodajemo početnoj vrednosti svojstva Left. U ovom primeru ta vrednost je predstavljena promenljivom a. Tako dobijamo da ako vučemo u levo, na traci je negativna pozicija, pa se svojstvo Left umanjuje, odnosno oblik se približava levoj ivici forme.

Kod:

var

Form1: TForm1; a,w,h:integer;

implementation

{$R *.dfm}

procedure TForm1.Edit2Change(Sender: TObject);

begin

if edit2.Text=“ then begin

edit2.Text:=’1′;

edit2.SelectAll;

end;

shape1.Pen.Width:=strtoint(edit2.Text);

spinedit1.Text:=edit2.Text;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

a:=shape1.Left;

w:=shape1.Width;

h:=shape1.Height;

end;

procedure TForm1.krug1Click(Sender: TObject);

begin

shape1.Shape:=stcircle;

shape1.Visible:=true;

end;

procedure TForm1.kvadrat1Click(Sender: TObject);

begin

shape1.Shape:=stsquare;

shape1.Visible:=true;

end;

procedure TForm1.Label2Click(Sender: TObject);

begin

if cd.Execute then begin

shape1.Brush.Color:=cd.Color;

label2.Color:=cd.Color;

end;

end;

procedure TForm1.Label4Click(Sender: TObject);

begin

if cd.Execute then begin

shape1.Pen.Color:=cd.Color;

label4.Color:=cd.Color;

end; end;

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

shape1.Pen.Width:=spinedit1.Value;

edit2.Text:=inttostr(spinedit1.Value);

end;

procedure TForm1.TrackBar1Change(Sender: TObject);

begin

label7.Caption:=inttostr(trackbar1.Position);

shape1.Left:=a+5*trackbar1.Position;

end;

procedure TForm1.TrackBar2Change(Sender: TObject);

begin

label5.Caption:=inttostr(trackbar2.Position);

shape1.Width:=w+trackbar2.Position*5;

shape1.Height:=h+trackbar2.Position*5;

end;

end.

Rad sa slikama

1 коментар

 

 

Urađena vežba se može skinuti sa sledećeg linka

clip_image002Na formi se nalaze dve Image komponente. U jednoj je postavljena slika u toku dizajna (properties, pictures). U drugu komponentu se učitavaju slike u toku izvršavanja aplikacije (LoadFromFile).

U memo komponentu se učitavaju dva tekstualna fajla, ’ucitavanje.txt’ i ’svojstva.txt’, u kojima je opisan način učitavanja slika i neka bitna svojstva Image komponente.

P.S. OpenDialog je postavljen na formu, ali se ne koristi.

Kod:

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.bik1Click(Sender: TObject);

begin

image2.Picture.LoadFromFile(‘maske\bik.jpg’);

label2.Caption:=’Bik’;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

memo1.Visible:=false;

button1.Visible:=false;

end;

procedure TForm1.Imagesvojstva1Click(Sender: TObject);

begin

memo1.Visible:= true;

button1.Visible:=true;

memo1.Lines.LoadFromFile(‘svojstva.txt’);

end;

procedure TForm1.ljubicica1Click(Sender: TObject);

begin

image2.Picture.LoadFromFile(‘maske\ljubicica.jpg’);

label2.Caption:=’ljubicica’;

end;

procedure TForm1.meda1Click(Sender: TObject);

begin

image2.Picture.LoadFromFile(‘maske\meda.jpg’);

label2.Caption:=’Meda’;

end;

procedure TForm1.ucitavanjeslike1Click(Sender: TObject);

begin

memo1.Visible:=true;

button1.Visible:=true;

memo1.Lines.LoadFromFile(‘ucitavanje.txt’);

end;

end.

Older Entries