![]() |
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум | ![]() |
![]() |
Лисоводы всех стран, объединяйтесь !!! |
Не работает DocumentFile = переменная для класса производного от OLEControl | |||
---|---|---|---|
Igor Korolyov Автор Сообщений: 34065 |
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 ![]() |
||
Re: Не работает DocumentFile = переменная для класса производного от OLEControl | |||
---|---|---|---|
Aijik Сообщений: 2145 Откуда: Ростов-на-Дону |
Игорь, вылет вызывает эта строка:
DEFINE CLASS oleXL AS OLEControl OleClass ="Excel.Sheet" && Server name DocumentFile = m.tcFile Visible = .F. Если закомментировать 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 ------------------ ![]() |
||
Re: Не работает DocumentFile = переменная для класса производного от OLEControl | |||
---|---|---|---|
Igor Korolyov Автор Сообщений: 34065 |
Спасибо за комментарий. Но проблему вылета MS всё-же стоит рассмотреть
подробнее... Хотя она и не в имени-переменной оказывается (а значит возникнет и при статически заданном имени!) P.S. репорт отправлен также на vfpfeed. ------------------ WBR, Igor ![]() |
||
Re: Не работает DocumentFile = переменная для класса производного от OLEControl | |||
---|---|---|---|
Igor Korolyov Автор Сообщений: 34065 |
Да, из MS подтвердили что проблема в Sizable, но что важнее - так это то что
в более свежих билдах проблемы уже нету ![]() Цитата:Происходит! Я проверил конечно не все, но у взятых наугад компонентов со страницы "New Object" - проблема наличествует у всех! Word.Document, Paint.Picture... Цитата:У этого контрола НЕТУ свойства Sizable - ты его таким кодом просто добавляешь (и даже не к контролу, а к его OleControl-контейнеру). Как я понимаю это свойство присутствует лишь для контролов-документов - тех что и находятся на страничке "New Object". И очевидно они реализуют больше COM-интерфейсов чем контролы со странички "Insert Control"... Пока нету времени копаться в MSDN? чтоб понять какой из COM-интерфейсов тут замешан... ------------------ WBR, Igor ![]() |
||
© 2000-2021 Fox Club  |