Форум: "Основная";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
ВнизКак перетащить форму, если... Найти похожие ветки
← →
SemFLY (2002-09-12 10:18) [0]Свойство BorderStyle := bsNONE, а то сделал форму без окантовки,
а теперь перетаскивать её не могу :(
Спасибо ! ;)
← →
AFrolov (2002-09-12 10:24) [1]Почитай статьи как таскать форму не за шапку. Такая статья должна быть на http://www.sources.ru/
← →
France (2002-09-12 10:28) [2]А вот так попробуйте:
Закиньте в MouseMove(попробовал для Panel и Image - работает)
if ssleft in shift then
begin
ReleaseCapture;
Form1.perform(WM_syscommand, $F012, 0);
end;
← →
Игорь Шевченко (2002-09-12 10:29) [3]Окантовку не проще сделать ? :-)
← →
Игорь Шевченко (2002-09-12 10:30) [4]http://www.delphikingdom.com/treasury/hsdialogs.htm
Там формы без окантовки, таскаются. Ключевое слово - WMNCHitTest
← →
McSimm (2002-09-12 10:31) [5]у формы:
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
В этом обработчике надо оценить положение мыши и если надо перетаскивать - вернуть Msg.Result := htCaption;
← →
Alibaba (2002-09-12 10:33) [6]Или MouseMove
Или сделать окантовку
Я больше решений не вижу...
Если найдутся еще мне было-бы интересно услышать. :)
← →
Song (2002-09-12 10:44) [7]SC_DRAGMOVE конечно красиво, но подход ленивого программиста, а не хорошего :-)
← →
SemFLY (2002-09-12 16:59) [8]Оки ,сейчас почитаю что и как ;))
← →
zavdim (2002-09-13 12:53) [9]Только не в MouseMove, а в MouseDown.
← →
alena.svt (2002-09-13 19:43) [10]А вот так еще и с рамочкой!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
OldX,
OldY,
OldLeft,
OldTop : Integer;
ScreenDC : HDC;
MoveRect : TRect;
Dragging : Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
ScreenDC := GetDC(0);
OldX := X;
OldY := Y;
OldLeft := X;
OldTop := Y;
MoveRect := BoundsRect;
DrawFocusRect(ScreenDC, MoveRect);
Dragging := True;
end;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Dragging then begin
DrawFocusRect(ScreenDC,MoveRect);
OldX := X;
OldY := Y;
MoveRect := Rect(Left+OldX-OldLeft,Top+OldY-OldTop,
Left+Width+OldX-OldLeft,Top+Height+OldY-OldTop);
DrawFocusRect(ScreenDC,MoveRect);
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
DrawFocusRect(ScreenDC,MoveRect);
Left := Left+X-OldLeft;
Top := Top+Y-OldTop;
ReleaseDC(0,ScreenDC);
Dragging := False;
end;
end;
end.
← →
alena.svt (2002-09-13 19:53) [11]А вообще чего то проблемы не вижу
первый пример просто посимпотичнее.
Ну а так как и надо.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
private
procedure WMNCHitTest(var M: TWMNCHitTest);
message wm_NCHitTest;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;
end.
← →
SemFLY (2002-09-13 23:41) [12]Спасибо ! ;))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c