Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

событие в ком-объекте   Найти похожие ветки 

 
AlexeyMir   (2005-09-06 17:40) [0]

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

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

procedure Proc1;
begin  
....  
end;

Не работает.


 
kblc ©   (2005-09-07 22:11) [1]

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

 ...

 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;


 
AlexeyMir   (2005-09-09 14:38) [2]

Так нет. Я подключаю ОЛЕшку, в которой есть событие 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-12 10:04) [3]

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


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

У меня нет кода 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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.066 c
15-1163334763
ProgRAMmer Dimonych
2006-11-12 15:32
2006.12.03
Судя по реакции гугла, вопрос сложный.


15-1163494338
Calibr
2006-11-14 11:52
2006.12.03
Порт сети?


15-1163586466
YOjik
2006-11-15 13:27
2006.12.03
Загадка


15-1163596447
novill
2006-11-15 16:14
2006.12.03
Кто-нибудь пользуется Castalia 4.2?


6-1153064341
Route
2006-07-16 19:39
2006.12.03
IdIRC - dcc