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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.05.2009, 22:50
Расим Расим вне форума
Прохожий
 
Регистрация: 19.01.2009
Сообщения: 4
Репутация: 10
По умолчанию Как нарисовать два круга?

Подскажите как на рисовать 2 круга, с возможностью масштабирования, поворота,перемещения каждогом круга по отдельности, переключаясь меду ними?
Если есть подобные примеры выложите плз...)
Ответить с цитированием
  #2  
Старый 13.05.2009, 23:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Повернуть круг говорите? Может имеется ввиду вращение по Z?
Делается элементарно с помощью методов в Canvas.
Вращение можно эмулировать плавным уменьшением одного из радиусов с последующим увелечением по достижении 0.
Попробуйте сами, что-то написать и сюда выложить проблемный код.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.05.2009, 08:59
Расим Расим вне форума
Прохожий
 
Регистрация: 19.01.2009
Сообщения: 4
Репутация: 10
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, ComCtrls, Unit2, ExtDlgs;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    ScrollBar1: TScrollBar;
    ScrollBar2: TScrollBar;
    procedure ScalingClick(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure ScrollBar2Change(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TFigure = class
    clrFColorPen: TColor;
    intFCaretPos, intFLastPositionX, intFLastPositionY, intFPoseX, intFPoseY,
    intFPositionX, intFPositionY, intFShiftX, intFShiftY: Integer;
    realFScale: Real;
    strFDateTime, strFNumberFigure, strFTrackBarPosition: String;
    procedure Displacement;
    procedure Drawing;

    constructor Create;
  Protected
    pntarFPoints: array [0..12] of TPoint;
  end;

  TFigureTwo = class(TFigure)
    realFScaleNext: Real;
    procedure Drawing;
    constructor Create;
  end;

var
  Form1: TForm1;
  objVFigure: TFigure;
  objVFigureTwo: TFigureTwo;

implementation

{$R *.dfm}

constructor TFigure.Create;
var i:byte;
begin
  clrFColorPen:=Form1.PaintBox1.Canvas.Pen.Color;
  realFScale:=1;
  intFPositionX:=0;
  intFPositionY:=0;
  intFShiftX:=0;
  intFShiftY:=0;
  strFTrackBarPosition:=IntToStr(0);
  strFDateTime:=IntToStr(0);
  intFPoseX:=0;
  intFPoseY:=0;
  intFLastPositionX:=0;
  intFLastPositionY:=0;
  for i:=0 to 12 do pntarFPoints[i]:=Point(0,0);
  strFNumberFigure:=IntToStr(1);
end;

constructor TFigureTwo.Create;
begin
  inherited;
  strFNumberFigure:=IntToStr(2);
  realFScaleNext:=1;
end;

procedure TFigure.Drawing;
begin
  Form1.PaintBox1.Canvas.Pen.Color:=Form1.Color;
  Form1.PaintBox1.Canvas.Polyline(pntarFPoints);
  intFShiftX:=round((Form1.ClientWidth-30)/2-50*realFScale+intFPoseX);
  intFShiftY:=round((Form1.ClientHeight-185)/2-50*realFScale+intFPoseY);
  pntarFPoints[0]:=Point(intFShiftX,round(15*realFScale)+intFShiftY);
  pntarFPoints[1]:=Point(round(15*realFScale)+intFShiftX,intFShiftY);
  pntarFPoints[2]:=Point(round(30*realFScale)+intFShiftX,round(15*realFScale)
  +intFShiftY);
  pntarFPoints[3]:=Point(round(70*realFScale)+intFShiftX,round(15*realFScale)
  +intFShiftY);
  pntarFPoints[4]:=Point(round(85*realFScale)+intFShiftX,intFShiftY);
  pntarFPoints[5]:=Point(round(100*realFScale)+intFShiftX,round(15*realFScale)
  +intFShiftY);
  pntarFPoints[6]:=Point(round(100*realFScale)+intFShiftX,round(85*realFScale)
  +intFShiftY);
  pntarFPoints[7]:=Point(round(85*realFScale)+intFShiftX,round(100*realFScale)
  +intFShiftY);
  pntarFPoints[8]:=Point(round(70*realFScale)+intFShiftX,round(85*realFScale)
  +intFShiftY);
  pntarFPoints[9]:=Point(round(30*realFScale)+intFShiftX,round(85*realFScale)
  +intFShiftY);
  pntarFPoints[10]:=Point(round(15*realFScale)+intFShiftX,round(100*realFScale)
  +intFShiftY);
  pntarFPoints[11]:=Point(intFShiftX,round(85*realFScale)+intFShiftY);
  pntarFPoints[12]:=Point(intFShiftX,round(15*realFScale)+intFShiftY);
  Form1.PaintBox1.Canvas.Pen.Color:=clrFColorPen;
  Form1.PaintBox1.Canvas.Polyline(pntarFPoints);
end;

procedure TFigureTwo.Drawing;
begin
  With Form1.PaintBox1.Canvas do
  begin
  Pen.Color:=Form1.Color;
  MoveTo(intFShiftX-round(25*realFScaleNext),intFShiftY-round(50*realFScaleNext));
  LineTo(intFShiftX+round(90*realFScaleNext),intFShiftY+round(25*realFScaleNext));
  LineTo(intFShiftX+round(35*realFScaleNext),intFShiftY+round(50*realFScaleNext));
  LineTo(intFShiftX-round(50*realFScaleNext),intFShiftY-round(25*realFScaleNext));
  LineTo(intFShiftX-round(35*realFScaleNext),intFShiftY-round(50*realFScaleNext));
  MoveTo(intFShiftX+round(25*realFScaleNext),intFShiftY-round(50*realFScaleNext));
  LineTo(intFShiftX+round(50*realFScaleNext),intFShiftY-round(25*realFScaleNext));
  LineTo(intFShiftX-round(25*realFScaleNext),intFShiftY+round(50*realFScaleNext));
  LineTo(intFShiftX-round(50*realFScaleNext),intFShiftY+round(25*realFScaleNext));
  LineTo(intFShiftX+round(25*realFScaleNext),intFShiftY-round(50*realFScaleNext));
  end;
  realFScaleNext:=realFScale;
  intFShiftX:=round((Form1.ClientWidth-30)/2+intFPoseX);
  intFShiftY:=round((Form1.ClientHeight-185)/2+intFPoseY);
  With Form1.PaintBox1.Canvas do
  begin
  Pen.Color:=clrFColorPen;
  MoveTo(intFShiftX-round(25*realFScale),intFShiftY-round(50*realFScale));
  LineTo(intFShiftX+round(50*realFScale),intFShiftY+round(25*realFScale));
  LineTo(intFShiftX+round(25*realFScale),intFShiftY+round(50*realFScale));
  LineTo(intFShiftX-round(50*realFScale),intFShiftY-round(25*realFScale));
  LineTo(intFShiftX-round(25*realFScale),intFShiftY-round(50*realFScale));
  MoveTo(intFShiftX+round(25*realFScale),intFShiftY-round(50*realFScale));
  LineTo(intFShiftX+round(50*realFScale),intFShiftY-round(25*realFScale));
  LineTo(intFShiftX-round(25*realFScale),intFShiftY+round(50*realFScale));
  LineTo(intFShiftX-round(50*realFScale),intFShiftY+round(25*realFScale));
  LineTo(intFShiftX+round(25*realFScale),intFShiftY-round(50*realFScale));
  end;
end;

procedure TFigure.Displacement;
begin
  intFPoseX:=round(intFPositionX*((Form1.ClientWidth-30-100*realFScale)/60));
  intFPoseY:=round(intFPositionY*((Form1.ClientHeight-185-100*realFScale)/60));
  intFLastPositionX:=intFPositionX;
  intFLastPositionY:=intFPositionY;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  objVFigure:=TFigure.Create;
  objVFigureTwo:=TFigureTwo.Create;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  objVFigure.Drawing;
  objVFigureTwo.Drawing;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  objVFigure.Displacement;
  objVFigureTwo.Displacement;
end;

procedure TForm1.ScalingClick(Sender: TObject);
begin
  if RadioButton1.Checked=true then
    begin

      objVFigure.Displacement;
      objVFigure.Drawing;
      objVFigureTwo.Drawing;
    end
  else
    begin

      objVFigureTwo.Displacement;
      objVFigureTwo.Drawing;
      objVFigure.Drawing;
    end;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  if Form1.RadioButton1.Checked=true then
    begin

      objVFigure.Displacement;
      objVFigure.Drawing;
      objVFigureTwo.Drawing;
    end
  else
    begin

      objVFigureTwo.Displacement;
      objVFigureTwo.Drawing;
      objVFigure.Drawing;
    end;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
  if Form1.RadioButton1.Checked=true then
    begin

      objVFigure.Displacement;
      objVFigure.Drawing;
      objVFigureTwo.Drawing;
    end
  else
    begin

      objVFigureTwo.Displacement;
      objVFigureTwo.Drawing;
      objVFigure.Drawing;
    end;
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  Form1.ScrollBar1.Position:=objVFigure.intFPositionX;
  Form1.ScrollBar2.Position:=objVFigure.intFPositionY;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  Form1.ScrollBar1.Position:=objVFigureTwo.intFPositionX;
  Form1.ScrollBar2.Position:=objVFigureTwo.intFPositionY;
end;



procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
 if Form1.RadioButton1.Checked=true then
    begin
      objVFigure.intFPositionX:=Form1.ScrollBar1.Position;
      objVFigure.Displacement;
      objVFigure.Drawing;
      objVFigureTwo.Drawing;
    end
  else
    begin
      objVFigureTwo.intFPositionX:=Form1.ScrollBar1.Position;
      objVFigureTwo.Displacement;
      objVFigureTwo.Drawing;
      objVFigure.Drawing;
    end;
end;

procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
begin
  if Form1.RadioButton1.Checked=true then
    begin
      objVFigure.intFPositionY:=Form1.ScrollBar2.Position;
      objVFigure.Displacement;
      objVFigure.Drawing;
      objVFigureTwo.Drawing;
    end
  else
    begin
      objVFigureTwo.intFPositionY:=Form1.ScrollBar2.Position;
      objVFigureTwo.Displacement;
      objVFigureTwo.Drawing;
      objVFigure.Drawing;
    end;
end;
  end;
end.
Admin: Не забываем про теги!

Последний раз редактировалось Admin, 14.05.2009 в 10:13.
Ответить с цитированием
  #4  
Старый 14.05.2009, 09:01
Расим Расим вне форума
Прохожий
 
Регистрация: 19.01.2009
Сообщения: 4
Репутация: 10
По умолчанию

здесь две разные фигуры,каких масштабировать,и как сделать чтобы они не выходили за определенные пределы фомы и поворачивать их на определенный градус ...

Последний раз редактировалось Расим, 14.05.2009 в 09:09.
Ответить с цитированием
  #5  
Старый 14.05.2009, 09:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вы еще dfm-файл прикрипите.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 14.05.2009, 14:21
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

TShape (stCircle) - готовый круг
Ответить с цитированием
  #7  
Старый 14.05.2009, 20:37
Расим Расим вне форума
Прохожий
 
Регистрация: 19.01.2009
Сообщения: 4
Репутация: 10
По умолчанию

вот полностью проджект)
Вложения
Тип файла: rar Проджект.rar (17.9 Кбайт, 20 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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