![]() |
![]() |
![]() |
|
v8: 1С8.1 Имитация нажатия клавиши | ☑ | ||
---|---|---|---|---|
0
REM
03.09.09
✎
11:25
|
Пользователь
Группа: Пользователи Сообщений: 52 Регистрация: 21-February 04 Пользователь №: 1290 Добрый День! Пожалуйста подскажите: Что надо добавить в процедуру, чтобы при каждом нажатии "Кнопки2" курсор переходил влево на один символ. Shell = Новый COMОбъект("WScript.Shell"); Процедура Кнопка2Нажатие(Элемент) Если ЭтаФорма.ТекущийЭлемент<>ЭлементыФормы.ппВвод Тогда ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ппВвод; Shell.SendKeys("{RIGHT}"); КонецЕсли; Shell.SendKeys("{LEFT}"); КонецПроцедуры |
|||
1
REM
03.09.09
✎
11:30
|
Тема 1С8 Пожалуйста, поправьте.
|
|||
2
Sadovnikov
03.09.09
✎
11:32
|
(0) Если подумать, то станет понятно, что при нажатии кнопки фокус ввода пересестится из текстового поля на кнопку.
|
|||
3
REM
03.09.09
✎
11:37
|
(2)
Если ЭтаФорма.ТекущийЭлемент<>ЭлементыФормы.ппВвод Тогда ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ппВвод; Shell.SendKeys("{RIGHT}"); КонецЕсли; Вернулся фокус в полеВвода. Shell.SendKeys("{RIGHT}"); - что с ним, что без него - разницы никакой, все равно смещается только на 1 символ... |
|||
4
Sadovnikov
03.09.09
✎
11:43
|
(3) Правильно. Ведь вернулся он в начало поля, не так ли?
|
|||
5
Mitriy
03.09.09
✎
11:44
|
(4) телепат?
|
|||
6
Sadovnikov
03.09.09
✎
11:45
|
(5) Не... Только учусь. Вот, нашел шикарное место для тренировок.
|
|||
7
REM
03.09.09
✎
11:47
|
(4,6) Понял.
А как можно сделать? |
|||
8
Sadovnikov
03.09.09
✎
11:48
|
(7) При потере фокуса запоминать положение курсора. А зачем вообще всё это нужно?
|
|||
9
Serg_1960
03.09.09
✎
11:50
|
(0) А Вам это зачем надо? Меня со времен ухода из-под DOS-а перестала волновать такая мелочь как позиция курсора...
|
|||
10
Serg_1960
03.09.09
✎
11:53
|
(8) Эээ... при потере фокуса уже поздно запоминать положение курсора - он тоже уже потерян.
|
|||
11
Sadovnikov
03.09.09
✎
11:54
|
(10) Я имел ввиду, перед потерей фокуса, конечно же. Просто вот так криво выразился :)
|
|||
12
REM
03.09.09
✎
11:59
|
(10) КАК?
|
|||
13
Sadovnikov
03.09.09
✎
12:00
|
(12) Сначала скажи - зачем?
|
|||
14
REM
03.09.09
✎
12:02
|
Инет подглючил...
(13) Кусок экранной клавиатуры рисую |
|||
15
Sadovnikov
03.09.09
✎
12:15
|
(14) Офигеть... Я правильно понял - для тыканья в него пальцАми?
Не пробовал, но ОкончаниеВводаТекста не подойдет ли? |
|||
16
REM
03.09.09
✎
12:26
|
(14) Ну типа да.
ОкончаниеВводаТекста не подойдет ли? - и куда его прикрутить? фактически это "Enter" |
|||
17
Sadovnikov
03.09.09
✎
12:31
|
Стоп. А ввод текста куда производится? Точнее, может ли пользователь кнуть в то поле пальцем и изменить положение курсора? Или все это только с "клавиатуры" делаться может?
|
|||
18
REM
03.09.09
✎
12:36
|
(17) только с "клавиатуры" делаться может - Да, только так
|
|||
19
Sadovnikov
03.09.09
✎
12:52
|
(18) Так тогда все просто - заведи переменную ПозицияКурсора и сам ее считай при нажатии на соответствующие кнопки.
|
|||
20
REM
03.09.09
✎
12:56
|
ПозицияКурсора и сам ее считай - КАК?
|
|||
21
REM
03.09.09
✎
13:06
|
(19) ???????
|
|||
22
Sadovnikov
03.09.09
✎
13:08
|
(20) Ну ты же сам рулишь положением курсора. Добавл буковку - прибавил к ней 1. Сдвинул курсор влево - отнял 1.
|
|||
23
REM
03.09.09
✎
13:15
|
(22)
Да теоретически все понятно Практически как запомнить позицию курсора??? |
|||
24
REM
03.09.09
✎
13:18
|
Ну типа
МояПозиция = ??? |
|||
25
Sadovnikov
03.09.09
✎
13:18
|
(23) Не понял... ПозицияКурсора = ПозицияКурсора + 1 при сдвиге курсора вправо. ПозицияКурсора = ПозицияКурсора - 1 при сдвиге курсора влево.
|
|||
26
REM
03.09.09
✎
13:24
|
ПозицияКурсора - это Что? Как? 1с таких слов не понимает... Или я не прав?
|
|||
27
REM
03.09.09
✎
13:26
|
В переменную "ПозицияКурсора" что надо записать???
|
|||
28
Sadovnikov
03.09.09
✎
13:29
|
Чё-то мы как слепой с глухил говорим :)
Открылась твоя форма. В тексте пусто. ПозицияКурсора = 0; Нажали буковку. В тексте появился один символ. Тоесть, курсор сменил позицию на единичку: ПозицияКурсора = ПозицияКурсора +1; Где ПозицияКурсора - твоя переменная, глобальная в пределах модуля. |
|||
29
REM
03.09.09
✎
13:39
|
Блин, заморочился, ....
Как сейчас: ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ппВвод; Shell.SendKeys("{RIGHT}"); ставим курсор справа от последнего символа А как сделать что бы после ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ппВвод; курсор стал на ранее запомненную позицию ПозицияКурсора ??? |
|||
30
REM
03.09.09
✎
13:41
|
Имитация - Набирали слово "Миста" пропустили букву "т" хотим вернуться и вставить
|
|||
31
REM
03.09.09
✎
13:47
|
???
|
|||
32
Aprobator
03.09.09
✎
13:50
|
Речь о чем? О поле ТекстовогоДокумента что ли?
|
|||
33
Aprobator
03.09.09
✎
13:55
|
+(32) тип как нарисовать клаву чтоб в нем курсор правильно бегал?
|
|||
34
REM
03.09.09
✎
13:56
|
(33) Именно так!!!
|
|||
35
REM
03.09.09
✎
14:12
|
(33)???
|
|||
36
Aprobator
03.09.09
✎
14:43
|
(35) не рисовал ))). А попробовать счас не на чем.
|
|||
37
Sadovnikov
03.09.09
✎
14:45
|
Я уже не знаю, как еще по другому объяснить...
|
|||
38
Aprobator
03.09.09
✎
14:48
|
(38) вся трабла в том, как вообще получить текущую позицию курсора в поле текстового документа? Как ее запомнить это уже дело десятое.
|
|||
39
Aprobator
03.09.09
✎
14:49
|
+(38) если все с пустого поля начиналось, то да - можно присобачить счетчик, а если нет?
|
|||
40
Sadovnikov
03.09.09
✎
14:51
|
(38) Да зачем ее получать, если на положение курсора может повлиять только на жати на кнопки, которые положил на форму автор? Рассчитать это положение при нажатии кнопки (та самая единичка в плюс или минус) да и всё.
|
|||
41
Aprobator
03.09.09
✎
14:54
|
(40) а в момент нажатия кнопки курсор свою позицию в поле сохраняет?
|
|||
42
Aprobator
03.09.09
✎
14:55
|
Жалко счас поковырять это не на чем.
|
|||
43
Sadovnikov
03.09.09
✎
14:57
|
(41) Неа, не сохраняет. Да и зачем?
|
|||
44
Scooter
03.09.09
✎
14:57
|
(0)попробуй попользовать табличный документ
|
|||
45
REM
03.09.09
✎
15:06
|
(43)
ррВВода - поле ввода на форме ПК - позиция курсопа ПК = 0 Вводим "М" ПК=1 Вводим"и" Пк =2 Вводим "т" ПК=3 Вводим"а" Пк =4 Получилось "МИта" вместо "Миста" Жмем "Влево" Курсор уходит на "Влево" ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ппВвод; КАК вернуть кусор на позицию "ПК" Точнее при первом нажатии он сам туда вернетсч, А ПРИ ВТОРОМ, ТРЕТЬЕМ....??? |
|||
46
Sadovnikov
03.09.09
✎
15:10
|
(45) Стоп!!! Курсор какой жмем? Я же очень давно спросл, а ты подтвердил, что состояние поля ввода (в том числе и положение курсора в нем) может изменяться только с "клавиатуры". Тоесть той формы, которую ты даешь пользователю?
|
|||
47
Aprobator
03.09.09
✎
15:13
|
(46) ага активировать поле ввода можно мышой )))), причем в произвольном месте.
|
|||
48
Sadovnikov
03.09.09
✎
15:14
|
(47) А я специально про это спросил давным давно. Так как, например, поле ввода можно сделать недоступным. Или вообще положить не поле ввода, а текст, который Label. Я же не знаю, как там у автора сделано...
|
|||
49
REM
03.09.09
✎
15:15
|
Курсор какой жмем? -???
Форма. поле ввола - ппВвод Кнопки "М" "И" "С" "Т" "А" Кнопка "Влево" жмем "М" ставим курсор в ппВвола -появилась "М" и т.д. (47) НЕТ НЕЛЬЗЯ!!! Мышь повесилалась... |
|||
50
Sadovnikov
03.09.09
✎
15:15
|
(49) "Кнопка "Влево""
ПК = ПК-1; Ы? |
|||
51
Aprobator
03.09.09
✎
15:16
|
(49) так поле ввода со строкой или поле текстового документа с текстом?
|
|||
52
REM
03.09.09
✎
15:19
|
(51) поле ввода со строкой
(50) ПК = ПК-1; ну а как курсор поставить в позу "ПК = ПК-1" Кнопка "Влево"" ПК = ПК-1; курср то уйдет на кнопку "Влево" при втором нажатии |
|||
53
Sadovnikov
03.09.09
✎
15:19
|
(52) Почему при втором?
|
|||
54
Sadovnikov
03.09.09
✎
15:21
|
(52) "ну а как курсор поставить в позу "ПК = ПК-1" " - понял...
Спозиционироваться на поле ввода и ПК-1 раз послать нажатие кнопки "Вправо" |
|||
55
REM
03.09.09
✎
15:21
|
(53)! мне надо сместиться на 2 знака влево чтобы вставить пропущенную букву!
|
|||
56
Aprobator
03.09.09
✎
15:21
|
(54) вот е мое не успел набрать ))))
|
|||
57
Aprobator
03.09.09
✎
15:22
|
(55) ну это немного тяжелее ))).
|
|||
58
REM
03.09.09
✎
15:23
|
Звучит обнадеживающе...
|
|||
59
Aprobator
03.09.09
✎
15:24
|
а в чем сложность? Одно нажатие кнопки - одно событие. Нажал 1 раз влево - сместился на одну позицию, изменили счетчик. Ну и т.д.
|
|||
60
REM
03.09.09
✎
15:27
|
Ну счетчики, переменные эьо все хорошо!
А вот как курсор сместить? (4) (3) Правильно. Ведь вернулся он в начало поля, не так ли? |
|||
61
Aprobator
03.09.09
✎
15:27
|
я бы делал так - при нажатии клавиши активируем поле ввода (при условии что при активации курсор всегда в начале) и посылаем НАЖАТИЕ ВПРАВО по значению счетчика. Затем выполняем действие - то бишь перемещение курсора и изменяем значение счетчика. Ну и т.д.. Вроде ничего сложного нет.
|
|||
62
REM
03.09.09
✎
15:29
|
Ну была у меня подобная мысль, только как то кривовато это
|
|||
63
Sadovnikov
03.09.09
✎
15:31
|
(62) Но ты же не Войну и Мир собрался в этом поле ввода писать? Метания курсора никто и увидеть не успеет.
|
|||
64
Aprobator
03.09.09
✎
15:33
|
(63) а вдруг на камеру снимут? А потом все это в замедленном режиме прокрутят?
|
|||
65
Sadovnikov
03.09.09
✎
15:37
|
(64) А ну да... Не подумал...
Во! Тогда еще между скачками курсора кидать в поле ввода текст: "Пошли в опу со своей камерой!". Пусть любуются :) |
|||
66
REM
03.09.09
✎
15:38
|
(63) ну это то конечно так
Вопрос еще и в том как эти переменные очистить... |
|||
67
Sadovnikov
03.09.09
✎
15:38
|
966) Подсказываю:
ПК = 0; |
|||
68
REM
03.09.09
✎
15:43
|
(67) Спасибо за подсказку....
Только ПК = 0; перед первым нажатием Процедура Левак() ПК = 0; активизируем, смешаемся Пк - ПК-1; Финиш. И процедура повторяется Н раз... ??? |
|||
69
Sadovnikov
03.09.09
✎
15:45
|
(68) Что-то я чуствую, что смешались в кучу кони, люди...
|
|||
70
Sadovnikov
03.09.09
✎
15:54
|
Эх... Заставил эту долбанную восьмерку открывать...
Вот: Перем ПозицияКурсора, Shell; Процедура кнБукваНажатие(Элемент) _Текст = _Текст + "Ы"; ПозицияКурсора = ПозицияКурсора + 1; КонецПроцедуры Процедура кнЛевоНажатие(Элемент) ЭтаФорма.ТекущийЭлемент = ЭлементыФормы._Текст; ПозицияКурсора = ПозицияКурсора - 1; Shell.SendKeys("{LEFT}"); Для Н = 1 По ПозицияКурсора Цикл Shell.SendKeys("{RIGHT}"); КонецЦикла; КонецПроцедуры ПозицияКурсора = 0; Shell = Новый COMОбъект("WScript.Shell"); |
|||
71
REM
03.09.09
✎
16:16
|
(70)
Ну а теперь усложни немного ситуацию Мы вводили "Миста" Твой код отработал нормально А теперт продолжаем вводить "Миста форум" Попробуй! Вот и засада с очисткой переменных. Кнопка с интелектом нужна!... |
|||
72
REM
03.09.09
✎
16:54
|
Рецепт Не найден...
|
|||
73
Sadovnikov
03.09.09
✎
16:54
|
(71) И в чем именно проблема? Плюс, я тебе показал идею. Развивай.
|
|||
74
REM
03.09.09
✎
16:55
|
Спасибо, собеседники!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |