Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 08.11.2007, 18:04   #1
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию OleContainer, Com object

Код:
type
  TFrOle = class(TOleContainer);
  
procedure TForm1.Button1Click(Sender: TObject);
var
  OleApplication, OleObject: Variant;
begin
if OpenDialog1.Execute then
  begin
    OleApplication := CreateOleObject('Excel.Application');
    OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, false);
    FOleObject := GetActiveOleObject('Excel.Application');
    OleContainer1.SetFocus;
    TFrOle(OleContainer1).DblClick;
  end;
end;
Принцип такой: запускаю отдельное Excel-приложение, после чего загружаю в OleContainer свой файлик и открываю на редактирование, все просто. Но тут возникает одна интересная проблема. Если в системе уже был запущен какой-нибудь Excel-документ, то OleContainer "прилепляется" к нему, не обращая внимание на мое запущенное приложение и получается, что я не могу получить доступ уже к ранее запущенному файлу, и из-за этого дальше OleContainer начинает глючить. Отказаться от OleContainer-а нельзя (просто примите на веру) и поэтому возникает вопрос(ы).
1. Можно ли каким нибудь образом "указать" OleContainer-у на мое запущенное приложение, чтобы он работал с ним и не трогал остальные документы?
2. Если нет, то можно ли каким-нибудь образом при запуске Excel-я (CreateOleObject('Excel.Application ') указать системе, во сколько он запущен (и таким образом "обмануть" OleContainer)?
Не надо ничего усложнять. Все достаточно тривиально.

Последний раз редактировалось Shuraken; 08.11.2007 в 23:51.
Shuraken вне форума Ответить с цитированием
Старый 08.11.2007, 20:36   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вы не пробовали просмотреть каталог Delphi7\Demos\ActiveX ?
Мне показалось, что там есть очень удачные реализации применения OleContainer-а.
Может быть, и вам поможет в решении вашей проблемы.
mihali4 вне форума Ответить с цитированием
Старый 09.11.2007, 01:07   #3
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Спасибо, но это те же самые действия, что и я использовал. Я ищу что-то свыше этих действий. OleContainer запускает приложение в своем окне. Мне надо указать какое именно приложение надо запустить, ну, я открываю документ Excel обычным образом. В TaskManager-е появляется процесс Excel. Дальше я через Com запускаю еще один процесс. И дальше я хочу связать именно этот процесс с документом, который я запускаю через OleContainer, чтобы тот запущенный процесс и OleContainer-процесс ничего друг о друге не знали. Попробуйте сами сперва открыть какой-нибудь Excel документ, и после этого выполнить код в первом сообщении и Вы сами убедитесь, что после этого переключиться на другой документ уже нельзя.
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Старый 09.11.2007, 09:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
запускаю отдельное Excel-приложение, после чего загружаю в OleContainer свой файлик и открываю на редактирование, все
просто
А зачам такая морока? Зачем запускать отдельно Эхель?
Мона просто

procedure TForm1.Button1Click(Sender: TObject);
begin
OleContainer1.CreateLinkToFile('Фай лик.xls',false);
end;

Последний раз редактировалось Stilet; 09.11.2007 в 12:41.
Stilet вне форума Ответить с цитированием
Старый 09.11.2007, 12:20   #5
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Так еще раз повторяю, в этом случае при редактировании документа OleContainer "прилепится" к уже запущенному Excel-процессу (если таковой имеется) и заблокирует его, а мне это ну никак не надо, для этого и запускаю отдельно Excel, чтобы "прицепиться" к нему.
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Старый 09.11.2007, 12:44   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
в этом случае при редактировании документа OleContainer "прилепится" к уже запущенному Excel-процессу (если таковой имеется) и заблокирует его
Я конечно не знаю что у тебя за ситуация, но меня никакого приклеивания и блокирования не происходит, поэтому и сказал.
Stilet вне форума Ответить с цитированием
Старый 09.11.2007, 13:13   #7
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Ага... извини, фишку сразу не просек, ну... можно действительно так сделать. Сенкс.
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемма с object, procedure AngelOfDeath Общие вопросы Delphi 2 20.08.2008 15:08
Ошибка! ActiveX component can't create object! Insainer Microsoft Office Access 0 27.01.2008 12:13
Помогите, пожалуйста, с OleContainer! gluk666 Компоненты Delphi 0 08.01.2007 20:11