Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Перетащить форму


Автор: Стасик 23.8.2004, 13:58
Подскажите, ПЛИЗЗЗ!
Как мне сделать так, чтобы форму можно было перетаскивать с маста на место держась за TImage или TPaintBox.
Заранее очень благодарен.

Автор: Girder 23.8.2004, 15:57
К примеру, вот так:
Код
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Image1: TImage;
   procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
     State: TDragState; var Accept: Boolean);
   procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 xi,yi:Integer;

implementation

{$R *.dfm}

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
X:=X-xi;
Y:=Y-yi;
Form1.Left:=Form1.Left+X;
Form1.Top:=Form1.Top+Y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
Xi:=x;
Yi:=y;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.DragMode:=dmAutomatic;
Image1.DragCursor:=crHandPoint;
end;

end.

Автор: Guest 23.8.2004, 16:15
Ох! Сложно! biggrin.gif Огромное СПАСИБО!

Автор: Rennigth 23.8.2004, 18:52
а можно и покороче
на keydown image
Код

 ReleaseCapture;
 perform(WM_SysCommand,$F012, 0);

Faq полезная вещь

Автор: Girder 24.8.2004, 08:13
Можно... Только не на Key, а на Mouse...

Автор: Rennigth 24.8.2004, 17:47
ну да... sad.gif сори smile.gif

Автор: Akella 25.8.2004, 14:34

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
//-------этот кусок можно вставить в событие нажатия клавиши
//-------мыши не только формы, а любого компонента, который
//-------имеет такое событие
const
SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;

Автор: decoder 27.8.2004, 17:48
Держась за форму:
Код

...
type
 TForm1 = class(TForm)
 ...
 private
    procedure WMNCHitTest(var m: TWMNCHitTest); message WM_NCHitTest;
 ...
implementation
procedure TForm1.WMNCHitTest(var m: TWMNCHitTest);
begin
 inherited
 if m.Result = HTClient then
   m.Result := HTCaption;
end;

Модернизируй...

Автор: The MASTER 1.9.2004, 10:59
Легко:

Код

В Приват напиши
cX, cY : integer;
cEnabled : bool;

В событие OnMouseDown:
Пишешь:

If button=mbleft then begin
cX:=X;
cY:=Y;
cEnabled:=true;
end;

В событие onMouseMove:

if sMove then begin;
Left:=Left+X-cX;
Top:=Top+Y-cY;
end;

В событие onMouseUp:

cEnabled:=false;


Вот и всё!


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)