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

Вниз

Перетаскивание формы   Найти похожие ветки 

 
Demand   (2006-08-11 18:02) [0]

как сделать перетаскивание формы не за заголовок, а за скажем панель?


 
Demand   (2006-08-11 18:17) [1]

А это действительно так сложно? может и мараться не стоит?


 
umbra ©   (2006-08-11 18:28) [2]

вот простейший вариант. Недостаток - движение не такое плавное, как при перетаскивании за заголовок.
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   FCatched : Boolean;
   FCatchedX : Integer;
   FCatchedY : Integer;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 FCatched := true;
 FCatchedX := X;
 FCatchedY := Y;
end;

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

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if FCatched then
   begin
     Left := Left + X - FCatchedX;
     Top := Top + Y - FCatchedY;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FCatched := False;
end;

end.


 
tButton ©   (2006-08-11 18:29) [3]

а это действительно так нужно?)
можно обрабатывать MouseDown, MouseMove и MouseUp
но есть более красивые способы
их обычно публикуют в учебных пособиях
рядом с "как сделать окно нестандартной формы"


 
ArtemESC ©   (2006-08-11 18:29) [4]

Demand   (11.08.06 18:02)  
Что то вроде этого не проверял


Bool: Boolean;
X_, Y_: Integer;

procedure TForm1.MouseDown (Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
  Bool := True;
  X_ := X;
  Y_ := Y;
end;

procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var DX, DY: integer;
 begin
 If Bool then
   begin
    DX := X - X_;
    DY := Y - Y_;
    Form1.Top := Form1.Top + DY;
    Form1.Left := Form1.Left + DX;
   end;
 end;

procedure TForm1.MouseUP((Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 Bool := False;
end;

procedure TForm1.Create(Sender: TObject);
begin
 Bool := False
end;


 
ArtemESC ©   (2006-08-11 18:30) [5]

umbra ©   (11.08.06 18:28) [2]
Эх, не успел...


 
Demand   (2006-08-11 18:31) [6]

ок спс, я так и делал, но таскать пробовал за разделитель на тоолбаре... все работает


 
PSPF2003 ©   (2006-08-11 18:50) [7]

procedure TFastForm.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
const
 Sc_dragmove = $F012;
begin
 ReleaseCapture;
 Perform(WM_SYSCOMMAND, Sc_dragmove, 0);
end;


 
Loginov Dmitry ©   (2006-08-11 19:02) [8]

> FCatched : Boolean;



> Bool: Boolean;


У всех что-ли такая привычка - использовать переменные для запоминания факта нажатия клавиши?

Чем вам ssLeft in Shift не нравится :)


 
Maloy   (2006-08-12 00:27) [9]


procedure TSysWin.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);

 const SC_DragMove = $F012;
begin
 ReleaseCapture;
 SysWin.perform(WM_SysCommand, SC_DragMove, 0);
end;


 
Германн ©   (2006-08-12 01:15) [10]

2 Maloy   (12.08.06 00:27) [9]
Опять "магическое число". :-)

Ещё один вариант - обработка WM_NCHITTEST с подменой Result на HTCAPTION.


 
tButton ©   (2006-08-12 08:24) [11]


> Чем вам ssLeft in Shift

тем что в данной условие будет истинно, даже если кнопка была зажата за пределами формы


 
Loginov Dmitry ©   (2006-08-12 10:54) [12]

> тем что в данной условие будет истинно, даже если кнопка
> была зажата за пределами формы


[11] = False

:)



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

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

Наверх




Память: 0.49 MB
Время: 0.044 c
2-1155460952
Vovan#1
2006-08-13 13:22
2006.09.03
Назначит событию процедуру


10-1123224797
Breez
2005-08-05 10:53
2006.09.03
С чего начать описание opc клиента на delphi?


9-1134244796
4ECHOK
2005-12-10 22:59
2006.09.03
Как вписать FreeForm в DummyCube ?


1-1153738809
nickmas
2006-07-24 15:00
2006.09.03
Chart или DBChart


1-1153462892
ANB
2006-07-21 10:21
2006.09.03
Как вытащить истинный путь к файлу ?