Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2014, 10:41   #1
ElenkaG
Новичок
Джуниор
 
Регистрация: 06.07.2014
Сообщений: 2
Восклицание Работа с PaintBox

Ребят,помогите!!!!! Нигде не могу найти решение это проблемы! Требуется написать программу с использованием PaintBox, суть проги в следующем: Пользователь вводить размеры прямоугольника,круга или многоугольника в строки Edit (н-р: длина,ширина для прямоугольника) и на Канве в PaintBox должно по клику мыши нарисовать. Проблема в следующем: нужно чтоб фигура размещалась по центру независоми от размера,например если размер канвы 300*300,а ращмер фигуры 1000*1000, то как быть,чтоб за пределы не выходила фигура и чтоб масштабировалсь с расположением посередине,может как то можно сделать без использвания паинтбоакса???? Огромнейшее спасибо,всем кто откликнется!!!!!

вот код того что я написала:

Код:
unit UnitP;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    BitBtn1: TBitBtn;
    PaintBox1: TPaintBox;


    procedure BitBtn1Click(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
    procedure FormCreate(Sender: TObject);

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

var
  Form1: TForm1;
  x,y: integer;
  StrA: string;
  StrB: string;
  m, k, mk: real;
  h,b,h1,b1,x1,y1: integer;

implementation

{$R *.dfm}





procedure TForm1.BitBtn1Click(Sender: TObject);
begin
StrA:= Edit1.Text;
StrB:= Edit2.Text;
b:= StrToIntDef(Edit1.Text,0);
h:= StrToIntDef(Edit2.Text,0);
              h1:= 250;
              b1:= 250;
              x1:= abs((b - b1) div 2);
              y1:= abs((h - h1) div 2);
              x:= b + x1 ;   //ввод размеров сечения
              y:= h + y1;
              k:= 1;
              m:= 1;
              mk:= 1;
                           if b > b1 then  // ограничение границ 
                           m:= b1 / (1.3 * b - 0.5 * b1);
                           if h > h1 then
                           k:= h1 / (y+325);
                           if m > k then mk:= k else
                                    mk:= m;


                             if mk <> 1 then
                              begin
                              x:= round(x * mk);
                              y:= round (y * mk);
                              x1:= round(abs((x - b1) div 2)*mk);
                              y1:= round(abs((y - h1) div 2) * mk);
                              end;

              PaintBox1.Canvas.Rectangle(0,0,250,250);
              PaintBox1.Canvas.Brush.Color:= clSilver;// отрисовка сечения
              PaintBox1.Canvas.Rectangle(x1,y1,x,y);
              PaintBox1.Canvas.Brush.Color:= clWhite;


end;



procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Color:= clWhite;
with PaintBox1, Canvas do
     begin
     Pen.Color:= clBlack;
     Rectangle(0,0,250,250); //создание канвы(основного фона)


     end;
end;


end.

Последний раз редактировалось Stilet; 06.07.2014 в 11:04.
ElenkaG вне форума Ответить с цитированием
Старый 06.07.2014, 14:06   #2
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Не вижу проблемы, чистая арехметика.
Вот так, например, центруется окружность:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
x,y,x1,y1: integer;
begin
x1:=strtoint(Edit1.Text);
y1:=strtoint(Edit1.Text);
x:=PaintBox1.Height div 2;
y:=PaintBox1.Width div 2;
PaintBox1.Canvas.Rectangle(0,0, PaintBox1.Height, PaintBox1.Width);
PaintBox1.Canvas.Ellipse(x-x1,y-y1, x+x1, y+y1);
end;
То же самое касается масштабирования, проверяйте вводимые размеры, приводите их к размерам вашего холста
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Старый 07.07.2014, 08:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Foreseen, я бы в вашем примере вместо двух переменных x1 и y1 использовал одну с именем R
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
paintBox Фобия Помощь студентам 1 13.06.2011 02:08
PaintBox Fintroll Windows Forms 1 11.04.2011 01:01
Работа с PaintBox, Media и формами _Санек_ Помощь студентам 0 20.11.2010 22:38
PaintBox _-Re@l-_ Общие вопросы Delphi 11 23.06.2010 12:54
paintbox steck Общие вопросы Delphi 5 28.10.2007 16:15