![]() |
![]() |
![]() |
|
Как получить нажатие Ctrl ? | ☑ | ||
---|---|---|---|---|
0
DES
01.12.10
✎
13:18
|
Хочу в вызываемом отчете определить состояние клавиши Ctrl при нажатии мышкой кнопки "Отчет" на форме.
Т.е. как узнать была ли нажата Ctrl при клике? (не переделывая все формы в которых вызывается этот отчет, а только переделывая вызываемый отчет) Как бы это так? |
|||
1
Волшебник
01.12.10
✎
13:23
|
Два байта, расположенные в ячейках памяти 0040:0017 и 0040:0018 содержат биты, отражающие статус клавиши сдвига и других клавиш-переключателей следующим образом:
остальные биты не используются. Роберт Журден. Справочник программиста на персональном компьютере фирмы IBM. Глава 3. Kлавиатура. http://sabalyauskas.by.ru/Library/Informatics/Jourdain/3.html |
|||
2
DES
01.12.10
✎
13:25
|
радует, что отстальные биты не используются...
|
|||
3
DES
01.12.10
✎
13:29
|
Намек, на поиск ВК-шки прямого доступа к памяти ?
|
|||
4
Волшебник
01.12.10
✎
13:30
|
(3) Тебе в 1С что ли?
|
|||
5
DES
01.12.10
✎
13:30
|
А то .... ;))))
|
|||
6
strange2007
01.12.10
✎
13:31
|
(1) Это ж дос. В винде совсем не там хранятся нажатия
|
|||
7
Волшебник
01.12.10
✎
13:31
|
Ты забыл собственную ветку что ли?
Как отследить нажатую Ctrl при нажатии кнопки на форме? |
|||
8
Волшебник
01.12.10
✎
13:31
|
||||
9
nop
01.12.10
✎
13:32
|
(5) а версия - э то секрет ?
|
|||
10
DES
01.12.10
✎
13:46
|
Весь фокус в том что нужно получить "состояние клавиши" ВЫЗВАВШЕЙ формы в ВЫЗВАННОЙ форме, не переделывая ВЫЗВАВШУЮ форму.
(типа lastkey() из FoxPro) |
|||
11
DES
01.12.10
✎
13:47
|
(9) версия чего?
Если 1С то в заголовке темы. |
|||
12
smaharbA
01.12.10
✎
13:48
|
(1) не надо этого, Рупор Абсурда прекрасное решение давал в свое время
|
|||
13
DES
01.12.10
✎
13:51
|
(12) не катит тот метод
|
|||
14
DES
01.12.10
✎
13:52
|
(13)+ тот метод относится к текущей форме, а мне нужно к вызываемой
|
|||
15
orefkov
01.12.10
✎
14:03
|
dynawrapx.dll + GetKeyState
|
|||
16
DES
01.12.10
✎
14:06
|
Срок регистрации домена 1CPP.RU закончился
|
|||
17
Волшебник
01.12.10
✎
14:42
|
(16) Баян. Что с www.1cpp.ru?
|
|||
18
DES
01.12.10
✎
16:19
|
(17) Не понял.
По теме: понял - никак значится. |
|||
19
smaharbA
01.12.10
✎
16:21
|
(10) а как она тогда вызывает с контролом если не переделана ?
|
|||
20
DES
01.12.10
✎
16:29
|
(19) Пока никак. Вот и хочется сделать.
|
|||
21
smaharbA
01.12.10
✎
16:34
|
ну вот и сделай как у Рупора, какая кнопка вызовет та и будет известна
|
|||
22
Torquader
01.12.10
✎
16:46
|
Кстати, если смотреть описание событий от мыши в Windows, то там есть Ctrl и Shift (WPARAM от WM_#BUTTONDOWN и флаги MK_CONTROL и MK_SHIFT), как некоторые "добавочные" кнопки мыши.
То есть система гарантировано их отслеживает - про Alt даже такого сказать нельзя. Поэтому, писать компоненту, которая перехватывает сообщения мыши - тогда гарантировано будет состояние клавиш. В противном случае никто не гарантирует, что события мыши и клавиатуры не будут "переставлены" в очереди сообщений. |
|||
23
DES
01.12.10
✎
16:54
|
(21) Не тот случай. У него эмулируется нажитие кнопки F12 и и форма отслеживает горячую клавишу {Ctrl+F12}, по этому вызывается иная функция.
Это значит нужно ПЕРЕДЕЛЫВАТЬ вызывающую форму (а их много). Я же хочу переделать только вызванную форму. (1 шт.) (22) Ну да. Я и намекаю на такую ВК. |
|||
24
АЛьФ
01.12.10
✎
16:56
|
Чем не устраивает FormEx?
|
|||
25
andrewks
01.12.10
✎
17:03
|
(23) где гарантия, что юзер не успеет отжать контрол до того, как твой код в обработке получит управление?
|
|||
26
АЛьФ
01.12.10
✎
17:04
|
2(25) Ловить глобально?
|
|||
27
DES
01.12.10
✎
17:51
|
(24) Всем устаривает.
Но я не пойму как мне в ВЫЗВАННОЙ форме узнать была ли нажата CTRL в вызывающей |
|||
28
DES
01.12.10
✎
17:52
|
(27)+ Типа, состояние CTRL форма должна получить как параметр
|
|||
29
DES
01.12.10
✎
17:53
|
(27)+ При этом не меняя форму с Кнопкой
|
|||
30
АЛьФ
01.12.10
✎
17:54
|
2(27) Глобально запомнить состояние CTRL при последнем клике (или нажатии Enter).
|
|||
31
DES
01.12.10
✎
17:55
|
(27) форма1 ----> вызывает форму отчета.
Как в отчете узнать была ли нажата CTRL при вызове ? |
|||
32
АЛьФ
01.12.10
✎
17:55
|
+(30) Или при открытии вызываемый анализировать состояние нажатия CTRL, если можно игнорировать (25).
|
|||
33
andrewks
01.12.10
✎
17:55
|
(27)(28)(29) есть ли жизнь на Марсе, нет ли жизни на Марсе -
это науке неизвестно... |
|||
34
DES
01.12.10
✎
17:56
|
(30) Понимаю что именно так.
А как реализовать ? |
|||
35
АЛьФ
01.12.10
✎
17:56
|
2(31) Тебе готовый код нужен?
|
|||
36
Tatitutu
01.12.10
✎
17:57
|
(27)а можешь поделится зачем тебе это нужно ?
вызывающая форма отлавливает начатие Ctrl и клик мыши и передает в параметре в ВЫЗВАННУЮ форму - ничего сложного нет. курить бросить не трудно.... - трудно понять зачем (с) |
|||
37
mikecool
01.12.10
✎
17:57
|
не отжимать CTRL до открытия отчета :))
|
|||
38
DES
01.12.10
✎
17:59
|
FormEx может отслеживать рельное состояние CTRL?
|
|||
39
DES
01.12.10
✎
18:00
|
(36) Сложно читать всю ветку с начала. Я понимаю.
|
|||
40
DES
01.12.10
✎
18:02
|
Процедура ПриНажатииКнопкиКлавиатуры(прм_КодКлавиши, прм_Alt, прм_Shыft, прм_Ctrl, прм_Символ, прм_ФСО)
в вызванной форме уже не сработает же??? |
|||
41
АЛьФ
01.12.10
✎
18:02
|
2(38) Да.
|
|||
42
АЛьФ
01.12.10
✎
18:03
|
2(40) Не сработает. Сработает глобальный вариант это процедуры.
|
|||
43
DES
01.12.10
✎
18:05
|
Просто в глобальнике процедуру засунуть ?
|
|||
44
DES
01.12.10
✎
18:23
|
(42) Получилось. Спасибо.
З.Ы. А ларчик просто открывался. (А народ то не знает) |
|||
45
Попытка1С
01.12.10
✎
18:25
|
(44) Выложи что получилось в итоге, можно в БЗ запихнуть.
|
|||
46
DES
01.12.10
✎
18:28
|
(45) Да ну...
АЛьф, по ходу, смеяться будет. Кусок хелпа в БЗ пихать не камильфо... |
|||
47
andrewks
01.12.10
✎
18:29
|
(44) имхается мне, не очень это хорошо - глобально клавиши ловить
|
|||
48
АЛьФ
01.12.10
✎
18:30
|
2(47) Почему?
|
|||
49
andrewks
01.12.10
✎
18:31
|
(48) пока не придумал. но спинной мозг недоволен :-)
|
|||
50
DES
01.12.10
✎
20:07
|
(48) Правда не очень корректно работает все.
1. При клике с Ctrl срабатывет как нужно (1-й режим) 2. При клике без Ctrl срабатывет как НЕ нужно (1-й режим) (как в п.1.) 3. При 3-ем клике без Ctrl срабатывет как нужно (2-й режим) |
|||
51
DES
01.12.10
✎
20:08
|
(48) а можно пример кода? может я чего не понимаю...
|
|||
52
Torquader
01.12.10
✎
22:54
|
Таки и отпускание клавиши тоже надо ловить - если нажатие - это запоминаем флаг, то отпускание - это его сбрасываем.
Ну или накатать OLE-объект, который позволит вызвать GetAsyncKeyState, чтобы узнать, нажат Ctrl или нет. В Dll OLE-объект (Active-X) пишется без проблем даже на голых Сях (я таким методом из VbScript процесс через CreateProcess запускал). |
|||
53
Fynjy
01.12.10
✎
23:03
|
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h" // Handle to the keyboard hook HHOOK hKeyboardHook; //Information storage std::fstream spyFile; // Keyboard hook procedure LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam) { if ((nCode == HC_ACTION) && !(lParam >> 31)) spyFile << " " << wParam; return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);; } // Application entry point BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) KeyboardHook, hModule, 0); if (hKeyboardHook != NULL) spyFile.open(L"C:\\Test.txt", std::ios_base::out | std::ios_base::trunc); break; } case DLL_PROCESS_DETACH: { UnhookWindowsHookEx(hKeyboardHook); spyFile.close(); break; } } return TRUE; } |
|||
54
DES
02.12.10
✎
11:04
|
(52) Действительно, ежели б была
Процедура ПриОтжатииКнопкиКлавиатуры(<?>,,,,,,) было бы все замечательно. (Чисто в космос) |
|||
55
Ёпрст
гуру
02.12.10
✎
11:08
|
(54) ты не поверишь, в формексе этот метод есть.!
|
|||
56
АЛьФ
02.12.10
✎
11:08
|
2(54) Она есть.
|
|||
57
Ёпрст
гуру
02.12.10
✎
11:08
|
как дети прямо..
|
|||
58
DES
02.12.10
✎
11:13
|
(55) ну сорри, значит у меня старый als
|
|||
59
DES
02.12.10
✎
11:16
|
ну тогда такой нету:
Процедура КликМышкиПоКоординатамКнопки(X,Y) КонецПроцедуры можно было бы, как HTML, карту-кнопку изобразить. (Или навесить на одну кнопку кучу функций) |
|||
60
АЛьФ
02.12.10
✎
11:18
|
2(59) Такая делается самостоятельно на раз на основе существующих.
|
|||
61
andrewks
02.12.10
✎
11:19
|
(59) ставь ящик армянского коньяку АЛьФу ;)
|
|||
62
Ёпрст
гуру
02.12.10
✎
11:19
|
(59)Процедура ПриНажатииЛевойКнопки(<Состояние>,<КоординатаПоГоризонтали>,<КоординатаПоВертикали>,<ФСО>) ???
|
|||
63
Ёпрст
гуру
02.12.10
✎
11:21
|
А по-поводу карты-кнопки.. есть активикс для этого, вешай, 3d маджик, к примеру - будет тебе еще хренова туча событий и возможностей..
Всё есть на самом деле. |
|||
64
DES
02.12.10
✎
11:23
|
(61) Фи, он такое Гэ не заслуживает.
Могу, например, молдавского (все хвалят). |
|||
65
Ork
02.12.10
✎
11:24
|
Вообще говоря было немного дико после VFP работать с формами 1С.
Перехвата нажатия клавиш нет, перехвата дубльклика нет, перехвата ресайза нет. Казалось бы простейшие вещи, а на уровне платформы не реализаваны. Хорошо хоть в восьмерке обработчики событий формы добавлены и привязки. И то... А перехват событий клавиатуры и мышки так и не сделан. Вопрос к Волшебнику как к методисту по платформе : это что - религия такая была принята? Или где? |
|||
66
DES
02.12.10
✎
11:26
|
(56) она то есть, но она не глобальная.
А в отчете я не могу перехватить отжатие ;( |
|||
67
АЛьФ
02.12.10
✎
11:27
|
2(66) Все события FormEx проецируются и в глобальник.
|
|||
68
DES
02.12.10
✎
11:27
|
(62) А что за координаты? 0,0 где ?
|
|||
69
АЛьФ
02.12.10
✎
11:28
|
2(65) Да, это такая религия. Т.к. изначально система строилась по принципу, чтобы каждый бухгалтер мог сам себе что-нибудь подправить. И в этот принцип никак не вписывались обработки событий от железа.
|
|||
70
Ёпрст
гуру
02.12.10
✎
11:28
|
(66) бредим ?
Всё там работает и в глобальнике и в локальном контексте. |
|||
71
Ёпрст
гуру
02.12.10
✎
11:29
|
(68) 0,0 чего ? кнопки ?
|
|||
72
DES
02.12.10
✎
11:29
|
(67) Гы, все работает!
Вот же блин. |
|||
73
Ёпрст
гуру
02.12.10
✎
11:30
|
+71 получи атрибут по координатам при нажатии - имей его координаты через методы атрибута формы.
|
|||
74
andrewks
02.12.10
✎
11:31
|
(64) ящик Арарата - это не гэ. если конечно ты его не в московском подвале брать будешь ;) так что ставь - смотри сколько АЛьФ тебя уже пасёт
|
|||
75
DES
02.12.10
✎
11:32
|
Итого, выжимки:
помещаем в глобальник код: Перем Ctrl_key Экспорт; Процедура ПриНажатииКнопкиКлавиатуры(конт, код, _а, _ш, _к) Ctrl_key = _к; КонецПроцедуры Процедура ПриОтжатииКнопкиКлавиатуры(конт, код, _а, _ш, _к) Ctrl_key = _к; КонецПроцедуры и вуаля |
|||
76
DES
02.12.10
✎
11:54
|
(73) могу получить атрибут по координатам.
Не могу получить координаты нажатия относительно системы координат привязанных к кнопке. Т.е. мне нужно различить клик по правой или левой стороне кнопки "Печать". |
|||
77
Mikeware
02.12.10
✎
11:57
|
(76) а силу нажатия - не надо? или пол нажимающего?
|
|||
78
Ёпрст
гуру
02.12.10
✎
11:58
|
(76) нажал на контрол - поимел координаты мыши относительно окна, получил атрибут, получил его координаты относительно окна..
Всё собственно: имея ширину и высоту контрола поимел мышиные координаты относительно самого контрола, тупо от мышиных координат вычитанием координат верхнего левого угла контрола.. |
|||
79
DES
02.12.10
✎
11:59
|
(78) не нашел как "получил его координаты относительно окна.. "
|
|||
80
DES
02.12.10
✎
12:00
|
(77) ты можешь ???
|
|||
81
Ёпрст
гуру
02.12.10
✎
12:07
|
(79)
ПриНажатииЛевойКнопки имеем х,у + ПолучитьАтрибутПоКоординатам имеем сам атрибут + ПолучитьКоординаты имеем х,у,ширину,высоту контрола.. |
|||
82
DES
02.12.10
✎
12:17
|
(81) Запутался в методах... и скис.
|
|||
83
Torquader
02.12.10
✎
17:50
|
(69) Хреновая у них религия.
Вот из-за этого приходится Web-формы рисовать и "осла" к 1С прикручивать. (65) Вы ещё Access вспомните или Excel, где любую функцию из DLL можно смело вызывать и не бояться, что что-то пойдёт не так. Да и OLE-объекты там работают с данными напрямую, а не через "подстановку". |
|||
84
DES
03.12.10
✎
08:48
|
(83) А разницу в НОТ между мелкософтом и сборищем энтузиастов различаете?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |