![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
событие в ком-объекте [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;