Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.18;
Скачать: CL | DM;

Вниз

Отображение содержимого формы при перетаскивании   Найти похожие ветки 

 
Efir ©   (2007-08-30 21:14) [0]

Если в винде это свойство отключено.
Это можно сделать, если использовать ф-цию:
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, Ord(Value), nil, 0)

Но в этом случае перерисоваются все окошки windows, а меня интересует, можно ли сделать это только для своего окна (как в том же winamp).


 
tesseract ©   (2007-08-30 21:42) [1]


>  меня интересует, можно ли сделать это только для своего
> окна (как в том же winamp).


OnResize должен сработать, потом вызови OnPaint - только включи Doublebuffered на всякий случай.


 
DVM ©   (2007-08-30 22:14) [2]

При отключенном отображении содержимого, помнится, окну не приходят WM_SIZE и WM_MOVE до окончания процесса перетаскивания/изменения размеров, приходят лишь WM_SIZING и WM_MOVING - в их обработчиках я так понимаю и надо выполнять перерисовку.


 
tesseract ©   (2007-08-30 22:33) [3]


>  WM_SIZING и WM_MOVING - в их обработчиках я так понимаю
> и надо выполнять перерисовку.


А я что сказал ?


 
DVM ©   (2007-08-30 22:40) [4]


> А я что сказал ?

OnResize не будет возникать. Только по окончании процесса.


 
Ricks ©   (2007-08-31 13:15) [5]

Если у тебя окно типа WinAmp (т.е форма без заголовка, но со скином) тогда сделай перемещение вручную. Это будет проще всего.


 
Efir ©   (2007-08-31 14:22) [6]

Спасибо всем за помощь.
Сделал двумя способами:
1) В ручную.

var
 isDrag:boolean;
 dx, dy:integer;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 isDrag:=true;
 dx:=Mouse.CursorPos.X-Left;
 dy:=Mouse.CursorPos.Y-Top;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if ssLeft in shift then
   if isDrag then begin
     Left:=Mouse.CursorPos.X-dx;
     Top:=Mouse.CursorPos.Y-dy;
   end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 isDrag:=false;
end;

2) По событию WM_MOVING:

TForm1 = class(TForm)
   ...
 private
   ...
 public
   procedure WMMoving(var Message:TWMMoving); message WM_MOVING;
 end;

procedure TForm1.WMMoving(var Message: TWMMoving);
begin
 Left:=Message.DragRect.Left;
 Top:=Message.DragRect.Top;
end;

Единственный минус второго способа - отображение рамки вокруг формы при перетаскивании.



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1193397373
vr-online
2007-10-26 15:16
2007.11.18
HTTP


2-1193118344
F@T@L_Err0r
2007-10-23 09:45
2007.11.18
Выбор папки


3-1183627926
Jakudza
2007-07-05 13:32
2007.11.18
Произведение по столбцу в FireBird


15-1192694476
Ekzot
2007-10-18 12:01
2007.11.18
Универсальный клиент к БД.


15-1192088949
DVM
2007-10-11 11:49
2007.11.18
chm в Delphi2007 и клавиша F1