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