Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перетаскивание формы [D5, Win95/98]


Arhangel ©   (2002-05-29 17:22:00) 

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


Song   (2002-05-31 09:08:00) [1]

2cyborg © (30.05.02 10:29)
>>разу перемещалась форма как в винампе?
>> Зайди Свойства:Экран и поставь галочку отображать содержимое окна при его перетаскивании.

Эту галочку можно включить программно через SystemParametersInfo()


Arhangel   (2002-05-31 08:10:00) [2]

А зачем, если легче так;))


demon-777   (2002-05-31 00:21:00) [3]

>Arhangel © (30.05.02 14:45)
>Это уже настраиваются сами винды!;)Зайди Свойства:Экран и ?>поставь галочку отображать содержимое окна при его >перетаскивании.

атнють нет.
Это легко реализовать.
Вот пример, но он кривоват немного.
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
oX,oY,i:integer; B:boolean;
implementation

{$R *.DFM}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
begin
if i=2 then
begin
B:=True;
i:=0;
end;
if (ssLeft in Shift) and B then
begin
B:=False;
SetWindowPos(Form1.Handle,
HWND_TOPMOST,
Form1.Left+X-oX,
Form1.Top+Y-oY,
Form1.Width,
Form1.Height,
SWP_DRAWFRAME);
// Сдвинул, и всё остальное сделал
end;
i:=i+1;
oX:=X;
oY:=Y;
end;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
B:=True;
i:=0;
end;

end.


Arhangel   (2002-05-30 14:45:00) [4]

Зайди Свойства:Экран и поставь галочку отображать содержимое окна при его перетаскивании.


Arhangel   (2002-05-30 14:40:00) [5]

Это уже настраиваются сами винды!;)


cyborg   (2002-05-30 10:29:00) [6]

Это работает, но хотелось бы узнать как двигать форму что бы не только контур показывался, а сразу перемещалась форма как в винампе?


Arhangel   (2002-05-30 09:52:00) [7]

Song
Если обрабатывать WM_NCHITTEST, то получается вигня, т.к. это сообщение посылается даже если мыш просто двигается над toolbar"ом, но это не суть. Она мне не подошла т.к. мне надо чтобы форма именно перетаскивалась (чтобы рисовался контур формы и он ездил поэкрану), а с помощью этого сообщения у меня так не получилось.

demon-777
Насчет твоего примера, то я его уже подогнал под себя ещё когда ты его привел с label.

Все большое спасибо!!!!!!!!!!!


Song   (2002-05-30 08:55:00) [8]

2Arhangel © (29.05.02 17:22)
Перехватывайте WM_NCHITTEST

2demon-777 © (30.05.02 04:03)
Я просто не понял, что ToolBar уже кинут на форму, поэтому и спросил а где он у формы (типа как заголовок есть всегда).


demon-777   (2002-05-30 04:03:00) [9]

>Song, почти одно и тоже не так-ли ?(С уважением,)
Просто днём был занят и только на минутку залез на сайт,
и именно по этому очень конкретного ответа предоставить не смог.

И всё-же для ToolBar-a код следующий.

procedure TForm1.ToolBar1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012;
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;


demon-777   (2002-05-30 03:42:00) [10]

>Song © (29.05.02 23:55)
Это называется пример.


Song   (2002-05-29 23:55:00) [11]

А это называется ToolBar ?


demon-777   (2002-05-29 19:09:00) [12]

Только Ctrl держи когда перетаскивать будешь =)


demon-777   (2002-05-29 19:06:00) [13]

Вот те пример перетаскивания за лэйбл....
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012;
begin
if (button=mbleft) and (ssCTRL in Shift) then
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;
end;


Arhangel   (2002-05-29 18:52:00) [14]

Наверху.
Но зачем это надо?


Song   (2002-05-29 17:30:00) [15]

А где у формы toolbar?


Наверх

Титульная страница Поиск, карта сайта Написать письмо