Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Активизация многострочного поля ввода с позиционированием курсора (число прочтений - 10171 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Активизация многострочного поля ввода с позиционированием курсора
03. Октября 2011 :: 08:08
Печать  
Есть проблема, которую даже сформулировать толком не знаю как...

Короче, в базе есть система сообщений, которая активно используется (обработка ожидания раз в пару минут проверяет наличие новых сообщений и открывает формы новых сообщений).
Сначала юзеры жаловались, что очень неудобно, когда работаешь с каким-то документом - а тебе вывалило штук 5 сообщений и потом приходится искать на панели форм форму документа.
Ну, покурил хелп - нашел "АктивныйКонтекст", сделал так, чтоб после открытия форм сообщений открывалсь та форма, с которой они работали.

Все хорошо, за исключением одного момента:
в паре документов используется многострочное текстовое поле - причем, там это основной реквизит (90% смысла документа в этом тексте). И когда открываются сообщения, а затем активизируется этот документ - весь текст в многострочном поле ввода становится выделенным.
А поскольку рядовые юзеры не обладают навыками слепой печати на клавиатуре - они как-правило, не замечают и продолжают печатать, убивая введенный ранее текст.
Я, конечно, показал им Ктрл+Зед, но это лишь припарка мертвому.

Что хочется:
1) идеальный вариант: научиться открывать формы сообщений вообще в фоне (чтоб фокус вообще никуда не переходил).
2) приемлимый вариант: при активизации формы этих проблемных документов сделать так, чтоб выделение снималось и курсор ставился в конец текста
3) <свой вариант>
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #1 - 03. Октября 2011 :: 09:17
Печать  
Смежный вопрос - возникают ли какие-нить события у формы, когда она получает фокус?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #2 - 03. Октября 2011 :: 14:35
Печать  
мот тебе что-нить в этом духе сделать?
http://www.1cpp.ru/forum/YaBB.pl?num=1259749729/7#7

ну или пни chessman-а, пусть слепит пример открытия сторонней формы (не 1с).. в фоне
Улыбка
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #3 - 04. Октября 2011 :: 03:45
Печать  
Eprst писал(а) 03. Октября 2011 :: 14:35:
мот тебе что-нить в этом духе сделать?
http://www.1cpp.ru/forum/YaBB.pl?num=1259749729/7#7


Разве что, делать красный тултип, мол "есть новые сообщения"...
+ я так подозреваю, эти тултипы не могут оставаться в фоне до тех пор, пока по ним не щелкнешь мышкой
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #4 - 04. Октября 2011 :: 05:20
Печать  
Именно. Но можно и на заднем фоне открыть, по-идее.
  
Наверх
 
IP записан
 
mszsuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 18. Октября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #5 - 04. Октября 2011 :: 07:58
Печать  
Может MiracleV8 подойдет? http://dev.1tsm.ru/project/110
Там много возможностей всяких. Пример во вложении.
Фокус не сбивает.
  

11111_001.ert ( 8 KB | Загрузки )
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #6 - 04. Октября 2011 :: 10:46
Печать  
mszsuz писал(а) 04. Октября 2011 :: 07:58:
Может MiracleV8 подойдет? http://dev.1tsm.ru/project/110
Там много возможностей всяких. Пример во вложении.
Фокус не сбивает.


Поковыряюсь
  
Наверх
 
IP записан
 
Ковалев Андрей
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 36
Зарегистрирован: 03. Февраля 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #7 - 11. Октября 2011 :: 14:30
Печать  
Satans Claws писал(а) 03. Октября 2011 :: 08:08:
Что хочется:
1) идеальный вариант: научиться открывать формы сообщений вообще в фоне (чтоб фокус вообще никуда не переходил).
2) приемлимый вариант: при активизации формы этих проблемных документов сделать так, чтоб выделение снималось и курсор ставился в конец текста


по п1: я делал через плавающие формы, там фокус не сбивается, курсор остается на месте

по п2: а вот здесь та же самая засада и у меня
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #8 - 11. Октября 2011 :: 15:52
Печать  
По п.2: после активизации текстового поля посылать комбинацию Ctrl+End

Код
Выбрать все
WSH=СоздатьОбъект("WScript.Shell");
WSH.SendKeys("^{END}"); 


  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #9 - 12. Октября 2011 :: 06:07
Печать  
Как отследить активизацию текстового поля?

Кроме как по событиям нажатия кнопки мыши/клавиатуры, следя за активным элементом формы?
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #10 - 13. Октября 2011 :: 05:27
Печать  
Satans Claws писал(а) 12. Октября 2011 :: 06:07:
Как отследить активизацию текстового поля?

Кроме как по событиям нажатия кнопки мыши/клавиатуры, следя за активным элементом формы?


