Tag Archives: ActiveX

Пример Dll для ActiveX Control

Ниже приведен исходный текст примера Dll, использующийся для вызова методов ActiveX элемента в визуализации CoDeSys.

В данном примере dll будет вызывать методы GoBack или GoForward, только если элемент поддерживает интерфейс IWebBrowser.

Метод выбирается параметром pszId.

#include «stdafx.h»

#include <unknwn.h>

#include <exdisp.h>

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,

LPVOID lpReserved)

{

return TRUE;

}

extern «C» __declspec (dllexport) void ExecuteActiveXCall(IUnknown* pUnk,

char* pszId, char* pszParam, char* pszReturnBuffer, int nReturnBufferSize,

DWORD* pdwReturnFlag)

{

if (strcmp(pszId, «IWebBrowser|GoBack») == 0)

{

IUnknown* pNewUnk;

IWebBrowser* pwb;

pUnk->QueryInterface(IID_IWebBrowser, (void**) &pNewUnk);

pwb = (IWebBrowser*) pNewUnk;

if (pwb)

{

pwb->GoBack();

pwb->Release();

}

}

else if (strcmp(pszId, «IWebBrowser|GoForward») == 0)

{

IUnknown* pNewUnk;

IWebBrowser* pwb;

pUnk->QueryInterface(IID_IWebBrowser, (void**) &pNewUnk);

pwb = (IWebBrowser*) pNewUnk;

if (pwb)

{

pwb->GoForward();

pwb->Release();

}

Мой блог находят по следующим фразам

Использование ActiveX на мнемосхеме MasterSCADA.

  1. Запускаем MasterSCADA
  2. Открываем или создаем проект, в котором будет мнемосхема, с нашем модулем.
  3. Открываем мнемосхему, на которой будет расположен наш модуль.
  4. В меню «Сервис» выбираем «Органайзер ActiveX…»

5.  Находим наш User Control по его дружественному имени (если задан атрибут DisplaName) или по его  полному имени (namespace + имя класса)

6.  Нажимаем на кнопку «>>>», ставим галочку «Редактируемый в схеме» и нажимаем кнопку «ОК». Данная галочка определяет: будет или нет работать наш ActiveX в режиме разработки проекта. Если модуль рассчитан для работы только в режиме исполнения, то данную галочку ставить необязательно.

 

7. Выбираем наш модуль на палитре в разделе «Другие элементы ActiveX», и перетаскиваем его на мнемосхему

8.  Нажимаем на кнопку и видим сообщение «Hello World!»

Использование и динамизация свойств контрола.

Для создания свойства контрола достаточно объявить просто свойства в классе контрола. Пример по созданию и динамизации свойств контрола можно посмотреть в проекте: «[Папка в которую установлена MasterSCADA]APIMasterSCADAExamples», класс — Examples.UserControls.PropertiesDynamization.PropertiesDynamization.

 

Создание безоконного контрола.

Если необходимо создать контрол с прозрачным фоном, то необходимо использовать другой базовый класс – InSAT.Library.Gui.Windowless.WindowlessControlBase. Этот класс в отличие от NetActiveXBase не унаследован от системного класса Control, поэтому для него не поддерживается дизайнер контрола (визуальное редактирования контрола в студии). WindowlessControlBase является облегченным контролом, поддерживающим только отрисовку содержимого в функции OnPaint, а также возможность реагировать на события мыши (для этого нужно переопределить функции OnMouseDown, OnMouseMove, OnMouseUp). Пример работы с таким контролом в проекте APIMasterSCADAExamplesExamples.sln.

Контрол —  UserControlsSimpleWindowlessActiveXSimpleWindowlessActiveX.cs

 

С точки зрения производительности такие контролы быстрее и потребляют меньше памяти, так как для них не создается окно Windows. Другим преимуществом также является то, что такие контролы имеют общий Z-порядок с большинством стандартных контролов MasterSCADA.

 

    Создание ActiveX с использованием .Net Framework.

    Создание простого .Net User Control, регистрируемого в системе как ActiveX

    1. Если у вас ещё нет проекта, в который вы хотите добавить новый User Control, то выполните пункт 1 раздела «Пример создания пустого ФБ (на языке C# в Visual Studio 2005)» из описания по созданию ФБ на C# (Создание ФБ на C#.doc).
    2. Выполните пункты 2-5 раздела «Пример создания пустого ФБ (на языке C# в Visual Studio 2005)» из описания по созданию ФБ на C#(Создание ФБ на C#.doc).
    3. Создаем новый User Control:

    4. Наследуем созданный User Control от класса InSAT.Library.Gui.NetActiveXBase

    5.  Добавляем атрибуты для регистрации ФБ как COM объекта:

    6. Значение атрибута Guid должно быть уникальным, уникальное значение можно получить при помощи VS (“Tools”->”Create GUID” в открывшемся окне выбираем GUID Format “Registry Format”, нажимаем “Copy” и “Exit”):

     

    7.  Добавляем атрибут для регистрации дружественного имени ActiveX.

    8.  Добавляем кнопку, по нажатию на которую, будет выдаваться сообщение “Hello world!”

    9. Чтобы зарегистрировать наш user control как ActiveX, необходимо просто скомпилировать наш проект.

     

     

      Динамизация в MasterSCADA

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

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

      Например, уровень жидкости в емкости можно вывести не только как число, но и с помощью изображения высоты столба жидкости. При этом нарушение заданных границ уровня жидкости или ее температура могут отображаться изменением цвета. Разные свойства одного и того же элемента могут одновременно изменяться в соответствии с изменением разных технологических параметров, характеризующих отображаемый объект. Другой пример. Когда человеку проще определить, что запущен вентилятор? Когда рядом с его изображением меняется надпись с «Выключен» на «Включен» или, когда лопасти начинают вращаться. Человек, как и любое животное, быстрее реагирует на движение, чем на статическое изображение, а тем более текст, который нужно еще и прочесть. Итак, динамизация (иногда ее еще называют анимацией, но мы все же предпочитаем первый термин) – основа эргономики операторского интерфейса. Именно поэтому знание возможностей динамизации в Master SCADA — залог построения качественных мнемосхем.

      Динамизация в MasterGraph

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

      1. В зависимости от источника изменения значения динамизируемого свойства:

      по входу – источником является переменная проекта Master SCADA

      по выходу – источником является оператор, изменяющий некое свойство элемента (например, передвигающий ползунок задатчика)

      2. По типу значения параметра динамизации:

      аналоговый (вещественный, целый со всеми их разновидностями) – позволяет менять свойства элементов пропорционально изменению значения (линейное преобразование – рис. 1), либо по достижению какого-либо заданного константой порога (ступенчатое или пороговое преобразование – рис. 2).

      Рис.1

       

      Рис.2

      дискретный – каждому из двух состояний параметра соответствует определенное значение свойства элемента (например, есть мигание или нет, отображается элемент на мнемосхеме или временно скрыт и т.п.)