Имя: Пароль:
1C
1C 7.7
v7: 1C++.Трансляция событий от COM-объектов.
0 ADirks
 
22.01.14
13:37
1cpp форум полёг, а похвастаться охота. Напишу тут пока, вдруг пригодится.

Собственно, subj. События транслируются только от тех объектов, которые поддерживают IProvideClassInfo2 (как и в случае с ActiveX).
COM-объект создаём так[code]SvcsvcContainer = СоздатьОбъект("COM_OBject");
SvcsvcContainer.СоздатьОбъект(Сам.ПолучитьБазовыйКласс("Форма.ПолеВыбораЗначения"), "FilterValue", "Svcsvc.Service");
Svcsvc = SvcsvcContainer.Объект;
[/code]После чего события будут транслироваться в соотв. процедуры
FilterValue_OnChangeFilter(НовыйФильтр, НовыйСостав)
FilterValue_OnItemSelect(стр, НовыйСостав)
FilterValue_OnTimer(идТаймер)

Собственно, FilterValue+Форма.ПолеВыбораЗначения - основное, для чего всё затеяно. Пока.
В svcsvc добавлены вышеперечисленные события, и методы таймера
CreateTimer([in] LONG nInterval, [in] LONG nTimerID);
StopTimer([in] LONG nTimerID);
CreateSingleTimer([in] LONG nInterval, [in] LONG nTimerID); //Одноразовый Таймер
Так что теперь мы имеем человеческую возможность создания таймера внутри класса. Таймер же нужен для простой вещи: показать реакцию на ввод пользователя в поле выбора по таймауту, а не по количеству символов.

В архиве бинарники, добавленные исходники для 1С++, полные исходники svcsvc, примеры использования.


http://rusfolder.com/39575096
1 Ёпрст
 
22.01.14
13:46
(0) а когда починят, не в курсе ?
вчера на нехватку памяти жаловался и усё.. скончался
:(
2 Ёпрст
 
22.01.14
13:47
(0) Это для удлбства со ШК ловить события ?..
3 ADirks
 
22.01.14
13:51
(1) хорошо, если вообще починят  :~(
(2) Если есть соотв. COM-сервер, то можно и ШК. Меня в первую очередь именно хитрое поле ввода интересовало.
4 Дык ё
 
22.01.14
13:53
(3) а чем вк eventproxy от steban не устроила?
5 ADirks
 
22.01.14
13:56
(4) не помню уже, что-то не получалось
6 Ёпрст
 
22.01.14
13:57
(3) а подробнее про хитрое поле и мини пример ?
если есть, конечно
7 Mikeware
 
22.01.14
14:00
(6) Класс у них такой есть. Я приводил примеры неоднократно
8 ADirks
 
22.01.14
14:02
(6) схематично так:


Процедура FilterValue_OnTimer(идТаймер) Экспорт
    ПоказатьСписокЭлементов();
КонецПроцедуры

Функция ПриОтжатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Ctrl, Символ, ФСО) Экспорт
    Если ЭтоБуква(Символ) = 0 Тогда
        Если КодКлавиши = VK_BACKSPACE Тогда
            стрПрефиксНаименования = Лев(стрПрефиксНаименования, СтрДлина(стрПрефиксНаименования) - 1);
        Иначе
            стрПрефиксНаименования = стрПрефиксНаименования + Символ;
        КонецЕсли;
        Svcsvc.CreateSingleTimer(Таймаут, 117);
    КонецЕсли;
    Возврат 0;
КонецФункции


в ПоказатьСписокЭлементов() может выполняеться весьма тяжелый запрос, так что на каждое нажатие не канает.
9 ADirks
 
22.01.14
14:05
(4) вспомнил, чего не получалось: чтобы обработчик события мог быть классом.
10 КонецЦикла
 
22.01.14
14:05
Круто, испробуем на ком-нибудь надеюсь.
1спп, будем надеяться, починят.
11 varelchik
 
22.01.14
14:13
Ёпрст раз уже 1сpp лежит, мож ты в курсе кто форум админит.
Бо у меня на майл.ру ящик хто ломанул.
Может ты поможешь сбросить мой ящик у логина varelchik c
[email protected] на [email protected].
А то не хочется регистрироваться заново.
12 Ёпрст
 
22.01.14
14:20
(11) не, я не в теме..
Раньще fez был, кто сейчас - не в курсе.
13 Ёпрст
 
22.01.14
14:22
(7) да это то есть у меня, не ясно было просто, зачем таймер сделан.
(8) ага, ясно..
14 varelchik
 
22.01.14
14:27
(12) А хто тоди сайт поднимает?
15 Ёпрст
 
22.01.14
14:28
(14) без идей
:)
16 varelchik
 
22.01.14
14:29
(15) Жаль.
17 ADirks
 
22.01.14
14:34
(13) а OnChangeFilter() не оценил? :)
моск же всем выносит, особенно поначалу, когда написал "666", стёр, написал "777" - а в списке нет ничего.
18 Ёпрст
 
22.01.14
14:43
(17) ага, зачетно