Можно еще перехватить процедуру окна.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #11 - 13. Октября 2011 :: 10:04
Печать  
chessman, нет ли у тебя поделок, с открытием стороннего окошка (не 1с-ины) , в котором бы еще и события ловились, или кнопки были бы ? Чтоб можно было свой "чат" прилепить.... как например, в твоём тултипе ?
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #12 - 14. Октября 2011 :: 05:37
Печать  
Нет, ничего больше не делал в этом направлении.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #13 - 14. Октября 2011 :: 10:56
Печать  
chessman писал(а) 13. Октября 2011 :: 05:27:
Можно еще перехватить процедуру окна.


ээээ *туплю*

Читать как "перехватить процедуру обновления окна"?
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #14 - 15. Октября 2011 :: 08:01
Печать  
Satans Claws писал(а) 14. Октября 2011 :: 10:56:
Читать как "перехватить процедуру обновления окна"?


Просто процедура окна.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #15 - 17. Октября 2011 :: 01:13
Печать  
Satans Claws писал(а) 14. Октября 2011 :: 10:56:
chessman писал(а) 13. Октября 2011 :: 05:27:
Можно еще перехватить процедуру окна.
ээээ *туплю*
Читать как "перехватить процедуру обновления окна"?
Подчеркни, что между звездами.
В винде все окна имеют процедуру-вертушку, обрабатывающую сообщения и реагирующую на них... это основной принцип оконного интерфейса винды...
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #16 - 17. Октября 2011 :: 09:30
Печать  
Мини-пример перехвата сообщений Windows.
EDIT_CONTROL больше не выделяется, при получении фокуса.
В мсдн написано, еще что-то про стиль контрола. Возможно, если его поменять, тогда и перехват не потребуется.
  

ED_CTRL.ert ( 8 KB | Загрузки )
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #17 - 18. Октября 2011 :: 03:49
Печать  
О, спасибо, попробую.
Щас разгребусь с очередным завалом и уделю время программингу "для души" Улыбка
  
Наверх
 
IP записан
 
mszsuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 18. Октября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #18 - 18. Октября 2011 :: 06:56
Печать  
chessman писал(а) 17. Октября 2011 :: 09:30:
Мини-пример перехвата сообщений Windows.
EDIT_CONTROL больше не выделяется, при получении фокуса.
В мсдн написано, еще что-то про стиль контрола. Возможно, если его поменять, тогда и перехват не потребуется.

Отлично работает! А как добавить ещё один контрол этой формы?
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #19 - 18. Октября 2011 :: 07:03
Печать  
Их иожно привязать к одной процедуре из скрипта(сделать по аналогии), т.к. родная процедура у них одна, так что все должно работать.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #20 - 03. Ноября 2011 :: 09:00
Печать  
Бгг
выкроил время "для души" - удалось обойтись почти штатными методами.

Код
Выбрать все
ТипРеквизитаДиалога = 0;
РеквизитДиалога = "";
фНужноРеАктивизироватьТекущуюФорму = 0;
Конт = "";
Сервис = СоздатьОбъект("Сервис");
Если Сервис.АктивныйКонтекст(Конт) <> 1 Тогда
	фНужноРеАктивизироватьТекущуюФорму = -1;
ИначеЕсли ТипЗначенияСтр(Конт) <> "Таблица" Тогда
	оФорма = СоздатьОбъект("РасширениеФормы");
	оФорма.УстановитьФорму(Конт.Форма);

	РеквизитДиалога		= Конт.Форма.АктивныйЭлемент();
	ТипРеквизитаДиалога	= оФорма.ПолучитьАтрибут(РеквизитДиалога).Тип;
КонецЕсли;
 



ну а потом

Код
Выбрать все
Если фНужноРеАктивизироватьТекущуюФорму > 0 Тогда
	Попытка
		Если ТипЗначенияСтр(Конт) = "Таблица" Тогда
			Конт.Показать(,, 1);
		Иначе
			Конт.Активизировать(РеквизитДиалога);
			Если ТипРеквизитаДиалога = 2 Тогда
				Сервис.ЭмулироватьКлавиатуру("^{END}");
			КонецЕсли;
		КонецЕсли;
	Исключение
	КонецПопытки;
КонецЕсли;
 



Попытно выяснив один эффект, способный взорвать мозг при попытке его анализа:

Если в конце делать не Конт.Активизировать(РеквизитДиалога);
а просто Конт.Активизировать(); - то в некоторых случаях активный элемент сохраняется, а в некоторых - не сохраняется (активным становится самый левый-верхний элемент).
По первичным наблюдениям - НЕ сохраняется для форм отчетов/обработок и форм журналов документов.
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 807
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: Активизация многострочного поля ввода с позиционированием курсора
Ответ #21 - 30. Марта 2022 :: 14:52
Печать  
Забавно. Сейчас опять столкнулся с этой проблемой - выделения текста в многострочном поле.
Многострочное поле во внешнем отчете. Сделал для него отдельную закладку и слой. На слое поле одно.

Так вот я чего-то решил добавить еще какой-то элемент формы - в частности это получилось с кнопкой - и в обходе реквизитов поставил кнопку выше этого многострочного поля. После этого при переходе на закладку - текст уже не выделяется.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать