Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-65584
Думкин
2003-10-02 06:36
2003.10.20
С днем рождения! 2 октября.


1-65516
nx
2003-10-07 17:35
2003.10.20
Обработка событий OnKeyUp и OnKeyUp


1-65425
oleg_art
2003-10-07 17:53
2003.10.20
Редактор свойств


6-65569
ArtAlex
2003-08-19 15:34
2003.10.20
Submit в Webbrowser


9-65309
Alek Aaz
2003-04-15 12:54
2003.10.20
А пули летят, пули...





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