Цртанје мишем по форми – DELPHI

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

Ово је једноставан пример како се може реализовати цртање по форми користећи миш. Притиском на леви тастер миша и повлачењем по форми, миш оставља траг.

КОД

var
Form1: TForm1;   pozX,pozY:integer;
implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pozX:=x;
pozY:=y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
canvas.Pen.Width:=2;
if shift=[ssleft] then
begin
canvas.MoveTo(pozx,pozy);
canvas.LineTo(x,y);
pozx:=x;
pozy:=y;

end;
end;
end.

ове глобалне променљиве представљају координате курсора.

.

када се притисне леви тастер миша тачке pozX и pozY добијају вредности тренутне позиције миша у тренутку када смо притиснули леви тастер миша (почетна тачка од које се црта линија)

.

.

.

– провера да ли је притиснут леви тастер миша
– позиционирање пера на координате   pozX и pozY
– цртање линије до тренутне позиције курсора (x,y)
– pozX и pozY сада добијају нову вредност, чиме се постиже да се исцртава непрекидна линија која прати координате миша докле год је притиснут леви тастер

Задаци из графике – delphi – цртање

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

5. Креирати апликацију у delphi-ју у којој се приказајују изабрани облици, у изабраним бојама. Боја линије и боја попуне се врше путем колор дијагога.

 image

При избору ставке концентрични кругови, у инпутбокс унети колико кругова се црта. За унету вредност 8 добија се следећи резултат:

image

При избору ставке квадрати у инпутбокс се уноси број квадрата, а у други инпут бокс размак између квадрата. За 5 квадрата са размаком 20, боја попуне роза, боја линије љубичаста треба да се добије следеће:

image

При избору ставке степенице у инпутбокс се уноси број степеница, у други инпутбокс ширина степеница, а у трећи висина степеница . За 5 степеница, ширине 50 и са висином 20, боја попуне роза, боја линије љубичаста треба да се добије следеће:

image

При избору ставке бриши се брише приказано.

Решење:

implementation

{$R *.dfm}

procedure TForm1.Label1Click(Sender: TObject);
begin
if colordialog1.Execute then
begin
     canvas.Brush.Color:=colordialog1.Color;
label1.Color:=colordialog1.Color;
     end;
end;

procedure TForm1.Label3Click(Sender: TObject);
begin
if colordialog1.Execute then
begin
canvas.Pen.Color:=colordialog1.Color;
label3.Color:=colordialog1.Color;
end;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
var n,x1,x2,y1,y2,i,k,a,b:integer;
begin
refresh;
case radiogroup1.ItemIndex of
0: begin
      n:=strtoint(inputbox(‘unos’,’unesi koliko krugova ‘,“));
      for I := 0 to n-1 do

      Canvas.Ellipse(100+10*i,150+10*i,250-10*i,300-10*i);
      end;
1: begin
       n:=strtoint(inputbox(‘unos’,’unesi broj kvadrata’,“));
      k:=strtoint(inputbox(‘unos’,’unesi razmak izmedju kvadrata, manje od 20′,“));
      for I := 0 to n-1 do
canvas.Rectangle(100+k*i,150+k*i,250-k*i,300-k*i);
    end;
2:begin
x1:=100;
y1:=300;
      n:=strtoint(inputbox(‘unos’,’unesi broj stepenica’,“));
      a:=strtoint(inputbox(‘unos’,’unesi sirinu stepenice, manje od 50′,“));
      b:=strtoint(inputbox(‘unos’,’unesi visinu stepenice, manje od 20′,“));
         y2:=y1+b;
      for I := 0 to n – 1 do
begin
      x2:=x1+a;

      canvas.Rectangle(x1,y1,x2,y2); x1:=x2-1; y1:=y1-b;

end;
    end;

end;
end;

end.

Задаци из графике 1 – delphi – погађање лоптице

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

Креирати апликацију у delphi-ју у којој се  на сваки секунд појављује лоптица, сваки пут друге величине (задати најмању и највећу могућу лоптицу) и друге боје. Кликом на лоптицу се добија један бод. Треба да се прикаже и број покушаја и број погодака, као и време играња (при стартовању је 0:0:0). На одређен број погодака (у примеру је за пет) се и убрзава приказивање лоптице. 

image image

Решење:

var
  Form1: TForm1;  a,b,br,uk,m:integer;  x1,y1,dx:integer;  sat,min,sek:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
a:=clientwidth;
b:=clientheight;
br:=0;
uk:=0;
m:=1;
sat:=0;
min:=0;
sek:=0;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

begin
   uk:=uk+1;
if(X<(x1+dx))and(X>x1)and(y<(y1+dx))and(y>y1)then br:=br+1;
label1.Caption:=inttostr(br);
label4.Caption:=inttostr(uk);
if br>5*m then
      begin
timer1.Interval:=round(timer1.Interval*0.75);   m:=m+1;
      end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin
dx:=random(80)+30;
x1:=random(a-dx)+1;
y1:=random(b-dx)+1;
  canvas.Brush.Color:=rgb(random(255),random(255),random(255));
canvas.Ellipse(x1,y1,x1+dx,y1+dx);

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
repaint;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin
sek:=sek+1;
if sek>59 then
begin min:=min+1;sek:=0; if min>59 then begin min:=0;sat:=sat+1;end;end;

label5.Caption:=inttostr(sat)+’:’+inttostr(min)+’:’+inttostr(sek);
end;

end.

Задаци из графике 1 – delphi – одбијање

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

Креирати апликацију у delphi-ју у којој се по форми креће лоптица, када наиђе на ивицу прозора одбија се и наставља да се креће у супротном правцу. Може се убацити и нека вредност помоћу које се регулише брзина кретања, нпр. ако пада доле да се убрза и сл.

image

 

 

лоптица је ударила у горњу ивицу прозора и почела да пада доле

 

 

 

Решење:

У овом примеру је за лоптицу коришћена компонента Shape димензија 50×50. Лоптица се креће хоризонтално и вертикално, горе или доле, лево или десно. Ако се креће на доле или на десну страну, повећава се вредност својста Left, односно Top, за неки одређени корак (у датом решењу је 10). Ако се лоптица креће горе или у лево, та својства се смањују за исти корак. То се може постићи променом знака кретања, позитивно за десно и доле, негативно за лево и горе.

var
  Form1: TForm1;  vert,hor,gr:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
vert:=1;
hor:=1;

gr:=5;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

  if (Shape1.Left>clientwidth-50) and (hor=1) then  begin
  hor:=-hor;
   end;
if (shape1.Left<0) and (hor=-1) then  begin
  hor:=-hor;
  end;
  if (shape1.Top<0) and (vert=-1) then  begin
    vert:=-vert;
       end;
    if (shape1.Top>clientheight-50) and (vert=1) then  begin
     vert:=-vert;
     end;
shape1.Left:=shape1.Left+10*hor;
shape1.Top:=shape1.Top+10*vert+gr;

  end;

end.

Задаци из графике – delphi – случајно појављивање

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

Креирати апликацију у delphi-ју у којој се по форми исцртавају кругови или елипсе, у зависности од избора из менија. Брзина приказивања на форми се регулише преко компоненте spinedit, што је већа вредност, брже се приказују. У насловној линија прозора треба да се прикаже број приказаних облика. Кликом на форму се зауставља/покреће приказивање облика. Боја сваког приказаног облика је увек различита (случајни избор) – информатичари.

image image

               елипсе                                                          кругови

Решење:

За овај задатак нам је потребна компонента Timer. То је невизуелна компонента која периодично генерише догађај onTimer (приликом истека времена) кад год истекне задати период времена. То омогућује да програм у тим тренуцима нешто уради, а да корисник не предузима никакву акцију.

Својство Interval одређује колико често ће се генерисати догађај onTimer. Подразумевана вредност 1000 означава интервал од једне секудне.

Код за горе урађени пример, наравно може и на друге начине:

var
Form1: TForm1; br,ck:integer; ind:char;

implementation

{$R *.dfm}

procedure TForm1.elipse1Click(Sender: TObject);
begin
br:=0;
ck:=1;
ind:=’e’;
repaint;

end;

procedure TForm1.elipse2Click(Sender: TObject);
begin
ck:=1;
ind:=’k’;
br:=0;
repaint;

end;

procedure TForm1.FormClick(Sender: TObject);
begin
ck:=ck+1;
if ck mod 2=0 then
timer1.Enabled:=false
else
begin
timer1.Enabled:=true;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=false;
br:=0;
ck:=1;
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
timer1.Interval:=round(1000/(spinedit1.Value +1) );
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var x1,x2,y1,y2,vis,sir:integer;
begin
if ind=’e’ then
begin
timer1.Enabled:=true;
randomize;

x1:=random(clientWidth);
y1:=random(clientHeight);
vis:=random(100)+30+y1;
sir:=random(100)+30+x1;
canvas.Brush.Color:=rgb(random(255),random(255),random(255));
canvas.Ellipse(x1,y1,sir,vis);
br:=br+1;
form1.Caption:=inttostr(br);
end
else
if ind=’k’ then
begin
timer1.Enabled:=true;
randomize;

x1:=random(clientWidth);
y1:=random(clientHeight);

  canvas.Brush.Color:=rgb(random(255),random(255),random(255));
canvas.Ellipse(x1-15,y1-15,x1+15,y1+15);
br:=br+1;
form1.Caption:=inttostr(br);
end;

end;

end.

Задаци из графике – delphi – смајли велики

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

1. Креирати апликацију у delphi-ју у којој се преко целе форме исцртава смајли.  Смајли треба да се прилагоди величини прозора, тако да се при развлачењу прозора развлачи и смајли (за инфо).

image

ово је по покретању апликације 

 image

ово је развучени смајли

Решење:

Код оваквих задатака је битно да задате тачке буду у зависности од ширине и висине платна по којем се исцртава. Код за горе урађени пример:

procedure TForm1.FormPaint(Sender: TObject);
begin
with canvas do
begin
  ellipse(0,0,clientwidth, clientheight);
    ellipse(round(clientwidth/4),round(clientheight/4),(round(clientwidth/4)+round(clientwidth/20)),(round(clientheight/4)+round(clientwidth/20)) );
    ellipse(round(clientwidth/4)*3,round(clientheight/4),round(clientwidth/4)*3+round(clientwidth/20),(round(clientheight/4)+round(clientwidth/20)) );
        arc(round(clientwidth/4),round(2*clientheight/4),
    round(clientwidth/4)*3, round(3*clientheight/4),
    round(clientwidth/4),round(2.6*clientheight/4) ,
    round(clientwidth/4)*3, round(2.6*clientheight/4));
end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
repaint;
end;

end.