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

OnMouseMove

18.03.2013, 18:14. Показов 7305. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
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 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru