powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как программно создать текст возле указателя мыши
8 сообщений из 8, страница 1 из 1
Как программно создать текст возле указателя мыши
    #36724462
Mishel97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброе время суток !

На листе Excel есть елемент управления - кнопка или автофигура. Нажимает эту кнопку левой кнопкой мыши. После нажатия появляется заданный текст (или подсказка) рядом с указателем мыши. Появившийся текст (или подсказка) перемещается вместе с указателем мыши.

Такой вопрос - каким макросом можно реализовать представленную процедуру (программно создать текст возле указателя мыши) ?
...
Рейтинг: 0 / 0
Как программно создать текст возле указателя мыши
    #36724549
Фотография BION
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mishel97,

На сколько знаю, у листов эксэля нет события mouse_move, поэтому как-то на коленке тут накидал пример. Работает на таймере, либо API'шном (SetTimer), либо в цикле. Координаты мыши через GetCursorPos и т.д. В общем как-бэ работает, но нужно допиливать и допиливать.
...
Рейтинг: 0 / 0
Как программно создать текст возле указателя мыши
    #36725094
Mishel97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BION, спасибо за поддержку !

В прикреплённом файле идея сохранена.

Есть образец не в Excel, но не могу прикрепить из-за размера - 1,98 Мб. Допускается не более 150 Кб. Есть, однако, адрес где можно посмотреть.

http://myappz.ru/business/page/11/

Там файл - Табель учёта рабочего времени 2.1. Для просмотра необходимо скачать и установить, перейти на закладку - Отработанные часы. Тоесть необходимо так как в этом файле на для Excel.
...
Рейтинг: 0 / 0
Как программно создать текст возле указателя мыши
    #36725354
Фотография mriadus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как программно создать текст возле указателя мыши
    #36725457
Фотография BION
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mishel97,

Это не плавающие надписи, это самописные курсоры. Просто в определенный момент программа устанавливает в качестве курсора таблицы к примеру вот этот курсор:


Курсоры обычно размером 32х32, больше текста туда не влезет.
Опять же если в вашем случае обойтись малой кровью, то использовать за основу тот пример, что я выложил. Да, кстати, в моем примере, чтобы курсор мыши в цикле метода ExcelTimer() не переходил в "Wait", нужно вставить Application.Cursor = xlNorthwestArrow .

Если же использовать свои курсоры, т.е. идти по пути разработчиков той программы, то придется либо грузить курсоры как файлы, либо как ресурсы. И все это будет лежать в отдельной COM библиотеке. Ловить активное окно через GetForegroundWindow(), и если если оно совпадает с Application.hWnd вашего Excel окана, загружать нужный курсор исходя из текущих нужд.
Вот примерчик как через API задавать системе свои курсор: http://www.ex-designz.net/apidetail.asp?api_id=26

Еще один вариант: вместо курсоров гонять свою отдельную форму с надписью, форма может лежать в той же отдельной библиотеке.
...
Рейтинг: 0 / 0
Как программно создать текст возле указателя мыши
    #36726760
Mishel97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BION,

скорее всего все варианты подойдут. Вот только перепробовать бы их.

Application.Cursor = xlNorthwestArrow вставил так.


Public Sub ExcelTimer()
Dim lRetVal As Long
Dim Pos As POINTAPI
Dim Rec As RECT

Do While work
DoEvents

GetWindowRect Application.hwnd, Rec
lRetVal = GetCursorPos(Pos)
Worksheets(1).Label1.Left = (Pos.x - Rec.Left) / 1.31

' 1.31 разница scalemod's системи и окна excel, на глазок.
' 150 - примерная висота toolbar'a, тоже как-то нужно определить.
Worksheets(1).Label1.Top = (Pos.y - 150) / 1.31
Application.Cursor = xlNorthwestArrow

Loop
End Sub

Неуверен, что попал в нужное место, но макрос сразу стал привлекательний, нет "Wait", курсор не дрожит, тоесть теперь он работает.

Это начало. Возможно получится аналогичная автоматизация заполнения в Excel. Ещё раз большое спасибо !
...
Рейтинг: 0 / 0
Как программно создать текст возле указателя мыши
    #36726845
Фотография BION
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mishel97,

И еще, на выходе из цикла надо вернуть дефолтный курсор, а то так стрелка и останется:
Код: plaintext
1.
2.
3.
4.
5.
6.
Do While work
    ...
    Application.Cursor = xlNorthwestArrow
    ...
Loop

Application.Cursor = xlDefault
...
Рейтинг: 0 / 0
Как программно создать текст возле указателя мыши
    #36729314
Mishel97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BION,

после добавления Application.Cursor = xlDefault, курсор возвращается к первоначальному виду.

Сделаю заключение. На всякий случай. Возможно, в теме будет продолжение.

Текст возле указателя мыши необходим, в данном случае, для подсказки выбранного вида записи в табель. Для такого предназначения элемент управления Label имеет преимущества над самописними курсорами. В Excel всегда есть возможность создать точную копию любого документа с хорошим дизайном. В Label немало форматирования, поэтому есть возможность подобрать внешний вид Label под вид документа. В этом отношении применить Label – хорошее решение. Можно, очевидно, использовать и форму без заголовка, здесь тоже много форматирования, возможно даже больше.

Очевидно, елемент управления Label неоходимо перемещать вместе с указателем мыши. Для целей подсказки выбранного режима записи это наиболее наглядно. Однако потребуется определять координаты указателя. Есть варианты.

Следующим шагом после нажатия кнопки Start и получения подсказки на Label о виде записи неоходимо курсором вставить соответствующий знак в ячейку Excel (заполнять бланк табеля).

В этом месте проявляются такие небольшие несовершенства макроса. Знак в ячейку можно вписать одним щелчком левой кнопкой мыши. В принципе достаточно для разработчика. Однако есть пользователи. Для них-то неоходимо предусмотреть также два щелчка левой кнопкой мыши.

Два щелчка не пропускает макрос, очевидно из-за присутствия цикла. Кроме этого сообщение Status Bar мерцает.

В связи с чем лучшим способом определения координат указателя мыши, очевидно, есть использование API – функций.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как программно создать текст возле указателя мыши
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]