У меня возникла след. ситуация: при отрисовке на TForm Excell-диаграмм ранее мной использовался TOLEContainer, а точнее OleDraw через интерфейс TOLEContainer'a. Сейчас возникла необходимость делать то же самое, но в DLL, т.е. не визуализируя Active X Control в TOLEContainer'e. Я попытался создать контейнер в run-time, без указания Parent'a, но при попытки загрузить из TStream информации в OLEContainer — ругается — типа Control has not parent...
Вот дилемма — отказаться от использования OLEContainer и делать все руками путем создания подобного контейнера или может все-таки кому-то удалось заставить стандартный компонент вести себя правильно?
Спасибо.
Здравствуйте, gbs, Вы писали:
gbs>У меня возникла след. ситуация: при отрисовке на TForm Excell-диаграмм ранее мной использовался TOLEContainer, а точнее OleDraw через интерфейс TOLEContainer'a. Сейчас возникла необходимость делать то же самое, но в DLL, т.е. не визуализируя Active X Control в TOLEContainer'e. Я попытался создать контейнер в run-time, без указания Parent'a, но при попытки загрузить из TStream информации в OLEContainer — ругается — типа Control has not parent... gbs>Вот дилемма — отказаться от использования OLEContainer и делать все руками путем создания подобного контейнера или может все-таки кому-то удалось заставить стандартный компонент вести себя правильно? gbs>Спасибо.
А может просто создать объект через CreateOleObject? Если все равно не надо визуализации...
Здравствуйте, gbs, Вы писали:
gbs>Здравствуйте, Denis Titov, Вы писали:
DT>>А может просто создать объект через CreateOleObject? Если все равно не надо визуализации...
gbs>Угу, я так и собираюсь сделать...Но встает вопрос — как загрузить его из потока?
Надо лезть в исходники TOleContainer и смотреть как он это делает. Я бы и сам глянул, да вот ни Delphi ни Builder
не имею в данный момент
Здравствуйте, Denis Titov, Вы писали:
DT>>>А может просто создать объект через CreateOleObject? Если все равно не надо визуализации...
gbs>>Угу, я так и собираюсь сделать...Но встает вопрос — как загрузить его из потока?
DT>Надо лезть в исходники TOleContainer и смотреть как он это делает. Я бы и сам глянул, да вот ни Delphi ни Builder DT>не имею в данный момент
Спасибо за наводку. Я посмотрел — примерно так же все реализовал у себя, все прекрасно загружается в Excel(без ActiveX), но...
при попытке опросить доступные интрефейсы экселя на предмет наличия IViewObject — не находит ничего
А задача у меня — отрисовать построенную диаграму на Bitmap в памяти... Даже не знаю что и делать теперь... Есть конечно вариант создать из dll форму в памяти — пихнуть на нее OleContainer и через его IOleObject интерфейс выполнить OleDraw... Но это же "через голову" получиться...
Здравствуйте, gbs, Вы писали:
gbs>Здравствуйте, Denis Titov, Вы писали:
DT>>>>А может просто создать объект через CreateOleObject? Если все равно не надо визуализации...
gbs>>>Угу, я так и собираюсь сделать...Но встает вопрос — как загрузить его из потока?
DT>>Надо лезть в исходники TOleContainer и смотреть как он это делает. Я бы и сам глянул, да вот ни Delphi ни Builder DT>>не имею в данный момент
gbs>Спасибо за наводку. Я посмотрел — примерно так же все реализовал у себя, все прекрасно загружается в Excel(без ActiveX), но... gbs>при попытке опросить доступные интрефейсы экселя на предмет наличия IViewObject — не находит ничего gbs>А задача у меня — отрисовать построенную диаграму на Bitmap в памяти... Даже не знаю что и делать теперь... Есть конечно вариант создать из dll форму в памяти — пихнуть на нее OleContainer и через его IOleObject интерфейс выполнить OleDraw... Но это же "через голову" получиться...
Вообще-то, OleDraw просто IUnknown требует а не IViewObject. Или я чего не понял?
Здравствуйте, Denis Titov, Вы писали:
DT>Вообще-то, OleDraw просто IUnknown требует а не IViewObject. Или я чего не понял?
К сожалению требует
Remarks
The OleDraw helper function calls the QueryInterface method for the object specified (pUnk), asking for an IViewObject interface on that object. Then, OleDraw converts the RECT structure to a RECTL structure, and calls IViewObject::Draw as follows:
Здравствуйте, gbs, Вы писали:
gbs>У меня возникла след. ситуация: при отрисовке на TForm Excell-диаграмм ранее мной использовался TOLEContainer, а точнее OleDraw через интерфейс TOLEContainer'a. Сейчас возникла необходимость делать то же самое, но в DLL, т.е. не визуализируя Active X Control в TOLEContainer'e. Я попытался создать контейнер в run-time, без указания Parent'a, но при попытки загрузить из TStream информации в OLEContainer — ругается — типа Control has not parent... gbs>Вот дилемма — отказаться от использования OLEContainer и делать все руками путем создания подобного контейнера или может все-таки кому-то удалось заставить стандартный компонент вести себя правильно? gbs>Спасибо.
Можно положить контейнер на форму. Форму в RunTime создать, но не показывать. Для надёжности можно в конструкторе формы вызвать функцию HandleNeeded().
Здравствуйте, Alex, Вы писали:
A>Можно положить контейнер на форму. Форму в RunTime создать, но не показывать. Для надёжности можно в конструкторе формы вызвать функцию HandleNeeded().
Здравствуйте, gbs, Вы писали:
gbs>Здравствуйте, Alex, Вы писали:
A>>Можно положить контейнер на форму. Форму в RunTime создать, но не показывать. Для надёжности можно в конструкторе формы вызвать функцию HandleNeeded().
gbs>В конце концов я так и сделал