![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |
|
#7
|
|||
|
|||
|
Так вообще не рисует
|
|
#8
|
|||
|
|||
|
а что мешает сделать процедуру DrawTo(ACanvas : TCanvas) и вызывать ее?
|