ВУЗ:
Составители:
Intialize ɢ EventSinkChanged ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɪɟɚɥɢɡɭɸɬɫɹ ɫɪɟɞɨɣ ɩɪɨɝɪɚɦ-
ɦɢɪɨɜɚɧɢɹ Delphi:
procedure <ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ>.EventSinkChanged(const
EventSink: IUnknown);
begin
FEvents := EventSink as <ɢɧɬɟɪɮɟɣɫ ɫɨɛɵɬɢɣ>;
if FConnectionPoint <> nil then
FSinkList := FConnectionPoint.SinkList;
end;
procedure <ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ>.Initialize;
begin
inherited Initialize;
FConnectionPoints := TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo <> nil then
FConnectionPoint := FConnectionPoints.CreateConnectionPoint(
AutoFactory.EventIID, ckSingle, EventConnect)
else FConnectionPoint := nil;
end;
Ʉɨɝɞɚ ɫɨɡɞɚɟɬɫɹ ɤɨɦɩɨɧɟɧɬ ɚɜɬɨɦɚɬɢɡɚɰɢɢ ɫ ɩɨɞɞɟɪɠɤɨɣ ɫɨɛɵɬɢɣ, ɜ
ɛɢɛɥɢɨɬɟɤɟ ɬɢɩɨɜ ɜɜɨɞɹɬɫɹ ɞɜɚ ɢɧɬɟɪɮɟɣɫɚ: ɢɧɬɟɪɮɟɣɫ ɤɨɦɩɨɧɟɧɬɚ ɢ ɢɧ-
ɬɟɪɮɟɣɫ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ ɫɨɛɵɬɢɣ (ɨɛɵɱɧɨ ɭ ɧɟɝɨ ɨɤɨɧɱɚɧɢɟ Events).
ɉɪɢɦɟɱɚɧɢɟ 5.3.
ɂɧɬɟɪɮɟɣɫɨɦ ɫɨɛɵɬɢɣ ɦɨɠɟɬ ɛɵɬɶ ɥɸɛɨɣ ɢɧ-
ɬɟɪɮɟɣɫ ɞɢɫɩɟɬɱɟɪɢɡɚɰɢɢ, ɧɨ ɬɨɝɞɚ ɩɪɢɞɟɬɫɹ ɜɪɭɱɧɭɸ ɟɝɨ ɭɫɬɚɧɨɜɢɬɶ ɜ
ɋɨ-ɤɥɚɫɫ (ɡɚɤɥɚɞɤɚ implements ɜ ɛɢɛɥɢɨɬɟɤɟ ɬɢɩɨɜ) ɢ ɡɚɞɚɬɶ ɟɦɭ ɡɧɚɱɟ-
ɧɢɹ Source ɢ Default (ɨɫɧɨɜɧɨɣ ɢɧɬɟɪɮɟɣɫ ɛɭɞɟɬ ɩɨɞɞɟɪɠɢɜɚɬɶ Default).
FɋonnectionPoints – ɚɝɪɟɝɢɪɨɜɚɧɧɵɣ ɨɛɴɟɤɬ, ɜ ɤɨɬɨɪɨɦ ɪɟɚɥɢɡɨɜɚɧ
ɢɧɬɟɪɮɟɣɫ IConnectionPointContainer, ɤɨɬɨɪɵɣ ɧɟɨɛɯɨɞɢɦ ɞɥɹ ɩɨɞɞɟɪɠɤɢ
ɦɟɯɚɧɢɡɦɚ ɫɨɛɵɬɢɣ.
FConnectionPoint – ɷɥɟɦɟɧɬ ɨɛɴɟɤɬɚ FɋonnectionPoints.
FSinkList – ɫɩɢɫɨɤ ɢɧɬɟɪɮɟɣɫɨɜ ɤɥɢɟɧɬɨɜ.
FEvents – ɢɧɬɟɪɮɟɣɫ ɨɛɪɚɬɧɨɝɨ ɜɵɡɨɜɚ. ȿɫɥɢ ɧɭɠɧɨ ɜɵɡɜɚɬɶ ɮɭɧɤ-
ɰɢɸ, ɨɬɜɟɱɚɸɳɭɸ ɡɚ ɤɚɤɨɟ-ɥɢɛɨ ɫɨɛɵɬɢɟ, ɬɨ ɧɟɨɛɯɨɞɢɦɨ ɧɚɩɢɫɚɬɶ ɫɥɟ-
ɞɭɸɳɢɣ ɤɨɞ:
FEvents.< ɮɭɧɤɰɢɹ ɫɨɛɵɬɢɹ>;
ɉɪɢɦɟɱɚɧɢɟ 5.4.
ɉɟɪɟɞ ɬɟɦ, ɤɚɤ ɜɵɡɜɚɬɶ ɮɭɧɤɰɢɸ ɫɨɛɵɬɢɹ, ɢɫ-
ɩɨɥɶɡɭɣɬɟ ɩɪɨɜɟɪɤɭ ɧɚɥɢɱɢɹ ɫɫɵɥɤɢ ɜ ɩɟɪɟɦɟɧɧɨɣ FEvents:
if Assigned(FEvents) then FEvents.< ɮɭɧɤɰɢɹ ɫɨɛɵɬɢɹ>;
ɗɬɨ ɧɟɨɛɯɨɞɢɦɨ ɞɥɹ ɢɡɛɟɠɚɧɢɹ ɨɲɢɛɨɤ, ɤɨɝɞɚ ɤɨɦɩɨɧɟɧɬ ɧɟ ɩɨɥɭ-
ɱɢɥ ɨɬ ɤɥɢɟɧɬɚ ɢɧɬɟɪɮɟɣɫ ɨɛɪɚɬɧɨɝɨ ɜɵɡɨɜɚ.
51
ȼ Delphi ɚɜɬɨɦɚɬɢɱɟɫɤɢ ɫɨɡɞɚɟɬɫɹ ɩɪɨɝɪɚɦɦɧɵɣ ɤɨɞ, ɩɨɞɞɟɪɠɢ-
ɜɚɸɳɢɣ ɦɟɯɚɧɢɡɦ ɨɛɪɚɛɨɬɤɢ ɫɨɛɵɬɢɣ ɬɨɥɶɤɨ ɞɥɹ ɩɟɪɜɨɝɨ ɜ ɩɨɪɹɞɤɟ
ɩɨɞɤɥɸɱɟɧɢɣ ɤɥɢɟɧɬɚ. ɑɬɨɛɵ ɛɵɥɚ ɜɨɡɦɨɠɧɨɫɬɶ ɩɟɪɟɞɚɜɚɬɶ ɫɨɛɵɬɢɹ
ɦɧɨɠɟɫɬɜɭ ɩɨɞɤɥɸɱɟɧɧɵɯ ɤɥɢɟɧɬɨɜ, ɧɭɠɧɨ ɜɧɟɫɬɢ ɧɟɤɨɬɨɪɵɟ ɢɡɦɟɧɟ-
ɧɢɹ ɜ ɩɪɨɝɪɚɦɦɧɵɣ ɤɨɞ.
ȼɨ-ɩɟɪɜɵɯ, ɞɥɹ ɜɨɡɦɨɠɧɨɫɬɢ ɩɨɥɭɱɟɧɢɹ ɫɫɵɥɤɢ ɧɚ ɞɚɧɧɵɣ COM-
ɫɟɪɜɟɪ ɫ ɩɨɦɨɳɶɸ ɮɭɧɤɰɢɢ GetOleObject ɟɝɨ ɧɭɠɧɨ ɡɚɪɟɝɢɫɬɪɢɪɨɜɚɬɶ ɜ
ɬɚɛɥɢɰɟ ɜɵɩɨɥɧɹɟɦɵɯ ɨɛɴɟɤɬɨɜ Windows. Ⱦɥɹ ɷɬɢɯ ɰɟɥɟɣ ɜ ɤɥɚɫɫ ɩɪɨɟɤ-
ɬɢɪɭɟɦɨɝɨ ɤɨɦɩɨɧɟɧɬɚ ɧɭɠɧɨ ɞɨɛɚɜɢɬɶ ɩɨɥɟ FObjectID: integer ɞɥɹ ɯɪɚɧɟ-
ɧɢɹ ɢɞɟɧɬɢɮɢɤɚɬɨɪɚ, ɚ ɜ ɩɪɨɰɟɞɭɪɭ Intitialize ɞɨɛɚɜɢɬɶ ɩɪɨɰɟɞɭɪɭ ɪɟɝɢɫɬ-
ɪɚɰɢɢ ɤɨɦɩɨɧɟɧɬɚ:
RegisterActiveObject(self as Iunknown, <CLSID ɤɨɦɩɨɧɟɧɬɚ>, AC-
TIVEOBJECT_WEAK, FObjectID)
Ⱦɥɹ ɬɨɝɨ ɱɬɨɛɵ ɭɞɚɥɢɬɶ ɤɨɦɩɨɧɟɧɬ ɢɡ ɬɚɛɥɢɰɵ ɜɵɩɨɥɧɹɟɦɵɯ ɨɛɴɟɤ-
ɬɨɜ Windows, ɧɭɠɧɨ ɫɨɡɞɚɬɶ ɦɟɬɨɞ Destroy ɢ ɜ ɧɟɦ ɜɵɡɜɚɬɶ ɮɭɧɤɰɢɸ
RevokeActiveObject:
destructor <ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ>.Destroy;
begin
RevokeActiveObject(FObjectID, nil);
end;
ɉɪɢ ɫɨɡɞɚɧɢɢ ɷɥɟɦɟɧɬɚ FConnectionPoint ɫ ɩɨɦɨɳɶɸ ɦɟɬɨɞɚ
CreateConnectionPoint ɜ ɤɚɱɟɫɬɜɟ ɩɪɟɞɩɨɫɥɟɞɧɟɝɨ ɩɚɪɚɦɟɬɪɚ ɩɟɪɟɞɚɟɬɫɹ ɧɟ
ckSingle (ɡɚɞɚɧɧɵɣ ɩɨ ɭɦɨɥɱɚɧɢɸ), ɚ ckMulti. ȼ ɢɬɨɝɟ ɪɟɚɥɢɡɚɰɢɹ ɦɟɬɨɞɚ
Initialize ɛɭɞɟɬ ɫɥɟɞɭɸɳɚɹ:
procedure <ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ>.Initialize;
begin
inherited Initialize;
FConnectionPoints := TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo <> nil then
FConnectionPoint := FConnectionPoints.CreateConnectionPoint
(AutoFactory.EventIID, ckMulti, EventConnect)
else FConnectionPoint := nil;
RegisterActiveObject(self as Iunknown, <CLSID ɤɨɦɩɨɧɟɧɬɚ>, AC-
TIVEOBJECT_WEAK, FObjectID)
end;
Ⱦɥɹ ɬɨɝɨ ɱɬɨɛɵ ɨɬɫɥɟɠɢɜɚɬɶ ɦɧɨɠɟɫɬɜɨ ɩɚɪɚɥɥɟɥɶɧɵɯ ɩɨɞɤɥɸɱɟɧɢɣ,
ɧɭɠɧɨ ɪɟɚɥɢɡɨɜɚɬɶ ɫɥɟɞɭɸɳɭɸ ɮɭɧɤɰɢɸ:
function <ɢɦɹ ɤɨɦɩɨɧɟɧɬɚ>.GetEnumerator: IEnumConnections;
var
52
Intialize � EventSinkChanged ������������� ����������� ������ �������- � Delphi ������������� ��������� ����������� ���, ��������-
��������� Delphi: ������ �������� ��������� ������� ������ ��� ������� � �������
procedure <��� ����������>.EventSinkChanged(const ����������� �������. ����� ���� ����������� ���������� �������
EventSink: IUnknown); ��������� ������������ ��������, ����� ������ ��������� ������-
begin ��� � ����������� ���.
FEvents := EventSink as <��������� �������>; ��-������, ��� ����������� ��������� ������ �� ������ COM-
if FConnectionPoint <> nil then ������ � ������� ������� GetOleObject ��� ����� ���������������� �
FSinkList := FConnectionPoint.SinkList; ������� ����������� �������� Windows. ��� ���� ����� � ����� �����-
end; ��������� ���������� ����� �������� ���� FObjectID: integer ��� �����-
��� ��������������, � � ��������� Intitialize �������� ��������� ������-
procedure <��� ����������>.Initialize; ����� ����������:
begin RegisterActiveObject(self as Iunknown, , AC-
inherited Initialize; TIVEOBJECT_WEAK, FObjectID)
FConnectionPoints := TConnectionPoints.Create(Self); ��� ���� ����� ������� ��������� �� ������� ����������� �����-
if AutoFactory.EventTypeInfo <> nil then ��� Windows, ����� ������� ����� Destroy � � ��� ������� �������
FConnectionPoint := FConnectionPoints.CreateConnectionPoint( RevokeActiveObject:
AutoFactory.EventIID, ckSingle, EventConnect)
else FConnectionPoint := nil; destructor <��� ����������>.Destroy;
end; begin
����� ��������� ��������� ������������� � ���������� �������, � RevokeActiveObject(FObjectID, nil);
���������� ����� �������� ��� ����������: ��������� ���������� � ��- end;
������� ��������������� ������� (������ � ���� ��������� Events). ��� �������� �������� FConnectionPoint � ������� ������
���������� 5.3. ����������� ������� ����� ���� ����� ��- CreateConnectionPoint � �������� �������������� ��������� ���������� ��
������� ���������������, �� ����� �������� ������� ��� ���������� � ckSingle (�������� �� ���������), � ckMulti. � ����� ���������� ������
��-����� (�������� implements � ���������� �����) � ������ ��� �����- Initialize ����� ���������:
��� Source � Default (�������� ��������� ����� ������������ Default). procedure <��� ����������>.Initialize;
F�onnectionPoints – �������������� ������, � ������� ���������� begin
��������� IConnectionPointContainer, ������� ��������� ��� ��������� inherited Initialize;
��������� �������. FConnectionPoints := TConnectionPoints.Create(Self);
FConnectionPoint – ������� ������� F�onnectionPoints. if AutoFactory.EventTypeInfo <> nil then
FSinkList – ������ ����������� ��������. FConnectionPoint := FConnectionPoints.CreateConnectionPoint
FEvents – ��������� ��������� ������. ���� ����� ������� ����- (AutoFactory.EventIID, ckMulti, EventConnect)
���, ���������� �� �����-���� �������, �� ���������� �������� ���- else FConnectionPoint := nil;
������ ���: RegisterActiveObject(self as Iunknown, , AC-
TIVEOBJECT_WEAK, FObjectID)
FEvents.< ������� �������>; end;
���������� 5.4. ����� ���, ��� ������� ������� �������, ��- ��� ���� ����� ����������� ��������� ������������ �����������,
��������� �������� ������� ������ � ���������� FEvents: ����� ����������� ��������� �������:
if Assigned(FEvents) then FEvents.< ������� �������>; function <��� ����������>.GetEnumerator: IEnumConnections;
��� ���������� ��� ��������� ������, ����� ��������� �� ����-
��� �� ������� ��������� ��������� ������. var
51 52
Страницы
- « первая
- ‹ предыдущая
- …
- 24
- 25
- 26
- 27
- 28
- …
- следующая ›
- последняя »
