Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Обработчик событий для формы в DLL  [new]
Олег Н
Member

Откуда:
Сообщений: 4
Создал DLL с формой ввода (объявил OLE public, откомпилировал COM server (dll) ).
В EXE-нике создаю объект Form, но не могу запустить обработчик событий,
ни по READ EVANTS, ни по Show()

oForms=CREATEOBJECT("fileDll.Form1")
IF TYPE("oForms")='O'
oForms.visible=.T.

* READ EVENTS // игнорируется
* oForms.Show(1) // а это, выдает сообщение:
// Операция пользовательского интерфейса невозможна
ENDIF


Помогите, пожайлуста!
15 сен 04, 15:23    [961887]     Ответить | Цитировать Сообщить модератору
 Re: Обработчик событий для формы в DLL  [new]
Дмитрий Петров
Member

Откуда: Пермь
Сообщений: 43
А визуальные штучки в ДЛЛ не поддерживаются.. Так что увы никак.
16 сен 04, 08:05    [963287]     Ответить | Цитировать Сообщить модератору
 Re: Обработчик событий для формы в DLL  [new]
Олег Н
Member

Откуда:
Сообщений: 4
СПАСИБО !!!
16 сен 04, 10:07    [963515]     Ответить | Цитировать Сообщить модератору
 Re: Обработчик событий для формы в DLL  [new]
Новоселов Олег
Member

Откуда:
Сообщений: 20
Делается это так:

1) Создаете на лисе New Project -> New file -> выбираете каталог и имя проекта, пусть будет proj_dll

1.1) На закладке Classes, жмем кнопку New, вводим:
my_CForm - имя Вашего класса
Form (или FormSet) - базовый класс
my_vcx - имя Вашего файла

1.2) Открываем форму на редактирование кнопкой Modify -> теперь у Вас появилась закладка Class в меню -> выбираем пункт меню Class Info -> (ВАЖНО !!!) ставим галочку у OLE Public (иначе ничего не получится) -> кнопка OK

1.3) ВАЖНО !!! Меняем свойство формы WindowType=1 (Modal -модальное).
Если не поменять, то программа после Show не остановится и не будет ждать завершения окна диалога, а быстренько добежит до RETURN (при выходе из процедуры, локальная переменная со ссылкой на объект будет удалена)


1.4) Визуальными средствами, накидываете на форму разные контролы (поля ввода, кнопки и т.д.). Правите их свойства и методы, как на обычной форме.

1.5) Пункты 1.1-1.4 повторяем для всех классов (если форм в DLL несколько)

1.6) Компилируете EXE, что Вы будете вызывать в основной программе.
Размер всех трех файлов (EXE, Single DLL, или Multiple DLL), будет одинаков, зато с EXE у Вас не будет проблем.

После 1-го построения EXE (или DLL), можно через проект изменить режимы работы OLE сервера, из меню Project -> Project Info -> закладка Servers -> в списке Instancing выберите Single Use или Multi Use.
Только не ставьте Not Createble - это запретит создание OLE-сервера !!!

-----------------------------------------------
2) Создаете рабочий проект, из которого будете вызывать EXE (или DLL)

2.1) Создаете процедуру

PROCEDURE my_proc

oObj=NEWOBJECT("my_CForm","my_vcx.vcx","C:\FOX\test\proj_dll.EXE")
IF TYPE("oObj")='O'
	oObj.Visible=.T.
	oObj.Show(1)   && модальное
ELSE
	MESSAGEBOX("DLL not loaded")	
ENDIF 
RETURN 
2.2) Компилируете и наслаждаетесь.
16 сен 04, 16:59    [965730]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить