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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.039 c
2-1164625210
Krants
2006-11-27 14:00
2006.12.17
Назначить событие всем компонентам


15-1164707664
ocean
2006-11-28 12:54
2006.12.17
Желтая пресса


15-1164450886
Jolik
2006-11-25 13:34
2006.12.17
проблема: Delphi2006 и StarTeam2005R2...


15-1164650062
Piter
2006-11-27 20:54
2006.12.17
У всех ICQ накрылась?


11-1141342016
Dimaxx
2006-03-03 02:26
2006.12.17
Может я не так делаю?...