Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 02.09.2007
Сообщений: 209

Свойство Persistable в ActiveX

31.12.2007, 19:23. Показов 1151. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как известно в классы ActiveX DLL и ActiveX EXE имеют свойство Persistable, позволяющее обеспечить сохранность данных между вызовами.
И вот для примера в модуле класса MyDLL.clsMain я записываю:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private varCheck As Byte
 
Public Property Let IsRegistration(Rgs As Byte)
    varCheck = Rgs
    Class.PropertyChanged 'IsRegistration'
End Property
Public Property Get IsRegistration() As Byte
    IsRegistration = varCheck
End Property
 
Private Sub Class_ReadProperties(PropBag As PropertyBag)
    varCheck = PropBag.ReadProperty('IsRegistration', 2)
End Sub
Private Sub Class_WriteProperties(PropBag As PropertyBag)
    PropBag.WriteProperty 'IsRegistration', varCheck, 2
End Sub
А в форме, из которой я вызываю MyDLL.clsMain один элемент CheckBox по имени Check1 и соответственно кодирую:
Visual Basic
1
2
3
4
5
6
7
8
9
Private clsCh As New MyDLL.clsMain
 
Private Sub Check1_Click()
    clsCh.IsRegistration = Check1.Value
End Sub
 
Private Sub Form_Load()
    Check1.Value = clsCh.IsRegistration
End Sub
По идее, после того как я щелкну на Check1 то его значение 1 должно записаться, и сохранится в MyDLL.clsMain. То есть при закрытии и следующем открытии формы значение Check1.Value должно равняться 1. Но оно при каждом новом открытии формы упорно равняется 0.
И так в чем здесь загвоздка? А то я никак не разберусь.

Заранее благодарю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.12.2007, 19:23
Ответы с готовыми решениями:

Нужно изменять размер шрифта в ActiveX в зависимости от размера самого ActiveX
Уважаемые, обратите пожалуйста внимание на вчерашний постинг под сабжем 'ActiveX - динамич. изменение шрифта и DragDrop. Помогите,...

ActiveX и VB, получение значения из ActiveX
Написал на VB ActiveX компонент. Использую его на Web странице Function OnSupLoad() Dim Mediator Set...

ActiveX Bridje или как превращать ActiveX Control в JavaBean.
Насколько я понял из документации, эта штука позволяет превращать JavaBean в ActiveX Control с дальнейшим использованием этого дела в...

6
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
31.12.2007, 20:57
Using the PropertyBag Object to Persist an Object

In order to persist an ActiveX component, you need to create an instance of a PropertyBag object. This may seem redundant — after all, the class already has it's own PropertyBag. Why can't you just use that? Simple. When the object goes away, so does its PropertyBag. It only exists in memory; for persistence you need to store a copy of the object somewhere so you can retrieve it later.

Think of a PropertyBag as a sack that you can fill up with stuff and stash away somewhere for safe keeping. Where you stash it is entirely up to you. The following form code demonstrates how you can persist an object to a text file:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private pb As PropertyBag      ' Declare a PropertyBag object.
Private LoanObject As Loan      ' Declare a Loan object.
 
Private Sub Form_Unload(Cancel As Integer)
   Dim varTemp as Variant
 
   ' Instantiate the PropertyBag object.
   Set pb = New PropertyBag
   ' Save the object to the PropertyBag using WriteProperty.
   pb.WriteProperty 'MyLoanObject', LoanObject
   ' Assign the Contents of the PropertyBag to a Variant.
   varTemp = pb.Contents
   ' Save to a text file.
   Open 'C:Loandata.txt' For Binary As #1
   Put #1, , varTemp
   Close #1
End Sub
0
0 / 0 / 0
Регистрация: 02.09.2007
Сообщений: 209
31.12.2007, 22:00  [ТС]
To debutant: Из примера предоставленного тобой не совсем понятно, что это за тип (класс) Loan. Но в принципе понятно, что таким образом можно сохранить свойства класса в файле. Но тогда какова роль Свойства Persistable? Без выгрузки класса из памяти все его свойства и так хранятся в переменных. А во-вторых, в приведенном мною примере никогда не происходят события Class_ReadProperties и Class_WriteProperties. А это уже настораживает. Ведь если эти события не происходят тогда естественно, что не возможно ожидать сохранения и восстановления свойств класса. То есть вопрос можно перефразировать так: почему не происходят эти события?
0
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
01.01.2008, 06:06
Это смотря в каких случаях не происходят. Скопировал я твой пример. Запустил. Все события работают! Может я что-нибудь не правильно делаю? :-)
Проект - два проекта обновременно: один - standard exe, другой - ActiveX DLL (две копии VB запускать для ActiveX EXE не хотел). У тебя так?
Меня терзают смутные сомнения, что Вы, батенька, к VB с другого языка пришли... Вопросы какие-то с подковыркой :-) Что настораживает :-) Могу рекомендовать Вам замечательную книгу как раз по теме: 'Разработка распределенных приложений на Visual Basic 6.0 Учебный курс' от 'Русской редакции' (к экзамену 70-175).

Удачи!
0
0 / 0 / 0
Регистрация: 02.09.2007
Сообщений: 209
01.01.2008, 11:49  [ТС]
Расскажи, пожалуйста:
1. Каким образом ты определил, что события Class_ReadProperties и Class_WriteProperties происходят?
2. После того как ты изменяешь, значение Check1 скажем на 1, закрываешь форму и снова открываешь, чему равняется Check1?
Благодарю.
0
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
01.01.2008, 14:15
1. Точки прерывания поставил.
2. Нет, не так! Добавь две кнопки на форму для standard-exe: по одной объект создается, по другой уничтожается. ActiveX DLL - код, выполняемый внутри вызывающего ее процесса (standard-exe) и уничтожается вместе с этим же процессом.
0
0 / 0 / 0
Регистрация: 02.09.2007
Сообщений: 209
01.01.2008, 14:39  [ТС]
Пробовал и то, что ты предложи и MDIForm-у с двумя Child формами, также пробовал. Не происходят вышеозначенные события. Ты не смог бы сбросить мне на sws@itt.net.ua твой исходник, я запущу его у себя.
Благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.01.2008, 14:39
Помогаю со студенческими работами здесь

Основное свойство многочлена тейлора? Что это за свойство?
(о значениях в в точке x0 функции и ее многочлена тейлора, а так же их производных). Так же нужно доказательство для этого свойства, но не...

Как заставить свойство "Text" компонента Label забиндиться на свойство TheChar из пользовательского класса
Здравствуйте, не получается заставить свойство "Text" компонента Label забиндиться на свойство TheChar из моего класса, основанного на...

Передать свойство объекта в свойство объекта в объекте что в массиве
var array = ; function func(a, b, c) { array = {}; array.a = {}; // вместо "a" - аргумент array.a.b = text3; // и здесь. } ...

ActiveX в 1С
Всем доброго времени суток. Столкнулся с проблемой, не могу добавить ActiveX компонент на форму. Делаю общую форму но вот меню...

ActiveX и C++
Какой макрос в ActiveX и C++ используется для вывода сообщения ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru