Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1193379623
Layner
2007-10-26 10:20
2007.11.18
Узнать, над каким элементом вызвали PopupMenu


6-1174461193
Pavel Kuznecov
2007-03-21 10:13
2007.11.18
"Байтовую" строку в последовательность $FF


15-1192064592
Маск
2007-10-11 05:03
2007.11.18
Какой лучше использовать компонент, для отображения данных в


2-1193037944
Vladimir Gradov
2007-10-22 11:25
2007.11.18
Стрелки скроллинга в панели инструментов, это какой компонент ?


1-1188367751
elserpiente
2007-08-29 10:09
2007.11.18
Просмотреть имя пользовотеля в ODBS DSN





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский