С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130

OnMouseMove

18.03.2013, 18:14. Показов 7301. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
такой вопрос событие OnMouseMove возникает в момент движения мышки, x и y которые передаются в параметрах запоминают координаты где была мышка до перемещения? или где стала находится после?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2013, 18:14
Ответы с готовыми решениями:

OnMouseMove
Ребят, как на действие OnMouseMove запретить передвижение допустим кнопки за форму?

StringGrid и OnMouseMove
Добрый день всем. Вопрос такой - каким образом можно в событии OnMouseMove компонента StringGrid получить номер столбца и строки ячейки,...

Событие onMouseMove
Как сделать событие onMouseMove для динамических обьектов

17
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
18.03.2013, 18:16
на тек момент
0
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
18.03.2013, 18:32  [ТС]
Цитата Сообщение от unick12345 Посмотреть сообщение
на тек момент
т.е. после перемещения или до? конкретно сложно было ответить?

Добавлено через 5 минут
п.с. просто мне очень нужно что то типа OnMouseLeave только срабатывающее при покидании заданной области (Rect)
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.03.2013, 18:43
Можно PtInRect использовать с флагом.
0
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
18.03.2013, 19:11  [ТС]
Цитата Сообщение от gorfil Посмотреть сообщение
Можно PtInRect использовать с флагом.
так я его и использую... надо типа при покидании Rect запомнить его и что нибудь с ним сделать (ТЕМНУЮ ! ), а потом и еще что то с Rect куда попал... я просто не пойму по какому событию это дело юзать

Добавлено через 16 минут
сейчас сделал так: создал 2 глобальные переменные для x и y соответственно, и проверяю PtInRect,
должно получаться так чтобы при движении мыши тот квадратик где мышь была закрашивался одним цветом, а куда перевелась другим, а вместо этого я получаю змейку какую то... т.е. за мышью остается постепенно исчезающий след - цвет меняется, но почему так долго?
да и еще к тому же все что было на канве стирается (ну может это недоделки процедуры, пока не уверен)

Добавлено через 8 минут
да также еще есть вариант что я как то не так юзаю GetKeyState, мне нужно чтобы то что я описывал выше происходило только при зажатой левой клавише мыши, поэтому я пишу if GetKeyState(vk_LButton)>0 .... правильно? а то в факах с гугла не понятно что значит старший\младший байт
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.03.2013, 19:16
Вот небольшой набросок:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Rect: TRect;
begin
  if not (ssLeft in Shift) then Exit;
 
  Rect := Bounds(200, 200, 200, 200);
 
  if PtInRect(Rect, Point(X,Y)) and not InRect then
  begin
    InRect := True;
    Canvas.Brush.Color := clRed;
    Canvas.FillRect(Rect);
  end;
 
  if not PtInRect(Rect, Point(X,Y)) and InRect then
  begin
    InRect := False;
    Canvas.Brush.Color := clGreen;
    Canvas.FillRect(Rect);
  end;
 
  Caption := IntToStr(X) + ' = ' + IntToStr(Y);
  if InRect then
    Caption := Caption + ' In'
  else
    Caption := Caption + ' Out';
end;
0
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
18.03.2013, 19:23  [ТС]
gorfil, даже если опустить что вы забыли объявить переменную InRect, не понятно что вы хотели сказать этим: "and not InRect" и "and InRect ",
ни я ни компилятор этого не поняли

п.с. могу проект скинуть если надо
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.03.2013, 19:27
InRect - глобальная переменная типа boolean
Delphi
1
2
3
4
5
var
  Form1: TForm1;
  InRect: boolean;
 
implementation
0
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
18.03.2013, 19:43  [ТС]
заработало, прикольно, но пока очень сильно помогло только "if not (ssLeft in Shift) then Exit;", а то GetKeyState какая то багнутая
почитайте, все таки хочется более применимо к моему случаю

Добавлено через 5 минут
п.с. чтобы вам долго не мучиться в поисках аналога скажу что делаю сапера попробуйте открыть его,
нажать на поле и переводить мышку -> клетка будет выглядеть нажатой пока мышка на нее давит, когда мышка ушла клетка отжалась,
этого я и добиваюсь
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.03.2013, 19:46
Мой код отслеживает вход в заданную область и выход из нее при нажатой левой кнопке мыши. А тебе что надо?
0
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
18.03.2013, 19:47  [ТС]
Цитата Сообщение от gorfil Посмотреть сообщение
Мой код отслеживает вход в заданную область и выход из нее при нажатой левой кнопке мыши. А тебе что надо?
10 символов

Цитата Сообщение от GetMeHelp Посмотреть сообщение
п.с. чтобы вам долго не мучиться в поисках аналога скажу что делаю сапера попробуйте открыть его,
нажать на поле и переводить мышку -> клетка будет выглядеть нажатой пока мышка на нее давит, когда мышка ушла клетка отжалась,
этого я и добиваюсь
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.03.2013, 21:24
Надо было сразу писАть, что области - это компоненты (кнопки), а не пустая форма с мнимыми квадратами.
У большенства компонентов есть события MouseEnter и MouseLeave. И у кнопко в том числе.
Вот набросал пример, который работает с нажатием правой кнопки мыши, т.к. нажатая левая блокирует некоторые события (как с этим бороться - не знаю).
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;
 
type
  TBitBtn = class(Buttons.TBitBtn)
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
  private
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  end;
 
type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn11: TBitBtn;
    BitBtn12: TBitBtn;
    BitBtn13: TBitBtn;
    BitBtn14: TBitBtn;
    BitBtn15: TBitBtn;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  isRButton: boolean;
 
implementation
 
{$R *.dfm}
 
procedure TBitBtn.CMMouseEnter(var Msg: TMessage);
begin
  if isRButton then
    Perform( BM_SETSTATE, 1, 0 ); //âèçóàëèçàöèÿ íàæàòèÿ êíîïêè
end;
 
procedure TBitBtn.CMMouseLeave(var Msg: TMessage);
begin
  Perform( BM_SETSTATE, 0, 0 );
end;
 
procedure TBitBtn.MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer);
begin
  inherited;
  if Button = mbRight then
  begin
    isRButton := True;
    Perform( BM_SETSTATE, 1, 0 );
  end;
end;
 
procedure TBitBtn.MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer);
begin
  inherited;
  if Button = mbRight then
  begin
    isRButton := False;
    Perform( BM_SETSTATE, 0, 0 );
  end;
end;
 
end.
Вложения
Тип файла: rar Buttons.rar (1.4 Кб, 5 просмотров)
0
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
18.03.2013, 21:29  [ТС]
я говорил что области это кнопки? первая мысля моя была да кнопки (когда хотел сделать сапера), но так и не смог придумать как через кнопки реализовать, поэтому все сделал на канве, т.е. квадраты у меня это чисто на канве нарисованы, отлавливаю PtInRect и т.д. трудоемкий метод, зато работает
Вложения
Тип файла: rar сапер.rar (196.8 Кб, 5 просмотров)
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.03.2013, 21:35
Змейки какие-то получаются, когда мышкой по полю водишь...
С кнопками-то оно все гораздо проще.
0
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
18.03.2013, 21:36  [ТС]
о змейках речь, как их убрать?
с кнопками не проще... с кнопками хуже смотрится... пробовал вначале...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.03.2013, 21:51
В БитБатоны можно любые картинки грузить, хоть белые квадраты, хоть что угодно.
А в твоем нынешнем варианте мне так просто не разобраться.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
19.03.2013, 00:33
GetMeHelp, берем твой вариант, делаем так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure TMainForm.TableMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var i, j: integer;
begin
  Smile.Glyph:= BL[1];
  for i:= 1 to 9 do
    for j:= 1 to 9 do
      if PtInRect(RA[i,j], Point(x, y)) then
      begin
        DrawInCell(Empty, i, j);
        ACol := i; ARow := j;
      end;
end;
 
procedure TMainForm.TableMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var i, j: integer;
begin
  // if GetKeyState(vk_LButton)>0 then
  if ssLeft In Shift then
  begin
    // DrawInCell(Fill, ACol, ARow);
    // ACol:= x; ARow:= y;
    for i:= 1 to 9 do
      for j:= 1 to 9 do
        if PtInRect(RA[i,j], Point(x, y)) then
        begin
          if (ACol <> i) or (ARow <> j) then
          begin
            DrawInCell(Fill, ACol, ARow);
            ACol := i; ARow := j;
            DrawInCell(Empty, i, j);
          end;
        end;
  end;
end;
, и смотрим, что получится... Можешь при отжатии мыши закрасить текущую клетку Fill-ом.
1
16 / 16 / 3
Регистрация: 01.03.2013
Сообщений: 130
19.03.2013, 21:54  [ТС]
UI, спасибо огромное

никто не подскажет как состряпать функцию проверяющую что находится в клетке? для конкретно этого примера,
т.е. там могут находится только: закрашенная клетка, пустая клетка, клетка с цифрой (ее надо вернуть), клетка с бомбой или флагом
(тут вероятно надо сравнить Rect с BitMap из ресурса, не знаю как)

что то вроде Function InCell(Col, Row: integer): string; //стринг потому что через мой тип TDrawMode нельзя вернуть цифры

Добавлено через 14 часов 16 минут
актуально ! про функцию... не знаю как реализовать хоть убей, задайте хоть куда рыть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2013, 21:54
Помогаю со студенческими работами здесь

Tchart и событие OnMouseMove
имеется график Tchart, постороенный по точкам взятым из Stringgrid. Необходимо чтобы при наведении на прямую графика, возле курсора...

Альтернатива события OnMouseMove
Подскажите пожалуйста, если ли в Дельфи событие, которое похоже на OnMouseMove? Дело в том, что при использовании этого события, действия,...

Изменение цвета shape onMouseMove
В общем нужно сделать так. На форме есть прозрачный shape и при наведении на него мыши он окрашивается в цвет, а когда мышь не на shape он...

OnMouseMove и OnMouseLeave компонента label
Здравствуйте многоуважаемые форумчане, помогите пожалуйста разобраться с событиями OnMouseMove и OnMouseLeave. В приклепленных файлах есть...

onMouseMove событие в заданных координатах формы
Подскажите как правильно сделать, что бы при onMouseMove в заданных координатах формы(только к примеру top form1 =0, width=&gt;0) к примеру...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru