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

Вниз

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

Наверх




Память: 0.47 MB
Время: 0.037 c
3-1174498152
olevacho_
2007-03-21 20:29
2007.06.10
Определение пользователя и компьютера


15-1179160502
Bad_B
2007-05-14 20:35
2007.06.10
Как это работать программистом?


2-1179643152
А.Брей
2007-05-20 10:39
2007.06.10
Переменная


6-1164459610
iNevil
2006-11-25 16:00
2007.06.10
multicast - с чем его едят?


15-1179387304
NailMan
2007-05-17 11:35
2007.06.10
Как восстановить мылительные способности после перерыва?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский