Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.10.2010, 18:00
LexaL LexaL вне форума
Прохожий
 
Регистрация: 24.10.2010
Сообщения: 25
Репутация: 10
По умолчанию Работа с двумя компонентами Image одновременно

Привет!
У меня на одной форме 2 Image, с помощью компонента RadioGroup устанавливаю на каком из них рисовать.Рисование фигуры выполняется при нажатии на кнопку. Когда устанавливаю,что б рисовалось на первом имейдже рисует на втором, а первый просто красит цветом.
Почему? Не могу понять все написано вроде так как надо. Подскажите в чем может быть причина.
Ответить с цитированием
  #2  
Старый 24.10.2010, 18:11
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

В RadioGroup нумерация переключателей идет с 0, а не с 1
Ответить с цитированием
  #3  
Старый 24.10.2010, 22:33
LexaL LexaL вне форума
Прохожий
 
Регистрация: 24.10.2010
Сообщения: 25
Репутация: 10
По умолчанию

Так и есть
Ответить с цитированием
  #4  
Старый 25.10.2010, 08:57
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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.
http://data.cod.ru/72486
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 25.10.2010, 12:58
LexaL LexaL вне форума
Прохожий
 
Регистрация: 24.10.2010
Сообщения: 25
Репутация: 10
По умолчанию

Спасибо.
Но вот в чем задача, у меня создан свой класс 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  
Старый 25.10.2010, 20:07
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

а попробуй в классе 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  
Старый 25.10.2010, 20:17
LexaL LexaL вне форума
Прохожий
 
Регистрация: 24.10.2010
Сообщения: 25
Репутация: 10
По умолчанию

Так вообще не рисует
Ответить с цитированием
  #8  
Старый 25.10.2010, 20:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а что мешает сделать процедуру DrawTo(ACanvas : TCanvas) и вызывать ее?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025