Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2016.01.17;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.001 c
15-1432146729
D.N. Polezhaev
2015-05-20 21:32
2016.01.17
Странное поведение Internet Explorer


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


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


1-1308744650
Сергей
2011-06-22 16:10
2016.01.17
QuickReport


2-1404566995
Sakipiel
2014-07-05 17:29
2016.01.17
Caption и отображение в панели задач в Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский