Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизПеретаскивание формы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.057 c