Имя: Пароль:
1C
 
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
Спасибо, собеседники!
Независимо от того, куда вы едете — это в гору и против ветра!