Главная страница
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.053 c
2-1155497031
Chort
2006-08-13 23:23
2006.09.03
ToolBar


3-1151156533
x.pro
2006-06-24 17:42
2006.09.03
Нужно узнать все значения одного поля без перебора...


2-1155552509
lex67
2006-08-14 14:48
2006.09.03
Сильнозагружается процессор


2-1155147831
Коля
2006-08-09 22:23
2006.09.03
TADOTable


2-1155732275
XTD
2006-08-16 16:44
2006.09.03
Передать параметры WEB странице.