![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Привет!
У меня на одной форме 2 Image, с помощью компонента RadioGroup устанавливаю на каком из них рисовать.Рисование фигуры выполняется при нажатии на кнопку. Когда устанавливаю,что б рисовалось на первом имейдже рисует на втором, а первый просто красит цветом. Почему? Не могу понять все написано вроде так как надо. Подскажите в чем может быть причина. |
#2
|
|||
|
|||
![]() В RadioGroup нумерация переключателей идет с 0, а не с 1
|
#3
|
|||
|
|||
![]() Так и есть
|
#4
|
||||
|
||||
![]() Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; Button1: TButton; Image1: TImage; Image2: TImage; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure MyPaint(Sender: TImage); end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.MyPaint(Sender: TImage); begin Sender.Canvas.Brush.Color:=clYellow; Sender.Canvas.FillRect(Sender.ClientRect); Sender.Canvas.Pen.Color:=clRed; Sender.Canvas.MoveTo(0, 0); Sender.Canvas.LineTo(Sender.ClientRect.Right, Sender.ClientRect.Bottom); end; procedure TForm1.Button1Click(Sender: TObject); begin if RadioGroup1.ItemIndex=0 then MyPaint(Image1) else MyPaint(Image2); end; end. Пишу программы за еду. __________________ |
#5
|
|||
|
|||
![]() Спасибо.
Но вот в чем задача, у меня создан свой класс TAngle, в нем и описана процедура Draw, а в основном юните вызывается. Код:
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TAngel=class private Value:integer; Xpos,Ypos:integer; Can:TCanvas; public constructor create(X,Y:integer;NewCanvas:TCanvas); procedure SetValue (NewValue:integer); function GetValue:integer; procedure Draw; end; var Color:TColor; implementation procedure TAngel.SetValue (NewValue:integer); begin Value:=NewValue mod 360; end; constructor TAngel.Create(X,Y:integer;NewCanvas:TCanvas); begin inherited Create; Xpos:=X; Ypos:=Y; Value:=45; Can:=NewCanvas; end; procedure TAngel.Draw; begin Can.Brush.Color:=color; color:=clred; Can.Pie(XPos, YPos, XPos+150, YPos+150,XPos+75+round(75*cos(Value*pi/180)),YPos+75+round(75*sin(Value*pi/180)),XPos+150, YPos+75) ; end; function TAngel.GetValue:integer; begin result:=Value; end; end. А в основном: Код:
procedure TForm1.FormCreate(Sender: TObject); begin h:=TAngel.Create (10,10,Image1.Canvas) ; h1:=TAngel.create(10,10,Image2.Canvas); end; procedure TForm1.SetButtonClick(Sender: TObject); var cod,k:integer; begin Image1.Canvas.Brush.Color :=clWhite; if RadioGroup1.ItemIndex = 0 then begin Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height); val (Edit1.Text,k,cod); if cod<>0 then Showmessage ('Ошибка') else begin h.SetValue(k); h.Draw; h.GetValue; {Edit1.Text:=''; Edit1.SetFocus;} end end else begin Image2.Canvas.Brush.Color :=clWhite; Image2.Canvas.Rectangle(0,0,Image2.Width,Image2.Height); val (Edit1.Text,k,cod); if cod<>0 then Showmessage ('Ошибка') else begin h1.SetValue(k); h1.Draw; h1.GetValue; end; end; end; |
#6
|
|||
|
|||
![]() а попробуй в классе TAngel немного именить так:
Код:
constructor TAngel.Create(X,Y:integer;NewCanvas:TCanvas); begin inherited Create; Xpos:=X; Ypos:=Y; Value:=45; Can:= TCanvas.Create; Can.Handle:=NewCanvas.Handle; end; ... destructor TAngel.Destroy; begin Can.Free; inherited Destroy; end; APPLICATION.TERMINATOR |
#7
|
|||
|
|||
![]() Так вообще не рисует
|
#8
|
|||
|
|||
![]() а что мешает сделать процедуру DrawTo(ACanvas : TCanvas) и вызывать ее?
|