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

Вниз

Окно не таскается....   Найти похожие ветки 

 
Deimos   (2003-10-07 23:04) [0]

Как реализовапть таскание окна только за определённые участки (например TPanel) лежащие в разных частях окна, причем остальные части должны вести себя как обычно...
Окно bsNone ..


 
wl ©   (2003-10-07 23:13) [1]

чё-то вспоминается событие вроде WM_NCHITTEST, копай в эту сторону.
можно обрабатывать события мыши на нужных компонентах OnMouseDown/OnMouseMove,


 
Deimos   (2003-10-07 23:16) [2]

если не трудно, скинь пример мне в мыло...


 
wl ©   (2003-10-08 02:21) [3]

скинул, но там немножко не то. Лови


 
Е-Моё имя ©   (2003-10-08 09:14) [4]


> Как реализовапть таскание окна

а зачем тебе затасканное окно?


 
EvgeniyR ©   (2003-10-08 14:15) [5]

Вот так:
procedure TForm1.Panel1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
ScreenDC := GetDC(0);
OldX := X; // сохраняем Х координату щелчка
OldY := Y; // сохраняем Y координату щелчка
OldLeft := X; // сохраняем Х координату щелчка
OldTop := Y; // сохраняем Y координату щелчка
MoveRect := BoundsRect; // сохраняем размеры и положение окна
DrawFocusRect(ScreenDC, MoveRect); // Рисуем рамочку окна
Dragging := True; // Начинаем перемещение
end;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if Dragging then begin //Если происходит перемещение то :.
DrawFocusRect(ScreenDC,MoveRect);
OldX := X; // Сохраняем новое положение экрана
OldY := Y; // Сохраняем новое положение экрана
MoveRect := Rect(Left+OldX-OldLeft,Top+OldY-OldTop,
Left+Width+OldX-OldLeft,Top+Height+OldY-OldTop);
DrawFocusRect(ScreenDC,MoveRect);
end;
end;

procedure TForm1.Panel1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin // Если это была левая кнопка
DrawFocusRect(ScreenDC,MoveRect); // Стираем рамку
Left := Left+X-OldLeft; // Устанавливаем новое левое положение окна
Top := Top+Y-OldTop; // Устанавливаем новое верхнее положение окна
ReleaseDC(0,ScreenDC); // Уничтожаем контекст устройства
Dragging := False; // Перемещение закончено
end;
end;


 
EvgeniyR ©   (2003-10-08 14:21) [6]

Забыл добавить в начале:
.....
private
{ Private declarations }
OldX,
OldY,
OldLeft,
OldTop : Integer;
ScreenDC : HDC;
MoveRect : TRect;
Dragging : Boolean;


 
Verg ©   (2003-10-08 14:22) [7]

А так попробуй.
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Form1.Perform(WM_SYSCOMMAND, $F012, 0);

end;


 
FaCHeRS   (2003-10-08 19:12) [8]

Нихрена себе... Вы чё? Энто в 100 раз проще сделать можно!
Мне аж плохо стало от ваших вариантов решения... :))))))))
Писать времени нет... Так что напишите мне на мыло... Я отвечу!
GoodBay!


 
Abikos   (2003-10-08 19:22) [9]

Перехватываешь WM_NCHITTEST в зависимости от того где находится мышка выставляешь то что тебе нужно :
Value Location of hot spot
HTBORDER In the border of a window that does not have a sizing border
HTBOTTOM In the lower horizontal border of a window
HTBOTTOMLEFT In the lower-left corner of a window border
HTBOTTOMRIGHT In the lower-right corner of a window border
HTCAPTION In a title bar
HTCLIENT In a client area
HTERROR On the screen background or on a dividing line between windows (same as HTNOWHERE, except that the DefWindowProc function produces a system beep to indicate an error)
HTGROWBOX In a size box (same as HTSIZE)
HTHSCROLL In a horizontal scroll bar
HTLEFT In the left border of a window
HTMENU In a menu
HTNOWHERE On the screen background or on a dividing line between windows
HTREDUCE In a Minimize button
HTRIGHT In the right border of a window
HTSIZE In a size box (same as HTGROWBOX)
HTSYSMENU In a System menu or in a Close button in a child window
HTTOP In the upper horizontal border of a window
HTTOPLEFT In the upper-left corner of a window border
HTTOPRIGHT In the upper right corner of a window border
HTTRANSPARENT In a window currently covered by another window
HTVSCROLL In the vertical scroll bar
HTZOOM In a Maximize button

Я считаю что это самый правильный вариант, ибо точно не глючит :)



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
3-65325
Weare
2003-09-26 13:31
2003.10.20
Опять про печать


1-65435
DBDev
2003-10-07 11:49
2003.10.20
Имееm ТМемо или TRichEdit и MSWord. как при копировании


4-65665
=SOFT=
2003-08-14 17:57
2003.10.20
Как создать процес и узнать что он завершился?


3-65359
Sirus
2003-09-29 14:57
2003.10.20
Можно ли в Firebird UDF вернуть результат VARCHAR???


3-65388
Alek_1
2003-09-25 21:23
2003.10.20
Снова про FireBird!