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

Вниз

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

 
Пётр_К   (2007-02-14 16:54) [0]

Можно ли сделать так, чтобы shape можно было таскать так,
как во время разработки?


 
DVM ©   (2007-02-14 16:54) [1]

можно


 
Пётр_К   (2007-02-14 16:58) [2]

А как?


 
Джо ©   (2007-02-14 17:02) [3]

> [2] Пётр_К   (14.02.07 16:58)
> А как?

Обработчики OnMouseDown, OnMouseUp, OnMouseMove. Запоминаем начальные координаты, текущие, два режими: «в движении»/нет. Все просто.


 
Пётр_К   (2007-02-14 17:03) [4]

Спасибо большое.


 
DVM ©   (2007-02-14 17:03) [5]

Че-то в этом духе:


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Shape1: TShape;
   procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 b: boolean;

implementation

{$R *.dfm}

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 b:=true;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if b then
   begin
     shape1.Left := x;
     shape1.Top := y;
   end;  
end;

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

end.



 
Пётр_К   (2007-02-14 17:07) [6]

Ещё раз большое спасибо.


 
Террабайт   (2007-03-25 04:41) [7]

Я проверил пример но там когда начнеш таскат шейп всегда мигает как от этого избавится


 
Loginov Dmitry ©   (2007-03-25 08:58) [8]


procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var
 NewLeft, NewTop: Integer;
begin
 if ssLeft in Shift then
 begin
   NewLeft := Shape1.Left + X;
   NewTop := Shape1.Top + Y;
   Shape1.BoundsRect := Rect(
     NewLeft, NewTop, NewLeft + Shape1.Width, NewTop + Shape1.Height)
 end;
end;


 
KSergey ©   (2007-03-26 11:34) [9]

В реализации таких штучек всегда есть одна тонкость: пользователь может увести курсов мыши за пределы приложения и тама отпустить кнопку. Тогда OnMouseUp уже не приедет.
Тут нужно либо насильно ограничивать перемещение указателя мыши, лбо перехватив все события мыши на себя до прихода события отпускания кнопки мыши. (Ф-ций не подскажу, увы; нету под рукой)


 
RASkov   (2007-03-26 14:43) [10]

к [8]
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Shape1.Left <= -Shape1.Width then Shape1.Left:=0;
 if Shape1.Left >= ClientWidth then Shape1.Left:=ClientWidth-Shape1.Width;
 if Shape1.Top <= -Shape1.Height then Shape1.Top:=0;
 if Shape1.Top >= ClientHeight then Shape1.Top:=ClientHeight-Shape1.Height;
end;


 
Loginov Dmitry ©   (2007-03-26 15:17) [11]

> В реализации таких штучек всегда есть одна тонкость: пользователь
> может увести курсов мыши за пределы приложения и тама отпустить
> кнопку. Тогда OnMouseUp уже не приедет.


Вы - великий теоретик!


 
Джо ©   (2007-03-26 15:58) [12]

> [9] KSergey ©   (26.03.07 11:34)
> В реализации таких штучек всегда есть одна тонкость: пользователь
> может увести курсов мыши за пределы приложения и тама отпустить
> кнопку. Тогда OnMouseUp уже не приедет.

Приедет.


 
KSergey ©   (2007-04-11 11:44) [13]

> Джо ©   (26.03.07 15:58) [12]
> > может увести курсов мыши за пределы приложения и тама
> отпустить кнопку. Тогда OnMouseUp уже не приедет.
>
> Приедет.

Хм, ну с голубыми спорить не буду, проверим :)

Или тут не упомянуты какие-то условия? Я имел в виду "не приедет в исходное окно". (А может я правда что путаю? ужасть...)

> Loginov Dmitry ©   (26.03.07 15:17) [11]
> Вы - великий теоретик!

Мдя, диагноз подтверждается... :(



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
1-1176617592
Major Gray
2007-04-15 10:13
2007.06.10
Нестандартная реакция TPopupMenu.


4-1160821750
rll-progr
2006-10-14 14:29
2007.06.10
Управление окном другого приложения


15-1179385137
Kerk
2007-05-17 10:58
2007.06.10
Oracle External Procedure на Delphi


15-1179142527
Knight
2007-05-14 15:35
2007.06.10
Прога контроля прокси...


10-1126739002
TStas
2005-09-15 03:03
2007.06.10
Как с экселе обвести рамочками диапазон?