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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2008, 11:08   #1
Poseydon
 
Регистрация: 07.08.2008
Сообщений: 6
Вопрос Таскать фигуру мышкой

Подскажите, пожалуйста, как реализовать фигуру Shape1, которую во время работы программы можно будет таскать мышкой? Была мысль проверять координаты мыши и нажатие левой кнопки, но в процедуре:

Код:
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   begin
   Shape1.Left:=X;
   Shape1.Top:=Y;
end;
фугура сдвигается при нажатии, но не тащится.

Последний раз редактировалось Stilet; 07.08.2008 в 12:36.
Poseydon вне форума Ответить с цитированием
Старый 07.08.2008, 11:21   #2
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

А вы попробуйте вот это -

Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Shape1.Left:=X;
Shape1.Top:=Y;
end;
Crivel вне форума Ответить с цитированием
Старый 07.08.2008, 12:07   #3
Poseydon
 
Регистрация: 07.08.2008
Сообщений: 6
По умолчанию Ответ

Спасибо, фигура сдвигается при нажатии мыши. Но тащить нажатой мышью фигуру не получается.
Poseydon вне форума Ответить с цитированием
Старый 07.08.2008, 12:36   #4
Poseydon
 
Регистрация: 07.08.2008
Сообщений: 6
По умолчанию Решение

Извиняюсь, что спрашивал, решение нашёл сам:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Shape1: TShape;
    Timer1: TTimer;
    Shape2: TShape;
    Shape3: TShape;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

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

var
  Form1: TForm1;
  mpr:boolean;
  mx,my:integer;
  r: TRect;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
Var m,i:integer;
begin
mx:=Mouse.CursorPos.X-Form1.Left;
my:=Mouse.CursorPos.Y-Form1.Top;
m:=5;
with Canvas do begin
Pen.Color:=0;
MoveTo(56,8);
LineTo(56,496);
MoveTo(8,448);
LineTo(976,448);
MoveTo(48,16);
LineTo(56,8);
LineTo(64,16);
MoveTo(968,440);
LineTo(976,448);
LineTo(968,456);
For i:=1 to 10 do begin
TextOut(20,440-40*i,IntToStr(m*i));
MoveTo(48,448-40*i);
LineTo(64,448-40*i);
                  end;
For i:=1 to 22 do begin
TextOut(48+40*i,474,IntToStr(m*i));
MoveTo(56+40*i,440);
LineTo(56+40*i,456);
                  end;
                    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
mpr:=FALSE;
SetWindowLong(Handle, GWL_STYLE,
    GETWINDOWLONG(Handle, GWL_STYLE) and (not WS_CAPTION));
  Height := ClientHeight;
Timer1.Interval:=1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
halt;
end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var   r1: TRect;
begin
  GetClipCursor(r);
  r1 := Form1.ClientRect;
  r1.Left:=56+Form1.Left;
  r1.Top:=8+Form1.Top;;
  r1.Bottom:=448+Form1.Top;
  r1.Right:=976+Form1.Left;
  If (mx>=56) and (mx<=976) and (my>=8) and (my<=448) then begin
  ClipCursor(@r1);
  mpr:=TRUE;
Shape1.Left:=mx-5;
Shape1.Top:=my-5;
Shape2.Top:=my;
Shape2.Width:=mx-Shape2.Left;
Shape3.Left:=mx;
Shape3.Top:=my;
Shape3.Height:=490-Shape3.Top;
end;
end;

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mpr:=FALSE;
  ClipCursor(@r);
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
If mpr then begin
  mpr:=TRUE;
Shape1.Left:=mx-5;
Shape1.Top:=my-5;
Shape2.Top:=my;
Shape2.Width:=mx-Shape2.Left;
Shape3.Left:=mx;
Shape3.Top:=my;
Shape3.Height:=490-Shape3.Top;
end;
end;

end.
Заодно нарисовал систему координат и запретил перемещать кружок за её пределы
Poseydon вне форума Ответить с цитированием
Старый 07.08.2008, 12:36   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Poseydon
НЕдавно выкладывал код как двигать мышой обьект.
Плюс к тому уже обсуждалось - рули поиском.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить значение ID при наведении мышкой badfilin JavaScript, Ajax 9 25.04.2009 19:35
Работа с мышкой Klio Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.05.2008 22:37
Помогите прикол с мышкой AngelOfDeath Общие вопросы Delphi 6 08.04.2008 14:57
Управление МЫШКОЙ!!! Рустам Помощь студентам 11 28.10.2007 12:15
Как изменять размеры StringGrid Мышкой Inbox Компоненты Delphi 4 30.06.2007 14:34