:: Visual Foxpro, Foxpro for DOS
Не работает DocumentFile = переменная для класса производного от OLEControl
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi All,

Возникла следующая проблема с VFP9 Public Beta:
Нижеприведенный код стабильно вылетает по С005 ошибке.
LOCAL tcFile
tcFile = GETFILE("xls", "Select Excel file")
CLEAR CLASS oleXL
* To make use of new variable value
PUBLIC goForm
goForm = CREATEOBJECT("frm")
m.goForm.Show()
DEFINE CLASS frm AS Form
ShowWindow = 1
Caption = "Excel"
Width = SYSMETRIC(1) * 0.8
Height = SYSMETRIC(2) * 0.8
ADD OBJECT oleXL AS oleXL
PROCEDURE Init
ThisForm.oleXL.Move(0, 0, ThisForm.Width, ThisForm.Height)
WITH ThisForm.oleXL.Object.Application
.DisplayFormulaBar = .F.
.DisplayStatusBar = .F.
.DisplayCommentIndicator = 0
.ShowWindowsInTaskbar = .F.
.DisplayPasteOptions = .F.
.DisplayInsertOptions = .F.
ENDWITH
WITH ThisForm.oleXL.Object.Windows(1)
.DisplayHeadings = .F.
.DisplayHorizontalScrollBar = .F.
.DisplayVerticalScrollBar = .F.
.DisplayWorkbookTabs = .F.
ENDWITH
ThisForm.oleXL.Visible = .T.
ThisForm.oleXL.DoVerb(0)
RETURN .T.
ENDPROC
ENDDEFINE
DEFINE CLASS oleXL AS OLEControl
OleClass ="Excel.Sheet" && Server name
DocumentFile = m.tcFile
Visible = .F.
Sizable = .F.
ENDDEFINE

Разнесение классов по разным программным модулям (с подключением их после
создания переменной - имени файла), смена переменной с именем файла на
PRIVATE и даже PUBLIC проблемы не решает.
Этот код работает на VFP7SP1 и VFP8SP1 без проблем.

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




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Не работает DocumentFile = переменная для класса производного от OLEControl
Aijik

Сообщений: 2145
Откуда: Ростов-на-Дону
Дата регистрации: 08.01.2002
Игорь, вылет вызывает эта строка:

DEFINE CLASS oleXL AS OLEControl
OleClass ="Excel.Sheet" && Server name
DocumentFile = m.tcFile
Visible = .F.

Sizable = .F.

ENDDEFINE

Если закомментировать Sizable = .F., то всё будет путем. Все остальные махинации не влияют, даже если закомментировать весь Init
Ошибки с другими AX-контролами с Sizable = .F. не происходит. Нижеследующий код работает без проблем:

PUBLIC goForm
goForm = CREATEOBJECT("frm")
m.goForm.Show()
***
DEFINE CLASS frm AS Form
ShowWindow = 1
Caption = "Excel"
Width = SYSMETRIC(1) * 0.8
Height = SYSMETRIC(2) * 0.8
ADD OBJECT oleXL AS oleXL
PROCEDURE Init
ThisForm.oleXL.Move(0, 0, ThisForm.Width, ThisForm.Height)
ENDPROC
ENDDEFINE
DEFINE CLASS oleXL AS OLEControl
OleClass ="MSComctlLib.Slider.2" && Server name
Visible = .T.
Sizable = .F.
ENDDEFINE




------------------
Ratings: 0 negative/0 positive
Re: Не работает DocumentFile = переменная для класса производного от OLEControl
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Спасибо за комментарий. Но проблему вылета MS всё-же стоит рассмотреть
подробнее... Хотя она и не в имени-переменной оказывается (а значит
возникнет и при статически заданном имени!)

P.S. репорт отправлен также на vfpfeed.




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Не работает DocumentFile = переменная для класса производного от OLEControl
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Да, из MS подтвердили что проблема в Sizable, но что важнее - так это то что
в более свежих билдах проблемы уже нету
Цитата:
Ошибки с другими AX-контролами с Sizable = .F. не происходит
Происходит! Я проверил конечно не все, но у взятых наугад компонентов со
страницы "New Object" - проблема наличествует у всех! Word.Document,
Paint.Picture...
Цитата:
OleClass ="MSComctlLib.Slider.2" && Server name
У этого
контрола НЕТУ свойства Sizable - ты его таким кодом просто добавляешь (и
даже не к контролу, а к его OleControl-контейнеру). Как я понимаю это
свойство присутствует лишь для контролов-документов - тех что и находятся на
страничке "New Object". И очевидно они реализуют больше COM-интерфейсов чем
контролы со странички "Insert Control"... Пока нету времени копаться в MSDN?
чтоб понять какой из COM-интерфейсов тут замешан...




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 51 (Гостей: 51)

© 2000-2024 Fox Club 
Яндекс.Метрика