Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Вниз

Использование мыши для перемещения окна   Найти похожие ветки 

 
wiln   (2006-08-13 07:56) [0]

Проблема:  В обработчике OnMouseMove вызавается функция MoveWindow. procedure TForm1.OnMOuseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
 var
   Point: TPoint;
begin
 if(FlagDown = TRUE)
 then
 begin
   Point.X := X;
   Point.Y := Y;
   ClientToScreen(Point);
{   R[i]:= Point;
   i:= i + 1;       }
   MoveWindow(HANDLE, Point.X, Point.Y, Form1.Height, Form1.Width, TRUE);
 end;
    При движении мыши перетаскиваемое окно  сильно скачет по экрану. Что не так?


 
KilkennyCat ©   (2006-08-13 08:01) [1]

координаты не абсолютны, привязаны к форме... обратная связь получается, возбуждение, "завязка"... используйте глобальные коордианты и будет Вам сячастье, а я - спать нафиг...


 
KilkennyCat ©   (2006-08-13 08:03) [2]

и еще... возможно, TShiftState избавит от FlagDown? И кстати,
> if(FlagDown = TRUE)
> then

это все равно, что "если масло - масляное, то..."...
достаточно  if FlagDown then


 
ANTPro ©   (2006-08-13 09:46) [3]

procedure TForm1.KOLFormMouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Mouse.Button=mbLeft then//обязательно левая
 begin
     ReleaseCapture;
     SendMessage(Form.Handle,WM_SYSCOMMAND,$F012,0);
 end;
end;


 
DprYg ©   (2006-08-13 10:01) [4]

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then begin
   ReleaseCapture;
   Form1.Perform(WM_SYSCOMMAND, $F012, 0);
 end;
end;

И вще в Object Inspector надо в OnMouseDown всех оконных компонентов, за которые можно буксировать, сделать ссылку на FormMouseDown.


 
Ketmar ©   (2006-08-13 11:49) [5]

> [4] DprYg ©   (13.08.06 10:01)
изувер. SetCapture() для кого придумано?


 
Ketmar ©   (2006-08-13 11:50) [6]

вдогон: онять скопировали код из какого-то фака, а понять, как и почему работает -- не удосужилдись?


 
KilkennyCat ©   (2006-08-13 13:23) [7]

как обычно. а кокретно этот пример как вирус распространился.


 
DprYg ©   (2006-08-13 14:21) [8]


> онять скопировали код из какого-то фака, а понять, как и
> почему работает -- не удосужилдись?

Да, действительно, это код из какого-то фака. И копировать мне его не обязательно - для меня запомнить две строчки кода - не проблема. Во всяком случае меньшая, чем писать что-то типа [0]. Насчет того, что я не разбирался как и почему работает, вопрос: это из чего и откуда следует что я этого не сделал? И вообще, каждому (в том числе и Вам) желательно разбираться в незнакомом коде, а не голословно отмахиваться от него.

> как обычно. а кокретно этот пример как вирус распространился.

А почему этот пример так распространился? Ведь не только оттого что вопросы появляются? И еще: под как обычно Вы что подразумеваете?


 
ANTPro ©   (2006-08-13 14:29) [9]

Ketmar ©   (13.08.06 11:49) [5]
Код с SetCapture не прокатывает по крайней мере у меня, может покажешь как надо пользовать ?


 
Ketmar ©   (2006-08-13 14:55) [10]

> [8] DprYg ©   (13.08.06 14:21)
да? разобрались? заодно и протелепатировали, что мне этот код незнаком? тогда скажите, что это за число такое -- $F012? зачем оно там именно такое? почему второй параметр 0? зачем там ReleaseCapture(), и почему именно там? почему этот код не работает для правой кнопки?

> [9] ANTPro ©   (13.08.06 14:29)
MSDN подаст.


 
ANTPro ©   (2006-08-13 16:39) [11]

Ketmar ©   (13.08.06 14:55) [10]
да? разобрались? заодно и протелепатировали, что мне этот код незнаком? тогда скажите, что это за число такое -- $F012? зачем оно там именно такое? почему второй параметр 0? зачем там ReleaseCapture(), и почему именно там? почему этот код не работает для правой кнопки?

MSDN отказалась тебе подавать?


 
Ketmar ©   (2006-08-13 16:47) [12]

> [11] ANTPro ©   (13.08.06 16:39)
лично я это знаю. а вот знает ли автор "наезда"? сильно сомневаюсь.


 
ANTPro ©   (2006-08-13 17:15) [13]

Ketmar ©   (13.08.06 16:47) [12]
Я тоже знаю, но по моему код с SetCapture() будет НЕ оптимальным решением.


 
DprYg ©   (2006-08-13 17:47) [14]

Ketmar ©   (13.08.06 14:55) [10]
Первый параметр сообщения WM_SYSCOMMAND говорит, что форма находится в состоянии перетаскивания. Если его изменить, например на $F001, то можно будет изменять размер. Второй параметр обработчиком сообщения не используется - можете набрать например 173917298. ReleaseCapture освобождает мышь и связана с событием onMouseMove.  Насчет того, что правая кнопка не работает - объясните мне, пожалуйста. Вряд ли я автор - ведь [5], [6] сказали именно вы.
P.S. (to Ketmar) настаиваю на прекращении словесной перепалки...:) Мир?


 
Ketmar ©   (2006-08-13 17:53) [15]

> [14] DprYg ©   (13.08.06 17:47)
да фиг с ним. самому стало лениво дальше бодаться. попил пива... %-)



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

Форум: "WinAPI";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.036 c
15-1164537517
Колдун
2006-11-26 13:38
2006.12.17
Панели инструментов


3-1160143985
menart
2006-10-06 18:13
2006.12.17
Полнотекстовый поиск MS SQL SErver 2000


15-1164283016
kaif
2006-11-23 14:56
2006.12.17
Газпром-сити.


15-1164264232
Юрий С.А.
2006-11-23 09:43
2006.12.17
Русский язык


2-1164720995
Мишок
2006-11-28 16:36
2006.12.17
Папка windows





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