for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

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

Сообщений: 34065
Дата: 29.08.04 21:10:34
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
Откуда: Ростов-на-Дону
Дата: 30.08.04 11:10:36
Игорь, вылет вызывает эта строка:

  
  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
Автор

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

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




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

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

Сообщений: 34065
Дата: 01.09.04 15:43:08
Да, из 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: 12 Grin sphinx Зингер Василий  (Гостей: 8)


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