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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2017, 14:28   #1
fishki123
 
Регистрация: 09.11.2016
Сообщений: 5
По умолчанию Рисование эллипса в lazarus

Здравствуйте! Мне нужно нарисовать эллипс на timage.
Проблема в том,что мне нужно сделать так,чтобы эллипс рисовался удержанием кнопки на любом месте timage.
А он у меня рисуется либо с одного места,либо вообще создает много эллипсов(т.е. я удерживаю кнопку,и он создает не 1 эллипс,а множество).
Код:
procedure TForm1.ImageoutMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if ssleft in shift Then imageout.canvas.ellipse(x,y,100,100);
end;   
procedure TForm1.ImageoutMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if button = mbleft then imageout.canvas.moveto(x,y);
  end;
Я понимаю,что эллипс неправильно настроил а т.е. (x,y,100,100),но могли бы вы объяснить пожалуйста и решить мою проблему.
fishki123 вне форума Ответить с цитированием
Старый 29.01.2017, 14:42   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Во первых, событие MouseMove происходит многократно, пока движется мышь.

Во вторых, эти переменные X,Y - они хоть и называются одинаково, но не имеют друг к другу никакого отношения. И вообще они живут пока выполняется породившая их процедура.

Могу предложить это:
Создать глобальные переменные:
Код:
var
  Form1: TForm1;
  X0,Y0:Integer;
и 2 обработчика:
Код:
procedure TForm1.ImageoutMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 X0:=X;
 Y0:=Y;
end;

procedure TForm1.ImageoutMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Image1.Canvas.Ellipse(X0,Y0,X,Y);
end;
Если это то, что нужно.

Последний раз редактировалось type_Oleg; 29.01.2017 в 14:50.
type_Oleg вне форума Ответить с цитированием
Старый 29.01.2017, 14:51   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x0,y0,x1,y1:integer;
  Down:boolean;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   Down:=true;
   x0:=X;
   y0:=Y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   If Down then
   begin
      Image1.Canvas.Pen.Color:=clWhite;
      Image1.Canvas.Ellipse(x0,y0,x1,y1);
      x1:=X;
      y1:=Y;
      Image1.Canvas.Pen.Color:=clBlack;
      Image1.Canvas.Ellipse(x0,y0,x1,y1);
   end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   Down:=false;
end;

begin
   Down:=false;
end.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамическое рисование эллипса evgovs1991 C++ Builder 2 11.10.2014 12:26
Рисование эллипса на имейдж с координатами из label Xatiko Общие вопросы Delphi 8 14.03.2013 03:04
Assembler - Рисование эллипса dessaber Помощь студентам 2 21.11.2011 09:13
Рисование эллипса на канве и последующее его стирание Vohakisa Помощь студентам 3 21.05.2010 14:11
Рисование Эллипса Macwin Общие вопросы C/C++ 1 18.03.2010 14:38