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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 19:16   #1
bercut
 
Регистрация: 12.06.2009
Сообщений: 4
По умолчанию Нарисовать окружность и прямоугольник Delpi

Надо написать программу на Delphi:
реализовать рисование так чтобы по нажатию левой кнопки мыши (щелкая и удерживая ее при перемещении мыши по горизонтали и вертикали) рисовалась окружность нужного размера и цвета, аналогично только удерживая Shift прямоугольник (через Canvas).

Я пробовала, но что-то у меня какая-то ерунда получается. Надо подредактировать:
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

if Button=mbLeft then
begin
Draw:=true;
x1:=x;
y1:=x;
end;

if ssShift in Shift then
x2:=x;
y2:=y;
Image1.Canvas.Pen.Mode:=pmXor;

end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If ssShift in Shift then  begin
//Image1.Canvas.Pen.Mode:=pmCopy;
Image1.Canvas.Rectangle(x1,y1,x2,y2);
Image1.Canvas.Rectangle(x1,y1,x,y);
     x2:=x;
     y2:=y;
end;

if Button:=mbLeft then
begin
Draw=false;
Image1.Canvas.Ellipse(x1,y1,x2,x2);
Image1.Canvas.Ellipse(x1,y1,x,x);
     x2:=x;
     y2:=x;
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

begin

Image1.Canvas.Pen.Mode:=pmCopy;
Image1.Canvas.Pen.Color:=ColorBox1.Selected;
If Button=mbLeft then
Draw:=false;
Image1.Canvas.Ellipse(x1,y1,x2,y2);
Image1.Canvas.Ellipse(x1,y1,x,x);
 If ssShift in Shift then
Image1.Canvas.Rectangle(x1,y1,x2,y2);
Image1.Canvas.Rectangle(x1,y1,x,y);
 end;

Последний раз редактировалось Stilet; 23.10.2010 в 20:40.
bercut вне форума Ответить с цитированием
Старый 23.10.2010, 20:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Действительно это Wrong Turn
Вот предлагаю так:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var    ax,ay:integer;o:boolean;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
var cx,cy:integer;r:integer;
begin
 cx:=Width div 2;cy:=Height div 2;
 r:=round(sqrt(sqr(cx-ax)+sqr(cy-ay)));
 with Canvas do begin
  if not o then  Ellipse(cx-r,cy-r,cx+r,cy+r)
  else Rectangle(cx-r,cy-r,cx+r,cy+r);
  MoveTo(cx,cy);
  LineTo(ax,ay);
 end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 tag:=1;
 
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 ax:=x;ay:=y;   o:=ssShift in Shift;
 if tag=1 then Repaint;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 tag:=0;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2010, 17:12   #3
bercut
 
Регистрация: 12.06.2009
Сообщений: 4
По умолчанию

Stilet, спасибо Вам большое!

Мне бы то же самое только с использованием Canvas.
bercut вне форума Ответить с цитированием
Старый 24.10.2010, 20:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мне бы то же самое только с использованием Canvas.
Не понял...
А я как сделал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delpi-перекодировка Бурундук Помощь студентам 9 21.08.2010 13:27
Каким образом можно нарисовать прямоугольник, C# Gogent Помощь студентам 2 19.08.2010 11:14
Нарисовать пунктирную окружность Гамбит Помощь студентам 1 19.03.2010 20:07
Нарисовать прямоугольник с начальними координатами rubik Помощь студентам 2 08.03.2010 17:48
нарисовать окружность состоящую из 36 разноцветных квадратов Invisible Hunter Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2008 18:03