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