Форум: "Corba";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Внизсобытие в ком-объекте Найти похожие ветки
← →
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 вся ветка
Форум: "Corba";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.044 c