Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание одного обработчика для всех BitBtn


DanilTraum ©   (2013-05-28 18:24:00) 

Всем доброго времени суток!
Есть программа, в которой при нажатии на определенную кнопку происходит построение графиков соответственно...
Текст программы:


procedure TForm1.btn1Click(Sender: TObject);

begin
xc:=img1.Width div 2;
yc:= img1.Height div 2;
w:=xc*2;
h:=yc*2;
mx:=(w-80)/2;
my:=(h-80)/pi;
with img1.Canvas do
begin
 Brush.Color:=clWhite;
 Pen.Color:=clBlack;
 MoveTo(0,yc);
 LineTo(w,yc);
 MoveTo(xc,0);
 LineTo(xc,h);
 textout(w-20,yc-20,'X');
 textout(xc+10,5,'Y');
 textout(xc+10,yc+10,'0');
 for i:=1 to 10 do
  begin
   MoveTo(xc+round(i*mx/5),yc-3);
   LineTo(xc+round(i*mx/5),yc+3);
   MoveTo(xc-round(i*mx/5),yc-3);
   LineTo(xc-round(i*mx/5),yc+3);
   textout(xc+round(i*mx/5),yc+5,FloattostrF(i/5,ffFixed,4,1));
   textout(xc-round(i*mx/5),yc+5,FloattostrF(-i/5,ffFixed,4,1));
  end;
MoveTo(xc+3,yc-round(pi*my/4));
LineTo(xc-3,yc-round(pi*my/4));
MoveTo(xc+3,yc+round(pi*my/4));
LineTo(xc-3,yc+round(pi*my/4));
textout(xc-30,yc-round(pi*my/4),'pi/2');
textout(xc-30,yc+round(pi*my/4),'-pi/2');
MoveTo(xc+3,yc-round(pi*my/2));
LineTo(xc-3,yc-round(pi*my/2));
MoveTo(xc+3,yc+round(pi*my/2));
LineTo(xc-3,yc+round(pi*my/2));
textout(xc-30,yc-round(pi*my/2),'pi');
textout(xc-30,yc+round(pi*my/2),'-pi');
x:=-1;
while x<=1 do
 begin
  y:=arcsin(x);
  pixels[xc+round(x*mx),yc-round(y*my/2)]:=clBlack;
  x:=x+0.001;
 end;
end;
end;

procedure TForm1.btn2Click(Sender: TObject);

begin
 xc:=img1.Width div 2;
 yc:= img1.Height div 2;
 w:=xc*2;
 h:=yc*2;
 mx:=(w-80)/2;
 my:=(h-80)/pi;
with img1.Canvas do
begin
 Brush.Color:=clWhite;
 Pen.Color:=clBlack;
 MoveTo(0,yc);
 LineTo(w,yc);
 MoveTo(xc,0);
 LineTo(xc,h);
 textout(w-20,yc-20,'X');
 textout(xc+10,5,'Y');
 textout(xc+10,yc+10,'0');
 for i:=1 to 5 do
  begin
   MoveTo(xc+round(i*mx/5),yc-3);
   LineTo(xc+round(i*mx/5),yc+3);
   MoveTo(xc-round(i*mx/5),yc-3);
   LineTo(xc-round(i*mx/5),yc+3);
   textout(xc+round(i*mx/5),yc+5,FloattostrF(i/5,ffFixed,4,1));
   textout(xc-round(i*mx/5),yc+5,FloattostrF(-i/5,ffFixed,4,1));
  end;
MoveTo(xc+3,yc-round(pi*my/4));
LineTo(xc-3,yc-round(pi*my/4));
MoveTo(xc+3,yc+round(pi*my/4));
LineTo(xc-3,yc+round(pi*my/4));
textout(xc-30,yc-round(pi*my/4),'pi/2');
textout(xc-30,yc+round(pi*my/4),'-pi/2');
MoveTo(xc+3,yc-round(pi*my/2));
LineTo(xc-3,yc-round(pi*my/2));
MoveTo(xc+3,yc+round(pi*my/2));
LineTo(xc-3,yc+round(pi*my/2));
textout(xc-30,yc-round(pi*my/2),'pi');
textout(xc-30,yc+round(pi*my/2),'-pi');
x:=-1;
while x<=1 do
 begin
  y:=arccos(x);
  pixels[xc+round(x*mx),yc-round(y*my/2)]:=clBlack;
  x:=x+0.0001;
 end;
end;
end;


end.

Как написать один обработчик событий для кнопок Btn1-8?
Понятно, что их эти кнопки нужно выделить, в инспекторе объектов нажать на ОнКлик и там через сендер делать. Только что ,куда и как писать...незнаю, знаю, что после построения осей. А в остальном...очень жду помощи.
Заранее спасибо!


Kilkennycat   (2013-05-30 22:27:00) [1]

нихрена не решена, во-первых, сказали же, что таг использовать надо, удобнее это, а во-вторых, какой смысл было делать один обработчик для двух кнопок, если в нем идет дубликат кода?!


DanilTraum   (2013-05-29 07:11:00) [2]

Проблема решена, спасибо


DanilTraum   (2013-05-29 05:03:00) [3]

procedure TForm1.btn1Click(Sender: TObject);

begin
xc:=img1.Width div 2;
yc:= img1.Height div 2;
w:=xc*2;
h:=yc*2;
mx:=(w-80)/2;
my:=(h-80)/pi;
with img1.Canvas do
begin
 Brush.Color:=clWhite;
 Pen.Color:=clBlack;
 MoveTo(0,yc);
 LineTo(w,yc);
 MoveTo(xc,0);
 LineTo(xc,h);
 textout(w-20,yc-20,'X');
 textout(xc+10,5,'Y');
 textout(xc+10,yc+10,'0');
 for i:=1 to 10 do
 if (Sender as TBitBtn).Name = 'btn1' then
  begin
   MoveTo(xc+round(i*mx/5),yc-3);
   LineTo(xc+round(i*mx/5),yc+3);
   MoveTo(xc-round(i*mx/5),yc-3);
   LineTo(xc-round(i*mx/5),yc+3);
   textout(xc+round(i*mx/5),yc+5,FloattostrF(i/5,ffFixed,4,1));
   textout(xc-round(i*mx/5),yc+5,FloattostrF(-i/5,ffFixed,4,1));
  end;
MoveTo(xc+3,yc-round(pi*my/4));
LineTo(xc-3,yc-round(pi*my/4));
MoveTo(xc+3,yc+round(pi*my/4));
LineTo(xc-3,yc+round(pi*my/4));
textout(xc-30,yc-round(pi*my/4),'pi/2');
textout(xc-30,yc+round(pi*my/4),'-pi/2');
MoveTo(xc+3,yc-round(pi*my/2));
LineTo(xc-3,yc-round(pi*my/2));
MoveTo(xc+3,yc+round(pi*my/2));
LineTo(xc-3,yc+round(pi*my/2));
textout(xc-30,yc-round(pi*my/2),'pi');
textout(xc-30,yc+round(pi*my/2),'-pi');
x:=-1;
while x<=1 do
 begin
  y:=arcsin(x);
  pixels[xc+round(x*mx),yc-round(y*my/2)]:=clBlack;
  x:=x+0.001;
  end;
  if (Sender as TBitBtn).Name = 'btn2' then
   begin
   MoveTo(xc+round(i*mx/5),yc-3);
   LineTo(xc+round(i*mx/5),yc+3);
   MoveTo(xc-round(i*mx/5),yc-3);
   LineTo(xc-round(i*mx/5),yc+3);
   textout(xc+round(i*mx/5),yc+5,FloattostrF(i/5,ffFixed,4,1));
   textout(xc-round(i*mx/5),yc+5,FloattostrF(-i/5,ffFixed,4,1));
  end;
MoveTo(xc+3,yc-round(pi*my/4));
LineTo(xc-3,yc-round(pi*my/4));
MoveTo(xc+3,yc+round(pi*my/4));
LineTo(xc-3,yc+round(pi*my/4));
textout(xc-30,yc-round(pi*my/4),'pi/2');
textout(xc-30,yc+round(pi*my/4),'-pi/2');
MoveTo(xc+3,yc-round(pi*my/2));
LineTo(xc-3,yc-round(pi*my/2));
MoveTo(xc+3,yc+round(pi*my/2));
LineTo(xc-3,yc+round(pi*my/2));
textout(xc-30,yc-round(pi*my/2),'pi');
textout(xc-30,yc+round(pi*my/2),'-pi');
x:=-1;
while x<=1 do
 begin
  y:=arccos(x);
  pixels[xc+round(x*mx),yc-round(y*my/2)]:=clBlack;
  x:=x+0.0001;
 end;
end;
end;

теперь при нажатии одной из кнопки рисуются оба графика


Jeer   (2013-05-28 23:15:00) [4]

>А можно по подробнее, куда что вписать?

В зачетную книжку - неуд.


DanilTraum   (2013-05-28 19:55:00) [5]

А можно по подробнее, куда что вписать?


RWolf   (2013-05-28 19:00:00) [6]

Присвоить в инспекторе для btn1 один tag, для btn2 другой и т.д.
В обработчике:

case (Sender as TComponent).tag of
0: y:=arcsin(x);
1: y:=arccos(x);
...
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо