Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ДЛЯ ПРОФИ. OleContainer и его OleObject. У них недопонимание :) [D7, WinXP]


VID ©   (2005-08-04 18:24:00) 

Как научить OleContainer изменять размеры его OleObject'а при изменении размеров самого контейнера ? А то получается так, что в объекте отображается только та часть документа, которая помещается в контейнере, в момент создания его формы, а при дальнейшем изменений размеров формы и контейнера соответственно, размер оле-объекта не меняется.
Выкладки dfm:

   object XLContainer: TNOleContainer
     Left = 0
     Top = 42
     Width = 537
     Height = 191
     AllowInPlace = False
     PersistUIActive = False
     AutoActivate = aaManual
     AutoVerbMenu = False
     Align = alClient
     TabOrder = 0
     TabStop = False
   end

Сама загрузка в контейнер происходит так:

procedure TfrmSpDocTemplateDocument.actXLEditExecute(Sender: TObject);
begin
 XLContainer.DoVerb(ovOpen); // xlVerbPrimary
 IsModified := True;
 XLContainer.OleObject.Windows[1].WindowState := $FFFFEFD7 {xlMaximized};
end;

procedure Some;
var
 ImportBook, App, Book: Variant;
begin
     //XLContainer: TOleContainer;
     Book := XLContainer.OleObject;
     App := Book.Application;
     ImportBook := App.Workbooks.Open(FileName := OpenDialog.FileName);
     try
       actXLEdit.Execute;
       ImportBook.Sheets.Copy(After := Book.Sheets[Book.Sheets.Count]);
     finally
       ImportBook.Close(SaveChanges := False);
     end;
end;

Т.е. как вы видете, не используется метод TOleContainer.CreateObjectFromFile().

В случаях когда используется CreateObjectFromFile или же XLContainer.AllowInPlace = true, то проблемы с размерами оле-объекта отсутствуют. Но такой вариант не подходит по другим причинам...


VID   (2005-08-10 17:51:00) [1]

Ну ? Мне это очень нужно


VID   (2005-08-09 13:22:00) [2]

Нее... Перекрытие Paint'а тут, я думаю, не при чем...
Тут надо ширше думать - Почему границы отображения оле-объекта в контейнере не увеличиваются при изменении размеров самого контейнера...

Ни у кого больше нет идей ?


Leonid Troyanovsky   (2005-08-05 14:18:00) [3]


> VID ©   (05.08.05 11:47) [3]
> Нет, это не то. Какой бы SizeMode я не выбрал, он проводит
> все изменения только над тем самым видимым участком объекта:
> растягивает его, центрирует и тп... А мне надо что бы было
> взаимодействие с объектом: т.е. если в контейнере видно
> три колонки Excel-листа, то после того как я растянул контейнер
> (сделал его длинее) стало видно 4 (или более) колонки листа...
> Вот что мне нужно...


Видимо, нужно перекрыть Paint.
См., например, painting the controls background

http://groups-beta.google.com/group/borland.public.delphi.vcl.components.using/msg/6d243bed5ffab769

--
Regards, LVT.


VID   (2005-08-05 11:47:00) [4]

Нет, это не то. Какой бы SizeMode я не выбрал, он проводит все изменения только над тем самым видимым участком объекта: растягивает его, центрирует и тп... А мне надо что бы было взаимодействие с объектом: т.е. если в контейнере видно три колонки Excel-листа, то после того как я растянул контейнер (сделал его длинее) стало видно 4 (или более) колонки листа...
Вот что мне нужно...


Leonid Troyanovsky   (2005-08-05 11:30:00) [5]


> VID ©   (05.08.05 10:29) [1]
> Дааа... я умею задать сложный вопрос :)


Может тебя спасет TOleContainer.SizeMode?

--
Regards, LVT.


VID   (2005-08-05 10:29:00) [6]

Дааа... я умею задать сложный вопрос :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо