Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.01.17;
Скачать: CL | DM;

Вниз

PaintBox   Найти похожие ветки 

 
ElenkaG   (2014-07-06 12:35) [0]

Ребят,помогите!!!!! Нигде не могу найти решение это проблемы! Требуется написать программу с использованием 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.


 
KilkennyCat ©   (2014-07-07 11:29) [1]


> Требуется написать программу с использованием PaintBox


> может как то можно сделать без использвания паинтбоакса?

определись.

вопросы геометрии вообще к программированию не относятся.
все единицы измерения - условны. поэтому просто ограничь введение пользователем максимальную цифру размерами паинтбокса, и надейся, что пользователь будет гораздо умнее и умножит их на коэффициент.



Страницы: 1 вся ветка

Текущий архив: 2016.01.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
2-1404704180
Sw
2014-07-07 07:36
2016.01.17
Cоздать процедуру в базе interbase через delphi


2-1404635754
ElenkaG
2014-07-06 12:35
2016.01.17
PaintBox


15-1431984602
Юрий
2015-05-19 00:30
2016.01.17
С днем рождения ! 19 мая 2015 вторник


15-1428174592
Kerk
2015-04-04 22:09
2016.01.17
ExitCode


15-1431865792
Pavelnk
2015-05-17 15:29
2016.01.17
Интерактивная карта ветров