ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »