Редактирование свойств ActiveX на этапе разработки

Обсуждение SCADA-системы Wonderware: InTouch ME, InTouch Edge HMI, InTouch, InTouch OMI и System Platform
Northwind
Сообщений в теме: 4
Сообщения: 4
Зарегистрирован: 17 дек 2013, 05:03

Редактирование свойств ActiveX на этапе разработки

#1

Сообщение Northwind » 17 дек 2013, 05:17

Здравствуйте. Создал свой визуальный компонент (телеизмерение), который может менять свой внешний вид(цветовая схема) в зависимости от значения свойства. Внешний вид необходимо выбрать на этапе создания мнемосхемы. Во вкладке "Properties" свойство видно, но оно недоступно для изменения... можно только присвоить тег. Во время выполнения, в скрипте спокойно можно изменять свойства.
Можно ли во время разработки в WindowMaker менять значения свойств ActiveX? Или, как альтернатива, использовать разные конструкторы при добавлении своего контрола?



Аватара пользователя
alex
Администратор
Сообщений в теме: 4
Сообщения: 1757
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 47 раз
Поблагодарили: 104 раза
Контактная информация:

Re: Редактирование свойств ActiveX на этапе разработки

#2

Сообщение alex » 17 дек 2013, 09:40

Для того чтобы свойства можно было редактировать и сохранять в design time, должна быть соответствующая обвязка кодом этой функциональности при написании ActiveX компонента, похоже эта функциональность у Вас не реализована. На каком языке создавался компонент?



Northwind
Сообщений в теме: 4
Сообщения: 4
Зарегистрирован: 17 дек 2013, 05:03

Re: Редактирование свойств ActiveX на этапе разработки

#3

Сообщение Northwind » 17 дек 2013, 10:20

Спасибо за ответ. Т.е. это возможно :)
Язык: C#.
Что-то похожее на Ваш пример http://proasutp.com/articles/scadasyste ... _2012.html
При необходимости могу переписать.



Аватара пользователя
alex
Администратор
Сообщений в теме: 4
Сообщения: 1757
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 47 раз
Поблагодарили: 104 раза
Контактная информация:

Re: Редактирование свойств ActiveX на этапе разработки

#4

Сообщение alex » 17 дек 2013, 15:51

Вот в помощь статья, которая поможет понять как сделать нужный функционал:
Сериализация (C# и Visual Basic)
Чтобы увидеть ссылку зарегистрируйтесь или войдите под своим логином.
.



Northwind
Сообщений в теме: 4
Сообщения: 4
Зарегистрирован: 17 дек 2013, 05:03

Re: Редактирование свойств ActiveX на этапе разработки

#5

Сообщение Northwind » 19 дек 2013, 05:52

Статью прочитал, но как воспользоваться в моем случае так и не понял.
Расскажите, пожалуйста, поподробнее. Если можно и пример.
Допустим у нас есть простой класс. Как сделать свойство редактируемым?

[syntax=csharp]
[ComVisible(true)]
[Guid("3D05C91E-C5E7-405B-95DA-2F34B4A3505B")]
public interface AxCSActiveXTS
{
[DispId(1)]
bool State { [DispId(1)] get; [DispId(1)] set; }
}

/* Здесь атрибуты */
public class TS : CBlinkControl, AxCSActiveXTS
{
/* Здесь регистрация COM */

private bool _state;

public bool State
{
get { return _state; }
set { _state = value; }
}
}
[/syntax]



Аватара пользователя
alex
Администратор
Сообщений в теме: 4
Сообщения: 1757
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 47 раз
Поблагодарили: 104 раза
Контактная информация:

Re: Редактирование свойств ActiveX на этапе разработки

#6

Сообщение alex » 23 дек 2013, 10:15

Чтобы реализовать сохраняемые свойства в design time и как связанное с этим - страницу свойств, необходимо в ActiveX компоненте реализовать интерфейсы:

[syntax=csharp]

using Microsoft.VisualStudio.OLE.Interop;

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("B196B28B-BAB4-101A-B69C-00AA00341D07")]

public interface ISpecifyPropertyPages
{
void GetPages(CAUUID[] pPages);
}

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("B196B28D-BAB4-101A-B69C-00AA00341D07")]

public interface IPropertyPage
{
void Activate(IntPtr hWndParent, RECT[] pRect, int bModal);
int Apply();
void Deactivate();
void GetPageInfo(PROPPAGEINFO[] pPageInfo);
void Help(string pszHelpDir);
int IsPageDirty();
void Move(RECT[] pRect);
void SetObjects(uint cObjects, Object[] ppunk);
void SetPageSite(IPropertyPageSite pPageSite);
void Show(uint nCmdShow);
int TranslateAccelerator(MSG[] pMsg);
}
[/syntax]
Чтобы пространство имен Microsoft.VisualStudio.OLE.Interop стало доступной в проекте необходимо установить SDK. Тема достаточно интересная, если будет время сделаю обновление статьи в этом контексте.



Northwind
Сообщений в теме: 4
Сообщения: 4
Зарегистрирован: 17 дек 2013, 05:03

Re: Редактирование свойств ActiveX на этапе разработки

#7

Сообщение Northwind » 24 дек 2013, 09:14

Так мы создадим новую вкладку в окне свойств, наподобие как здесь?
http://www.industrialactivex.com/featur ... rties.html
Чтобы увидеть ссылку зарегистрируйтесь или войдите под своим логином.


Или окно свойств полностью придется создавать заново?



Аватара пользователя
alex
Администратор
Сообщений в теме: 4
Сообщения: 1757
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 47 раз
Поблагодарили: 104 раза
Контактная информация:

Re: Редактирование свойств ActiveX на этапе разработки

#8

Сообщение alex » 24 дек 2013, 10:56

Да, через реализацию этих интерфейсов можно создавать кастомные закладки для настройки и сохранения необходимых свойств своего ActiveX. Это стандартные интерфейсы через которые контейнер ActiveX (которыми являются в большинстве своем графические редакторы SCADA) определяет что у ActiveX есть кастомные свойства и предоставляет соответствующий фреймворк куда отображается страница свойств, которую в свою очередь также необходимо реализовывать самостоятельно.



korochinskiy
Сообщений в теме: 2
Сообщения: 2
Зарегистрирован: 29 дек 2015, 15:17

Re: Редактирование свойств ActiveX на этапе разработки

#9

Сообщение korochinskiy » 29 дек 2015, 15:44

delete
Последний раз редактировалось korochinskiy 09 май 2016, 15:23, всего редактировалось 1 раз.



korochinskiy
Сообщений в теме: 2
Сообщения: 2
Зарегистрирован: 29 дек 2015, 15:17

Re: Редактирование свойств ActiveX на этапе разработки

#10

Сообщение korochinskiy » 31 дек 2015, 03:35

delete




Если эта тема может быть полезна другим, поделитесь ссылкой:

Вернуться в «Wonderware: InTouch ME, InTouch Edge HMI, InTouch, InTouch OMI и System Platform»