|
|
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
Всем доброе время суток ! На листе Excel есть елемент управления - кнопка или автофигура. Нажимает эту кнопку левой кнопкой мыши. После нажатия появляется заданный текст (или подсказка) рядом с указателем мыши. Появившийся текст (или подсказка) перемещается вместе с указателем мыши. Такой вопрос - каким макросом можно реализовать представленную процедуру (программно создать текст возле указателя мыши) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 23:21:17 |
|
||
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
Mishel97, На сколько знаю, у листов эксэля нет события mouse_move, поэтому как-то на коленке тут накидал пример. Работает на таймере, либо API'шном (SetTimer), либо в цикле. Координаты мыши через GetCursorPos и т.д. В общем как-бэ работает, но нужно допиливать и допиливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 01:49:44 |
|
||
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
BION, спасибо за поддержку ! В прикреплённом файле идея сохранена. Есть образец не в Excel, но не могу прикрепить из-за размера - 1,98 Мб. Допускается не более 150 Кб. Есть, однако, адрес где можно посмотреть. http://myappz.ru/business/page/11/ Там файл - Табель учёта рабочего времени 2.1. Для просмотра необходимо скачать и установить, перейти на закладку - Отработанные часы. Тоесть необходимо так как в этом файле на для Excel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 11:41:55 |
|
||
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 12:49:10 |
|
||
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
Mishel97, Это не плавающие надписи, это самописные курсоры. Просто в определенный момент программа устанавливает в качестве курсора таблицы к примеру вот этот курсор: Курсоры обычно размером 32х32, больше текста туда не влезет. Опять же если в вашем случае обойтись малой кровью, то использовать за основу тот пример, что я выложил. Да, кстати, в моем примере, чтобы курсор мыши в цикле метода ExcelTimer() не переходил в "Wait", нужно вставить Application.Cursor = xlNorthwestArrow . Если же использовать свои курсоры, т.е. идти по пути разработчиков той программы, то придется либо грузить курсоры как файлы, либо как ресурсы. И все это будет лежать в отдельной COM библиотеке. Ловить активное окно через GetForegroundWindow(), и если если оно совпадает с Application.hWnd вашего Excel окана, загружать нужный курсор исходя из текущих нужд. Вот примерчик как через API задавать системе свои курсор: http://www.ex-designz.net/apidetail.asp?api_id=26 Еще один вариант: вместо курсоров гонять свою отдельную форму с надписью, форма может лежать в той же отдельной библиотеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 13:16:10 |
|
||
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
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. Ещё раз большое спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 22:56:02 |
|
||
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
Mishel97, И еще, на выходе из цикла надо вернуть дефолтный курсор, а то так стрелка и останется: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 01:36:31 |
|
||
|
Как программно создать текст возле указателя мыши
|
|||
|---|---|---|---|
|
#18+
BION, после добавления Application.Cursor = xlDefault, курсор возвращается к первоначальному виду. Сделаю заключение. На всякий случай. Возможно, в теме будет продолжение. Текст возле указателя мыши необходим, в данном случае, для подсказки выбранного вида записи в табель. Для такого предназначения элемент управления Label имеет преимущества над самописними курсорами. В Excel всегда есть возможность создать точную копию любого документа с хорошим дизайном. В Label немало форматирования, поэтому есть возможность подобрать внешний вид Label под вид документа. В этом отношении применить Label – хорошее решение. Можно, очевидно, использовать и форму без заголовка, здесь тоже много форматирования, возможно даже больше. Очевидно, елемент управления Label неоходимо перемещать вместе с указателем мыши. Для целей подсказки выбранного режима записи это наиболее наглядно. Однако потребуется определять координаты указателя. Есть варианты. Следующим шагом после нажатия кнопки Start и получения подсказки на Label о виде записи неоходимо курсором вставить соответствующий знак в ячейку Excel (заполнять бланк табеля). В этом месте проявляются такие небольшие несовершенства макроса. Знак в ячейку можно вписать одним щелчком левой кнопкой мыши. В принципе достаточно для разработчика. Однако есть пользователи. Для них-то неоходимо предусмотреть также два щелчка левой кнопкой мыши. Два щелчка не пропускает макрос, очевидно из-за присутствия цикла. Кроме этого сообщение Status Bar мерцает. В связи с чем лучшим способом определения координат указателя мыши, очевидно, есть использование API – функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 01:53:50 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=101&tid=1343583]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 364ms |

| 0 / 0 |
