Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1153521032
Батя
2006-07-22 02:30
2006.09.03
WebBrowser


15-1155461333
Чемульпо
2006-08-13 13:28
2006.09.03
Помогите плиз!


11-1131995649
Flea
2005-11-14 22:14
2006.09.03
поиск в Richedit


3-1151132515
Lis'S
2006-06-24 11:01
2006.09.03
Сравнение двух таблиц в базе данных


3-1151048150
zdm
2006-06-23 11:35
2006.09.03
FASTReport нумерация полей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский