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

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

событие в ком-объекте [Delphi, Windows]


AlexeyMir ©   (2005-09-06 17:40:00) 

Помогите. Я подключаю ком-объект
oleQQ:=CreateOleObject('oleQQer.oleQQ');
Как мне повесить функцию на событие в ком-объекте?

Пробовал
oleQQ.OnThr:=Proc1

procedure Proc1;
begin  
....  
end;

Не работает.


Набережных С.   (2005-09-14 20:22:00) [1]

>AlexeyMir
Ну так и надо создавать класс TAxECRClass98, CreateOleObject тут неуместна. Либо посмотреть, как работа с событием реализована в этом классе, и делать так-же.


AlexeyMir   (2005-09-14 11:05:00) [2]

У меня нет кода OLE сервера, у меня есть *_TLB.pas

 _IAxECRClass98Events = dispinterface;
 IAxECRClass98 = interface;
 IAxECRClass98Disp = dispinterface;

 AxECRClass98 = IAxECRClass98;

 _IAxECRClass98Events = dispinterface
   procedure OnTrxComplete(auth_code: LongWord); dispid 1;

 TAxECRClass98OnTrxComplete = procedure(ASender: TObject; auth_code: LongWord) of object;
TAxECRClass98 = class(TOleControl)

 private
    FOnTrxComplete: TAxECRClass98OnTrxComplete;
 published
    property OnTrxComplete: TAxECRClass98OnTrxComplete read FOnTrxComplete write FOnTrxComplete;

implementation

uses ComObj;

procedure TAxECRClass98.InitControlData;
const
 CEventDispIDs: array [0..0] of DWORD = (
   $00000001);
 CControlData: TControlData2 = (
   ClassID: '{EFA160AD-6EBB-11D8-8ED8-B87A66FC103A}';
   EventIID: '{EFA160AE-6EBB-11D8-8ED8-B87A66FC103A}';
   EventCount: 1;
   EventDispIDs: @CEventDispIDs;
   LicenseKey: nil (*HR:$80004002*);
   Flags: $00000000;
   Version: 401);
begin
 ControlData := @CControlData;
 TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnTrxComplete) - Cardinal(Self);
end;

Мне нужно повесить функцию DoDo на событие OnTrxComplete


kblc   (2005-09-12 10:04:00) [3]

Приведи код OLE сервера, особенно объявление метода OnThr.


AlexeyMir   (2005-09-09 14:38:00) [4]

Так нет. Я подключаю ОЛЕшку, в которой есть событие OnThr, на которое я хочу повесить процедуру DoDo

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure DoDo(Sender: TObject);
....

var
 Form1: TForm1;
 oleQQ: OleVariant;

procedure TForm1.Button1(Sender: TObject);
begin
oleQQ:=CreateOleObject('oleQQer.oleQQ');
oleQQ.OnThr:=DoDo;

...
end;

procedure TForm1.DoDo;
begin
ShowMessage('wrtg');
end;

Так вот ето не работает. событие OnThr ничего не возвращает(т.е параметров нема)
Я догадываюсь, что дело в Sender:TObject. Т.к. oleQQ не принадлежит форме, но как сделать правильно не знаю...


kblc   (2005-09-07 22:11:00) [5]

Не знаю как у тебя но у меня всё работает

 ...

 private
   prOnThr: TNotifyEvent;
 public
 property OnThr: TNotifyEvent read prOnThr write prOnThr;

procedure *.Initialize;
begin
 prOnThr:=nil;
end;

...

procedure *.DoSomething();
begin
 if Assigned(OnThr) then
    OnThr(*);
end;


Наверх

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