Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 04.03.2019
Сообщений: 68

Курсор мыши

27.06.2019, 23:11. Показов 2480. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте скажите пожалуйста, как определить что изменился курсор мыши на что то другое?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2019, 23:11
Ответы с готовыми решениями:

курсор мыши
как сделатьчтобы курсор мыши переместился в заданные мною координаты

Как изменить курсор мыши?
Мне надо изменить курсор ,делаю так procedure TForm2.Button1Click(Sender: TObject); Var Cur: Tcursor; begin ...

Изменить курсор мыши при запуске программы
Как изменить, курсор мыши при запуске программы? В интернете полазил, нашел const crMyCursor = 5; var Form1: TForm1; implementation ...

10
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,428
27.06.2019, 23:28
Внешний вид или положение курсора?
Для положения курсора есть событие OnMouseMove.
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 3
28.06.2019, 04:58
Цитата Сообщение от Сергей_029 Посмотреть сообщение
изменился курсор мыши на что то другое?
А на что может измениться курсор мыши?
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,428
28.06.2019, 09:06
D1973, на другой курсор?
0
Эксперт Pascal/Delphi
 Аватар для droider
4888 / 2822 / 865
Регистрация: 04.10.2012
Сообщений: 10,264
28.06.2019, 09:36
Мне кажется, что таким образом ТС пытается отследить завершение какого-то процесса или переход в какое-то состояние.

Сергей_029, озвучьте задачу конкретнее. Зачем это нужно? Есть вероятность более корректного варианта.

Добавлено через 6 минут
На всякий случай можно использовать такой шаблон, взятый с довольно известного ресурса

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
const
  HighCursor = 13;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FCursorHandles: array [0..HighCursor] of HCURSOR;
  public
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
const
  OEMCursors: array [0..HighCursor] of Integer = (OCR_NORMAL, OCR_IBEAM,
      OCR_WAIT, OCR_CROSS, OCR_UP, OCR_SIZENWSE, OCR_SIZENESW, OCR_SIZEWE,
      OCR_SIZENS, OCR_SIZEALL, OCR_NO, OCR_HAND, OCR_APPSTARTING,
      32651 {OCR_HELP?});
 
  CursorNames: array [0..HighCursor] of string = ('OCR_NORMAL', 'OCR_IBEAM',
      'OCR_WAIT', 'OCR_CROSS', 'OCR_UP', 'OCR_SIZENWSE', 'OCR_SIZENESW',
      'OCR_SIZEWE', 'OCR_SIZENS', 'OCR_SIZEALL', 'OCR_NO', 'OCR_HAND',
      'OCR_APPSTARTING', 'OCR_HELP');
 
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to HighCursor do
    FCursorHandles[i] := LoadImage(0, MakeIntResource(OEMCursors[i]),
        IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR or LR_DEFAULTSIZE or LR_SHARED);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
 
  function GetCursorName(Cursor: HCURSOR): string;
  var
    i: Integer;
  begin
    for i := 0 to HighCursor do
      if Cursor = FCursorHandles[i] then begin
        Result := CursorNames[i];
        Exit;
      end;
    Result := 'Unknown Cursor';  // A custom cursor.
  end;
 
var
  CursorInfo: TCursorInfo;
begin
  CursorInfo.cbSize := SizeOf(CursorInfo);
  if GetCursorInfo(CursorInfo) then
    Label1.Caption := GetCursorName(CursorInfo.hCursor)
  else
    Label1.Caption := 'Fail: ' + SysErrorMessage(GetLastError);
end;
0
0 / 0 / 0
Регистрация: 04.03.2019
Сообщений: 68
28.06.2019, 19:40  [ТС]
Очень большой код, сразу не освоить, но я хотел конкретнее при наведении мыши меняется стрелка мыши на на указатель(рука) ну вот в этом момент если случилось значит далее.., но она меняется при наведении на кнопку, в свойствах я указал, конечно я мог бы определить координаты этой кнопки, но как то по короче можно это сделать?

Еще столкнулся с одной проблемой почему, не срабатывает событие онклик по форме, если мышь находится по краям формы, даже не на самой границы примерно с отступам 5 px. Работает только от краем на 50 и более пикселей, почему так? Вроде событие формы, должно работать при клипе по любому месту формы?
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,428
28.06.2019, 21:03
Цитата Сообщение от Сергей_029 Посмотреть сообщение
но она меняется при наведении на кнопку
На какую кнопку? В своей программе или в чужой?

Цитата Сообщение от Сергей_029 Посмотреть сообщение
не срабатывает событие онклик по форме, если мышь находится по краям формы, даже не на самой границы примерно с отступам 5 px. Работает только от краем на 50 и более пикселей, почему так?
Не может быть. При щелчке в клиентской области всегда срабатывает.
0
0 / 0 / 0
Регистрация: 04.03.2019
Сообщений: 68
28.06.2019, 21:11  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
На какую кнопку? В своей программе или в чужой?
Конечно своей
0
 Аватар для Flip
335 / 173 / 67
Регистрация: 25.02.2018
Сообщений: 616
28.06.2019, 21:13
Цитата Сообщение от Сергей_029 Посмотреть сообщение
Конечно своей
А не проще описать задачу полностью, которую вы пытаетесь реализовать столь неординарным путём?
0
Модератор
4146 / 2357 / 812
Регистрация: 15.11.2015
Сообщений: 9,428
28.06.2019, 22:19
Цитата Сообщение от Сергей_029 Посмотреть сообщение
Конечно своей
Так у кнопки есть событие OnMouseMove. Если оно наступило, значит, курсор над кнопкой.

Добавлено через 46 минут
Ещё есть системные сообщения CM_MOUSEENTER и CM_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
unit MouseEnterLeave1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
// Переопределение класса кнопки, чтобы ввести обработчики сообщений
type
  TButton = class(StdCtrls.TButton)
  private
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  public
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;
 
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Button1MouseEnter(Sender: TObject);
    procedure Button1MouseLeave(Sender: TObject);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
// Обработчик сообщения CM_MOUSEENTER
procedure TButton.CMMouseEnter(var Message: TMessage);
begin
  if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);
end;
 
// Обработчик сообщения CM_MOUSELEAVE
procedure TButton.CMMouseLeave(var Message: TMessage);
begin
  if Assigned(FOnMouseLeave) then
    FOnMouseLeave(Self);
end;
 
 
// Далее идёт обычная часть
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Нужно обработчики событий присвоить вручную, так как, их нет в инспекторе объектов.
  Button1.FOnMouseEnter := Button1MouseEnter;
  Button1.FOnMouseLeave := Button1MouseLeave;
end;
 
procedure TForm1.Button1MouseEnter(Sender: TObject);
begin
  // Обработчик события MouseEnter кнопки. Здесь пишите что хотите как в любом другом обработчике событий
  Label1.Caption := 'Mouse over Button1';
end;
 
procedure TForm1.Button1MouseLeave(Sender: TObject);
begin
  // Обработчик события MouseLeave кнопки. Здесь пишите что хотите как в любом другом обработчике событий
  Label1.Caption := 'Mouse leave Button1';
end;
 
end.
1
0 / 0 / 0
Регистрация: 04.03.2019
Сообщений: 68
29.06.2019, 00:26  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Так у кнопки есть событие OnMouseMove. Если оно наступило, значит, курсор над кнопкой
Да скорей лучше так, не обратил на это внимания
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.06.2019, 00:26
Помогаю со студенческими работами здесь

Курсор мыши не должен выходить за пределы формы
Здравствуйте, подскажите пожалуйста, каким образом, можно реализовать запрет выхода курсора мыши за пределы формы. В инете поискал, наше...

Курсор мыши в Delphi
Здраствуйте уважаемые программисты! Вопрос заключается в том, что я написал программку и хочу сделать чтобы в этой программке не работала...

Как можно программно переместить курсор мыши?..
Ну вопрос вы поняли, только кроме SetMousePos ещё че есть ?..

Плавает курсор мыши. Задержка мыши при игре в шутеры (игры)
Мучаюсь с проблемой две недели. Совершенно запутался и кажется начинаю терять нервные клетки. Попробую описать проблему детальнее, чтобы...

Как скрыть курсор мыши и захватить мышку, чтобы не было стрелки мыши и получать команды?
Искал статью в инете и команды: Как сделать захват мыши, чтобы сделать видеоугру от первого лица и избавится от двигающегося курсора мыши....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru