Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как определить направление мышки? 
V
    Опции темы
sandycrazy
Дата 24.7.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2006

Репутация: нет
Всего: нет



может где-то уже и было, но я  не нашёл))
нужно как-то отлавливать направления мышки (вверх, вниз, влево, вправо)
не координаты! т.к. это должно работать в пределах одной процедуры, и соответственно сравнивать старые координаты с новыми не получается, в ней постоянно всё выполняется

Код

procedure TForm1.MyResizeRxRichEditsLabelMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
         if mymouseup=true then begin
              RxRichEdit2.Height:=250-Mouse.CursorPos.Y-(Oldyy-OldTop)+10;
              RxRichEdit2.Top:=Mouse.CursorPos.Y-(Oldyy-OldTop)+10;
         end;
         if mymousedown=true then begin
              RxRichEdit2.Top:=Mouse.CursorPos.Y-(Oldyy-OldTop)+10;
              RxRichEdit2.Height:=250-Mouse.CursorPos.Y-(Oldyy-OldTop)+10;
         end;


 end;


нужно сделать что-то типа, если мышка двигается вверх тогда mymouseup=true, если вниз mymousedown=true
это нужно для нормального изменения размера RxRichEdit 
при помощи движка который можно таскать,
потому что, если двигать движок вниз и сначала устанавливать высоту RxRichEdit а потом отступ от верхнего края формы то всё нормально, 
а если наоборот то RxRichEdit начинает колбасить, потому что сначала
устанавливается позиция а потом размер, вот и хотелось бы менять порядок установки высоты и позиции в зависимости от направления движения курсора мышки.. может кто знает как это сделать? если через API то, плиз можно с подробным примером?! )) я API совсем не знаю!!! 

Это сообщение отредактировал(а) Girder - 25.7.2006, 17:24
PM MAIL   Вверх
Fin
Дата 25.7.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



На мыши не стоит система GPS, поэтому нельзя на программном уровне (не визуально) определить направление движения онной. Можно завести статическую переменную координату  в теле самой функции. В переменную сбрасывать старое значение. И при поступлении новых данных, находить угол хода мыши. Тут проблема возникнет только в самом начале иницилизации переменных.   

Это сообщение отредактировал(а) Fin - 25.7.2006, 00:08


--------------------
Пролетал мимо.
PM MAIL   Вверх
Palladin
Дата 25.7.2006, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Да нет, всё можно наладитьsmile 

Вообщем вначале процедуры узнаёш какое разрешение стоит у пользователя, потом исходя из этого по формуле узнаёш центральную точку, после этого начинаеш следить за мышью если координата увеличилась по X значит мышь пошла вниз, если уменьшилась значит вверх, если увеличился Y то мышь пошла вправо, если уменьшилась то влево, если допустим мышь по X увеличилась а по Y уменьшилась то мышь пошла вниз-влево ну и т.д. это надо оптимизовать и будет тебе счастье!! 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Alexeis
Дата 25.7.2006, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Fin @  25.7.2006,  00:07 Найти цитируемый пост)
 Можно завести статическую переменную координату  в теле самой функции.
 Не в делфи так нельзя, просто создают глобальную переменную, и сравнивают значение, ... дальше по тексту как уже писали Fin и  RooR. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Fin
Дата 25.7.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



alexeis1, Насколько я помню, в паскале было понятие статических переменных. В принципе можно выташить переменную в объявление класса TForm1. и тогда при иницилизации класса, делать запрос координат мыши, и записывать их в переменную. 


--------------------
Пролетал мимо.
PM MAIL   Вверх
bems
Дата 25.7.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(alexeis1 @  25.7.2006,  02:01 Найти цитируемый пост)
Цитата(Fin @  25.7.2006,  00:07 )
 Можно завести статическую переменную координату  в теле самой функции.

 Не в делфи так нельзя, просто создают глобальную переменную, и сравнивают значение, ... 

типизированная константа объявленная в функции. Плюс project/options/compiler/assignable typed constants 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
sandycrazy
Дата 25.7.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2006

Репутация: нет
Всего: нет



RooR, у меня тоже была такая мысль, при mousedown запомнить точку, и потом отсчитывать от этой точки вверх-вниз, но курсор может пойти сначала вверх а потом снова вниз не доходя до средней точки и т. п., тогда придётся делать сортировку по минимальному и максимальному отклонению от точки... короче хотелось сделать по человечески через API, видимо снова займусь математикой)) 
PM MAIL   Вверх
sandycrazy
Дата 25.7.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2006

Репутация: нет
Всего: нет



Дошло! Всё очень просто)) оказалось нужно сравнивать координаты с реальным положением RxRichEdit.Top. Если RxRichEdit.Top больше координат мыши относительно начала формы, то сначала устанавливаем RxRichEdit.Top потом RxRichEdit.Height, а если меньше сначала RxRichEdit.Height потом RxRichEdit.Top!!! 
PM MAIL   Вверх
sandycrazy
Дата 25.7.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2006

Репутация: нет
Всего: нет



Забыл добавить, таким образом удаётся избежать глюков при использоании двойной буфферизации 
Form1.DoubleBuffered:=True;
можно воткнуть в самое начало, в процедуру создани формы TForm1.FormCreate 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.