Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Две проблемы в ActiveX (число прочтений - 9531 )
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Две проблемы в ActiveX
21. Декабря 2007 :: 12:25
Печать  
Здравствуйте.
Версия FormEx = 2.0.5.79
Версия 1С = 7.70.027
Среда разработки объекта ActiveX = MS Visual Studio 2005, вид проекта: MS Visual Basic 2005-Windows Control Library
Сделал собственный элемент управления, который с помощью FormEx вставляю в форму. Осталась пара мелочей, которые уже устал добивать. Итак:
1. Разработанный элемент управления достаточно сложен и состит из большого количества визуализированных объектов, в том числе текстового поля, в которое пользователь вводит текст. При нажатии Enter должен происходить перевод каретки в текстовом поле и, соответственно, удержание фокуса в этом поле. На деле происходит смещение фокуса в форме 1С, так как область, в которую встроен ActiveX воспринимается как единый контейнер. Если я пытаюсь решить эту проблему использованием ПриНажатииКнопкиКлавиатуры() с установкой ФСО=0, то фокус не смещается, но и перевод строки не происходит. Проблема имеется только при использовании 1С, если же объект вставлен в форму, например, того же Access, все работает как положено.
2. В этом же текстовом поле имеется такая проблема. При программной установке текста в поле он отображается без проблем, то есть кириллица - это кириллица. Когда же начинаешь ручной ввод текста в поле, происходит отображение текста в битой кодировке не смотря на то, что свойство GdiCharSet шрифта, сопоставленного полю равно 204, что соответствует RUSSIAN_CHARSET.

В общем, жду ваших советов по тому как разрулить эти проблемы.
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Две проблемы в ActiveX
Ответ #1 - 21. Декабря 2007 :: 13:07
Печать  
Наверное, ActiveX внедряется все же с помощью функционала 1С++, т.к. в FormEx такого функционала нет.
  

FormEx developer
Наверх
www  
IP записан
 
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Re: Две проблемы в ActiveX
Ответ #2 - 24. Декабря 2007 :: 04:38
Печать  
Верно, поэтому извиняюсь за неверное размещение вопроса. Пишу его в другую ветку.
  
Наверх
 
IP записан
 
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Re: Две проблемы в ActiveX
Ответ #3 - 27. Декабря 2007 :: 07:56
Печать  
Сделал тестовый пример не на MS DevStudio 2005, а на стареньком VB 5, проблемы с неверном отображении набираемого текста нет! Специалисты по MS DevStudio, подскажите, где копать? Но проблема с обработкой вставленного в 1С контейнера как единого целого остается. То есть, фокус не перемещается внутри объекта ActiveX, а просто уходит на другие элементы формы 1С
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Две проблемы в ActiveX
Ответ #4 - 27. Декабря 2007 :: 08:32
Печать  
На базе какого атрибута делал ActiveX? Кнопка или статик?
  
Наверх
 
IP записан
 
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Re: Две проблемы в ActiveX
Ответ #5 - 27. Декабря 2007 :: 11:18
Печать  
И так и эдак пробовал. Скачал исходники, увидел там комментирий, что дескать, если ActiveX контейнер вставляем заменяя Кнопку, то в итоге получим объект, на котором фокус будет останавливаться, а если на базе Текста, то нет. Но проблема не в том, что на контейнере фокус не останавливается! Он останавливается на нем! Проблема в том, что внутри контейнера есть куча объектов, по которым фокус должен ходить, но не ходит, то есть, весь контейнер вместе со всем содержимым воспринимается как один объект для перемещения фокуса
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Две проблемы в ActiveX
Ответ #6 - 27. Декабря 2007 :: 11:27
Печать  
А... хмм... вопрос конечно интересный.
На мой взгляд текущее поведение логично. Ты предлагаешь отказаться от родной обработки таба, когда фокус попадает на активикс?
  
Наверх
 
IP записан
 
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Re: Две проблемы в ActiveX
Ответ #7 - 27. Декабря 2007 :: 11:48
Печать  
Ага, я предлагаю продумать возможность реализации такой штуки. Очевидно, что 1С воспринимает контейнер ActiveX как единый объект, поэтому и обрабатывается он сменой фокуса (по Tab и по Enter) как переход фокуса на другой элемент формы 1С. В то же время, если мы сделаем элементарный пример и посмотрим как разработанный нами ActiveX встраивается и обрабатывается не в 1С, а в любой Windows Form, мы видим, что при обходе элементов формы наш ActiveX встроился в порядок обхода вписав туда очередь всех своих элементиков и фокус не выпрыгивает из контейнера при первом же Tab или Enter, а аккуратно перемещается внутри контейнера, пока в нем не закончится очередь обхода, далее переходит на остальные элементы формы.
Если посмотреть внимательно как все сделано в стандартном Windows GUI, то видим, что нажатие Enter - вообще не основание смены фокуса, фокус меняется толко по Tab. В отношении задач 1С - подход понятен. Смена фокуса по Enter идет для удобства оператора, занимающегося вводом сведений с клавиатуры. Но даже в 1С есть объект Текст, для которого возможно установить свойство "Многострочный" и вот тогда нажатие Enter при нахождении в этом поле приводит не к смещению фокуса, а к переводу строки. Вот если бы и для ActiveX можно было бы применить что то подобное, было бы здорово.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Две проблемы в ActiveX
Ответ #8 - 27. Декабря 2007 :: 15:10
Печать  
Thorvardr писал(а) 27. Декабря 2007 :: 11:48:
Очевидно, что 1С воспринимает контейнер ActiveX как единый объект, поэтому и обрабатывается он сменой фокуса (по Tab и по Enter) как переход фокуса на другой элемент формы 1С.

Только Таб. С Энтером все нормально.
  
Наверх
 
IP записан
 
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Re: Две проблемы в ActiveX
Ответ #9 - 28. Декабря 2007 :: 06:14
Печать  
Как это все нормально? Вовсе нет. Я выложу куда нибудь попозже файлики, все кому интересно, посмотрят.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Две проблемы в ActiveX
Ответ #10 - 28. Декабря 2007 :: 09:43
Печать  
Если бы с энтером не было нормально, то ни в одном активиксе не работал выбор через энтер, например в том же ListView.
  
Наверх
 
IP записан
 
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Re: Две проблемы в ActiveX
Ответ #11 - 28. Декабря 2007 :: 12:45
Печать  
Ага, согласен. Поэтому было б здорово если бы была возможность отключать обработку Enter в случае необходимости (для многострочных текстовых полей внутри ActiveX).
Тем кому интересно ссылка на мои проблемки. Объем 85Кб.
http://depositfiles.com/files/2866225
  
Наверх
 
IP записан
 
Thorvardr
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Зарегистрирован: 21. Декабря 2007
Re: Две проблемы в ActiveX
Ответ #12 - 09. Января 2008 :: 07:06
Печать  
Arta писал(а) 28. Декабря 2007 :: 09:43:
Если бы с энтером не было нормально, то ни в одном активиксе не работал выбор через энтер, например в том же ListView.


Я тут подумал. Нет, неверно, скорее всего. Пример - а если в ActiveX 10 штук ListView? Enter фокус сместит и все, работа с ActiveX закончится. Не Enter ловить надо, а событие, которые ActiveX генерирует при выборе в том или ином списке. А стандартнуй 1С-ную отработку нажатия на Enter отключить. Вообще, хотелось бы, чтобы автор этого куска проекта добавил возможность выключать стандартную 1С-ом обработку Enter-а и включать ее. То есть, чтобы контейнер работал и как стандартное 1С-ное Текстовое поле с многострочным вводом (там Enter не выводит фокус) и как любой другой элемент формы 1С (в них фокус смещается.)
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Две проблемы в ActiveX
Ответ #13 - 09. Января 2008 :: 15:58
Печать  
Энтер у тебя висит на Формуле.

Я делаю так:
Код
Выбрать все
Функция СоздатьЭлементУправленияНаФорме(Объект, Атрибут) Экспорт
	_Форма = СоздатьОбъект("Форма");
	Элемент = _Форма.СоздатьЭлементУправленияНаФорме(Конт.Форма, Объект, Атрибут);

	Реквизит = РасширениеФормы.ПолучитьАтрибут(Атрибут);
	Реквизит.Формула = "ъ=ъ";

	Если Конт.Форма.ТолькоПросмотр() = 1 Тогда
		Реквизит.Доступность = 0;
	КонецЕсли;
	Возврат Элемент;
КонецФункции
 



Таким образом энтер перестает вызывать формулу с именем атрибута.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Две проблемы в ActiveX
Ответ #14 - 10. Января 2008 :: 06:34
Печать  
Arta писал(а) 09. Января 2008 :: 15:58:
Таким образом энтер перестает вызывать формулу с именем атрибута.

А я всё думал откуда вызывается несуществующая формула.

А может разработчики сразу сделают так, чтоб не приходилось извращаться таким вот способом?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать