PDA

Просмотр полной версии : Создание модуля ввода-вывода



Flutter
09.07.2014, 14:47
Здравствуйте.
Я пытаюсь написать свой модуль ввода-вывода. Слегка переделал проект из примера, установил, но при попытке вставить, выскакивает "Ошибка при вставке элемента".
Можно как-нибудь узнать, в чём ошибка?
Проект приложил. Среда сборки vs2012, .Net Framework 4.0

SCADAMaster
10.07.2014, 10:19
Нужно добавить имена сборок в полное имя типа -

<!--Полное имя класса реализующего режим исполнения модуля.-->
<RTProcessorClass>TestModule.TestIOProcessor, TestModule</RTProcessorClass>

<!--Полное имя класса описывающего свойства модуля.-->
<InstanceClass>TestModule.TestIOModule, TestModule</InstanceClass>

Еще у TestIOModule нужен атрибут-
[Serializable]//Атрибут, необходимый для сохранения свойств модуля.

Также ошибку можно посмотреть в sys_log\MasterSCADA_net.log -
1. <ErrorInfo>Не удалось загрузить тип "TestModule.TestIOModule" из сборки "MasterSCADA.Common, Version=3.6.1.64000, Culture=neutral, PublicKeyToken=ba56f5ab10f997f3".</ErrorInfo>
2. <ErrorInfo>Тип "TestModule.TestIOModule" в сборке "TestModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый.</ErrorInfo>

Flutter
10.07.2014, 11:13
Действительно, сериализацию не углядел, спасибо.

Flutter
17.11.2014, 13:17
Продолжу свою тему.

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

Решил создать безоконный контрол. Документация скудновата, сделал по примеру.

Теперь он мне в логе выдаёт:
[Error] FBTest.TestControl,
System.Runtime.Serialization.SerializationExceptio n: Тип "System.Windows.Forms.Integration.ElementHost" в сборке "WindowsFormsIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" не помечен как сериализуемый.

В оконном варианте этот тип почему-то не требовал сериализации, всё работало.

Проект прикрепил

SCADAMaster
17.11.2014, 16:11
Вы пытаетесь сделать WPF контрол на безоконном?
VisualWindowlessControlBase не унаследован от системного класса control, который нужен для размещения WPF в контроле, поэтому создание таких контролов невозможно

Flutter
18.11.2014, 16:09
Жаль.
Тогда может посоветуете, есть ли возможность как-нибудь поставить на фоне своего контрола стандартные элементы, или он всегда рисуется сверху?

SCADAMaster
18.11.2014, 16:16
Оконный контрол всегда находится сверху.
Если нужно чтобы контрол вписывался в Z-порядок, то нужно делать безоконный контрол.
Либо сделать оконный контрол полностью законченным - который бы реализовывал нужный функционал без использования дополнительных штатных компонентов.

Flutter
18.12.2014, 17:49
Добрый день.

Хочу создать диалог свойств для контрола.
В документации инструкция из трёх шагов: создал ComponentEditor, добавил форму, привязал к контролу.
По выбору пункта свойства, появляется моя форма, всё ОК.
А вот как выполняется сохранение введённых данных на форме свойств, в документации я не нашёл.

SCADAMaster
19.12.2014, 12:58
Вам сначала нужно передать данные с вашей формы в свойства контрола. Посмотрите данную страницу раздел 2.
http://www.cyberforum.ru/windows-forms/thread110436.html

Flutter
13.01.2015, 14:42
C новым годом! Продолжим тему :)

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

SCADAMaster
13.01.2015, 15:48
Вы имеете ввиду входы и выходы динамизации?
Посмотрите пример \UserControls\PropertiesDynamization\ из примеров поставляемых с MasterSCADA.
[DispId(1),
DisplayName("Текст")]
public string TextValue
{
get { return _textBox.Text; }
set { _textBox.Text = value; }
}

Flutter
13.01.2015, 16:11
Нет, я имел ввиду не ActiveX, а ВФБ.
Публичные свойства ФБ не отображаются в свойствах в редакторе мнемосхем и не понятно как получить доступ к этим свойствам из контрола.

SCADAMaster
13.01.2015, 16:46
Свойства объявляются везде одинаково
ВФБ состоит из
Имя.cs - код в девере объектов
Имя.bmp - картинка в дереве объектов
ИмяControl.cs - код для мнемосхемы
ИмяControl.bmp - картинка для мнемосхемы

----------------
[DispId(1),
DisplayName("Текст")]
Размещается в ИмяControl.cs
Итогом будет что-то вроде

namespace MyVFB
{
[
Serializable,
ComVisible(true),
Guid("Y5612849-B478-49ED-4FFB-C9F997D16769"),
DisplayName("Мой ВФБ"),
]
public class MyFB: VisualWindowlessControlBase
{
[DisplayName("Текст"), DispId(1)]
public string Text{ get; set; }
}
........................

}
В данном примере на мнемосхеме у элемента появится свойство с именем "Текст" (DisplayName()), которое можно будет динамизировать (DispId())