Как работать с OLE объектом

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как работать с OLE объектом

Сообщение Джентельмен » 25.05.2007 17:26:44

есть вот у меня OLE объект... под Windows... а что с ним делать? как мне из Lazarus к нему подключитса и использовать все его методы, свойства и т. д. ???
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение SAK » 25.05.2007 20:29:21

Пока никак :( . Почему? Ответ можно найти здесь http://freepascal.ru/forum/viewtopic.php?t=2339
Последний раз редактировалось SAK 22.09.2007 18:33:59, всего редактировалось 1 раз.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Сообщение v-t-l » 26.05.2007 19:09:37

v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение SAK » 27.05.2007 21:10:23

Попробовал указанный компонент. EXE-шники приложенные для проверки работают, а вот после компиляции этих же примеров в Lazarus 0.9.22 (FPC 2.0.4) незначительно изменённых:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  OC: TMgOleController;
begin
  OC := TMgOleController.Create;
  OC.CreateOleObject('Word.Application');
  OC.SetProperty('Visible',[True]);
  OC.Free; // <<<<< - исключение
end;{ TForm1 }

приводит к исключению на указанной строке. Причину пока не выяснил.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Сообщение GigoVich » 29.05.2007 13:47:15

:wink: В 2.1.4 чё нить поменяли в этом плане?
GigoVich
новенький
 
Сообщения: 99
Зарегистрирован: 07.11.2005 02:05:02
Откуда: г. Москва

Сообщение cepreu » 21.09.2007 22:52:24

SAK писал(а):Попробовал указанный компонент. EXE-шники приложенные для проверки работают, а вот после компиляции этих же примеров в Lazarus 0.9.22 (FPC 2.0.4) незначительно изменённых:Код:

procedure TForm1.Button1Click(Sender: TObject);
var
OC: TMgOleController;
begin
OC := TMgOleController.Create;
OC.CreateOleObject('Word.Application');
OC.SetProperty('Visible',[True]);
OC.Free; // <<<<< - исключение
end;{ TForm1 }


приводит к исключению на указанной строке. Причину пока не выяснил.



Запускай Exe-шник не в среде Lazarus а под системой
таже проблема была, вроде с отладчиком не дружит
cepreu
новенький
 
Сообщения: 24
Зарегистрирован: 01.05.2007 13:20:15
Откуда: г.Киев

Re: Как работать с OLE объектом

Сообщение AAlexA » 29.07.2008 11:04:13

А пример вызова методов есть?
Беру пример из архива, меняб ворд на Excel.Application.
OC := TMgOleController.Create;
Код: Выделить всё
OC1 := TMgOleController.Create;
  OC.CreateOleObject('Excel.Application');
  OC.CallFunction('Add',[EmptyStr,0]);<-----
  OC.SetProperty('Visible',[True]);

Пустой Эксель создаётся, при попыткее вызвать метод в помеченной строке в рантайме исключение.
И ешё при компиляции Lazarus 0.9.24 ругается
MgOle2Auto.pas(103,16) Error: function header doesn't match the forward declaration "TMgOleController.GetActiveOleObjectByClassID(TGuid):IDispatch;Register"

Или поработать с OLE невозможно никаким способом?
'WorkBooK.Add', Application.WorkBooK.Add не помогают
AAlexA
незнакомец
 
Сообщения: 4
Зарегистрирован: 29.07.2008 10:18:52

Re: Как работать с OLE объектом

Сообщение yuray » 05.08.2008 12:07:52

AAlexA писал(а):Или поработать с OLE невозможно никаким способом?


Можно. Смотри здесь
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Как работать с OLE объектом

Сообщение anreal » 11.08.2008 15:02:09

yuray писал(а):Можно. Смотри здесь

Там только для ворда, а с екселем как работать?
anreal
незнакомец
 
Сообщения: 1
Зарегистрирован: 11.08.2008 14:27:34

Re: Как работать с OLE объектом

Сообщение yuray » 12.08.2008 09:31:45

Автор WordDll планирует создать ExсelDll.dll. Но что мешает Вам сделать это самостоятельно. Исходники WordDll открыты, можно по аналогии и для Excel разработать подобную dll.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Как работать с OLE объектом

Сообщение AAlexA » 20.08.2008 15:43:15

Создать ДЛЛ не проблема, всё дело в лицензионной чистоте. Наличее лицензии на Делфи, в которой будет компилироватся ДЛЛ, снимает сам вопрос о работе с OLE-обектом.
AAlexA
незнакомец
 
Сообщения: 4
Зарегистрирован: 29.07.2008 10:18:52

Re: Как работать с OLE объектом

Сообщение GrayEddy » 20.08.2008 18:39:20

Возьмите Turbo Delphi Explorer, скомпилируйте dll.
Все, проблем нет.
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Re: Как работать с OLE объектом

Сообщение yuray » 21.08.2008 18:55:35

GrayEddy писал(а):Возьмите Turbo Delphi Explorer, скомпилируйте dll.
Все, проблем нет.


Да, проблем нет если бы не спортивный интерес.
Почему эту длл нельзя компильнуть в Lazarusе? Вот в чем вопрос.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Как работать с OLE объектом

Сообщение EmeraldMan » 29.10.2008 23:52:37

Я так понял в версии 0.9.26 уже настроили работу с OLE.
Вот только проблемка с русскими буквами.
Когда используем dll скомпилированную в Delphi то такая инструкция работает отлично
Код: Выделить всё
Wrd := CreateOleObject('Word.Application');
Wrd.Documents.Add;
Wrd.Selection.TypeText(UTF8ToAnsi('Лазарус')); 

т.е. благодаря UTF8ToAnsi получаем в документе нормальный русский текст, но когда делаем тоже самое просто через Lazarus, получается абракадабра, а с английскими буквами все в порядке...
кто знает в чем дело?

Добавлено спустя 2 часа 18 минут 4 секунды:
Ура!!! Разобрался! Изучил модуль ComObj и там синим по белому написано "we can't pass pascal ansistrings to COM routines so we've to convert them
to/from widestring. This array contains the mapping to do so" - короче говоря надо использовать WideString.
И тогджа правильный код будет выглядеть так:
Код: Выделить всё
var s: widestring;
...
s := Utf8ToAnsi('Лазарус это классно');
Wrd := CreateOleObject('Word.Application');
Wrd.Documents.Add;
Wrd.Selection.TypeText(s); 

Потому как по умолчанию идёт просто string.

Уверен, что многие это и так понимали, но я сразу не догнал... Так что написал это для таких же непонятливых :D
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Как работать с OLE объектом

Сообщение ViruZ » 30.10.2008 18:16:48

Наткнулся на грабли при попытке переноса функций из WordDll - создал тестовый пример - форма с Button, в обработчике OnClick код:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
  s:=Utf8ToAnsi('Тест ворда из Лазаруса');
  Wrd := CreateOleObject('Word.Application');

Wrd.Visible := true;   //<==грабли тут
Wrd.Documents.Add;
Wrd.Selection.Font.Size := 20;
Wrd.Selection.TypeText(s);
Wrd.ActiveDocument.SaveAs('c:\test.doc');
Wrd.ActiveDocument.Close;
Wrd.Quit;
end;

Если указанную строчку закомментировать, все работает. Пока еще не возможно присваивать значения свойствам или как это понимать?
Изменил обработчик
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=Utf8ToAnsi('Тест ворда из Лазаруса');
Wrd := CreateOleObject('Word.Application');
Wrd.Documents.Add;
Wrd.Selection.Font.Size := 20;//<==теперь грабли тут
Wrd.Selection.TypeText(s);
Wrd.ActiveDocument.SaveAs('c:\test.doc');
Wrd.ActiveDocument.Close;
Wrd.Quit;
end;


Каким образом можно присвоить значение свойству обьекта? Или пока еще подождать, когда работа с OLE-обьектами будет полностью реализована и продолжать разработку DLL&
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 236

Рейтинг@Mail.ru
cron