Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Сервис.SendKeys() не подведет с ТП::EditValue() ? (число прочтений - 3108 )
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Сервис.SendKeys() не подведет с ТП::EditValue() ?
08. Мая 2008 :: 17:29
Печать  
Собираюсь заменить ТаблицуВрежимеВводаДанных на ТП_с_Редактированием (icpp)
С особым упором на фичу ТвРВД "начало редактирования ячейки по нажатию любой символьной клавиши" (интересуют только цифры).
Соответственно этому требованию, запускаю редактирование так:
Код
Выбрать все
Процедура ПриНажатииКнопкиКлавиатуры( код, альт, шифт, цтрл, символ, ФСО )
	Если ( форма.АктивныйЭлемент() = "тпТаблЧасть" ) Тогда
		Если ( УжеРедактируем <> 1 ) и ( символ >= "0" ) и ( символ <= "9" ) Тогда
			УжеРедактируем = 1;
			значение = Число(символ);
			тп.РедактироватьЗначение( тп.ТекущаяСтрока, тп.ТекущаяКолонка, 3, значение, 10, 2, , );
			// чтобы не терялся этот первый символ - двинем курсор :
			Сервис.ЭмулироватьКлавиатуру("{LEFT}{LEFT}{LEFT}"); // запятая и два знака
			//Сервис.ЭмулироватьКлавиатуру("{RIGHT}"); // целое число
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
 



Операторы колотят цифирь с бешеной скоростью.
Все сидят в терминале.

Эмулятор клавиатуры в данном случае - нормальное решение? Не будет запинаться под нагрузкой?

Если такое решение - кривой костыль, то тогда хотелка: чтобы ТП::РедактироватьЗначение(...) можно было заставить начать редактирование без выделения всего значения в поле, а ставить курсор в разумное место (в конец строки или слева от десятичной точки)
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервис.SendKeys() не подведет с ТП::EditValue(
Ответ #1 - 10. Мая 2008 :: 07:25
Печать  
Думал, думал - ничего не придумал.

Подведет или не подведет SendKeys:
- х.з.

Про возможность ставить курсор в заданную позицию:
- там используется стандартный контрол 1С, так что если кто-то сделает такой сервис для стандартного контрола - значит будет работать.
Но у меня таких планов нет.

Кроме того, чтобы совсем добить, еще раз напоминаю, что интерфейс метода РедактироватьЗначение() будет изменен.
Такие планы есть.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Сервис.SendKeys() не подведет с ТП::EditValue(
Ответ #2 - 10. Мая 2008 :: 15:57
Печать  
kms писал(а) 10. Мая 2008 :: 07:25:
Думал, думал - ничего не придумал.

Подведет или не подведет SendKeys:
- х.з.

Про возможность ставить курсор в заданную позицию:
- там используется стандартный контрол 1С, так что если кто-то сделает такой сервис для стандартного контрола - значит будет работать.
Но у меня таких планов нет.

Кроме того, чтобы совсем добить, еще раз напоминаю, что интерфейс метода РедактироватьЗначение() будет изменен.
Такие планы есть.


С учетом, что SendKeys из FormEx'a, про него вопрос был скорее на авось... По остальному - всё понятно, умениями в с++ не обладаю, по сему - использую то, что есть. Будет проверка боем, ибо отступать некуда, и ТвРВД должна уйти.

Смена интерфейса меня не напряжет - решение ни чуточки не серийное, приспичит - переделаю.

Спасибо за ответУлыбка
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Сервис.SendKeys() не подведет с ТП::EditValue() ?
Ответ #3 - 15. Апреля 2010 :: 09:24
Печать  
Прошло два года.
Документ давно переведен на рельсы ТП.

Всё хорошо работало через Сервис.ЭмулироватьКлавиатуру(...), однако таки был один неприятный момент:

Цитата:
У одного терминального пользователя, частенько, эти кнопочки перепутывались, как будто юзер слишком быстро физически нажимает кнопки. Эмуляция срабатывала после всех нажатых кнопок, хотя мне нужно - сразу после первой


Решался этот момент просто - операторы нафиг зашли под другим логином на сервер (то есть виндовый профиль другой...), и забыли. И мне не сказали (виндовая авторизация - не в моей власти, рулят как хотят).

Сейчас стряслось: Скушал ту винду вирус, форматнули винт, переставили ТермСервер2003, завели юзеров.... И теперь эта болячка у всех 100% операторов.

Поменял компоненты,
было FormEx 2.0.5.92,  icpp 3.0.1.18
стало FormEx 2.0.5.99,  icpp 3.0.1.27
вроде сказали, что чуть-чуть помогло, но не принципиально, всё равно проскакивает.

Проверил все настройки, даже поотключал - не помогло.

Код
Выбрать все
// FormEx
серв = СоздатьОбъект( "Сервис" );
серв.ПерехватКлавиатуры();
серв.ПерехватМыши();
серв.ПерехватОтрисовкиСписков();
серв.ИспользоватьПланРаскраски();
// icpp
унас = СоздатьОбъект("УправлениеНастройками");
унас.Получить("Проверка типов");
унас.Получить("Оптимизация");
унас.Получить("Отладка");
унас.Получить("Таблица.ИсходнаяТаблица");
унас.Получить("TurboBL");
унас.Получить("ПерехватитьСобытияГК");
// Это не программный код,
// это просто список настроек,
// которые я пошевелил, в поисках виновного 



Ни чего не забыл?

Что делать?

И, на всяк случай повторю старый вопрос к Михаилу и Артуру:

может можно добавить к ТП.РедактироватьЗначение(...) параметр, который бы создавал контрол и включал в нем редактирование без начального выделения всего содержимого в "синий блок", а устанавливал курсор в указанную мной позицию?
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Сервис.SendKeys() не подведет с ТП::EditValue() ?
Ответ #4 - 15. Апреля 2010 :: 10:04
Печать  
по -поводу сендкея - ставь "защиту от Альфа", чтоб не циклилось нажатие клавишь

по поводу перехода на новый релиз 1срр, почитай багтрекер:
http://www.1cpp.ru/bugs/show_bug.cgi?id=4427

И еще, РВД можно заменить элементом управления Йоксель - всё красивенько и всё редактируется..

  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Сервис.SendKeys() не подведет с ТП::EditValue() ?
Ответ #5 - 15. Апреля 2010 :: 11:27
Печать  
Защита от Альфа у меня вот:
     Если ( УжеРедактируем <> 1 ) ....

Переход на релиз... ТурбоБЛ работает, остальное вроде тоже. Да и не в релизе дело. Я может невнятно написал - у меня все работало на связке 3.0.1.18/2.0.5.92, и на ней же начало запинаться. После этого, в надежде на спасение, я компоненты обновил, но дефект остался.

По поводу Йокселя - вот это тема, переделать с ТП на ТабличныйДокумент (РВД у меня два года как отправлена на свалку, с тех пор форма доработана, взять за основу старую с РВД не выйдет).
Я правильно понимаю, что в Йокселе не нужно нажимать Энтер, чтобы начать редактировать ячейку?
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Сервис.SendKeys() не подведет с ТП::EditValue() ?
Ответ #6 - 15. Апреля 2010 :: 13:00
Печать  
угу, не надо. Впрочем, как и в обычном мокселе..
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать