ВУЗ:
Составители:
Container: IConnectionPointContainer;
ConnectionPoint: IconnectionPoint;
begin
OleCheck(QueryInterface(IConnectionPointContainer, Container));
OleCheck(Container.FindConnectionPoint(AutoFactory.EventIID,
ConnectionPoint));
ConnectionPoint.EnumConnections(result);
end;
Ⱦɚɧɧɚɹ ɮɭɧɤɰɢɹ ɩɨɡɜɨɥɹɟɬ ɩɨɥɭɱɢɬɶ ɞɚɧɧɵɟ ɨɬ ɫɱɟɬɱɢɤɚ ɩɨɞɤɥɸɱɟ-
ɧɢɣ, ɩɨɫɥɟ ɱɟɝɨ ɧɭɠɧɨ «ɩɪɨɣɬɢɫɶ» ɩɨ ɜɫɟɦ ɩɨɞɤɥɸɱɟɧɢɹɦ:
var
Enum: IEnumConnections;
ConnectData: TConnectData;
Fetched: Cardinal;
<………………………>
begin {ɦɟɬɨɞ ɪɚɡɪɚɛɚɬɵɜɚɟɦɨɝɨ ɤɨɦɩɨɧɟɧɬɚ}
<…………………………….>
{ɨɛɪɚɛɨɬɤɚ ɫɨɛɵɬɢɣ ɩɪɢ ɩɨɞɤɥɸɱɟɧɢɢ ɦɧɨɠɟɫɬɜɚ ɤɥɢɟɧɬɨɜ}
Enum:=GetEnumerator;
if Enum <> nil then
begin
while Enum.Next(1,ConnectData,@Fetched) = S_OK do
if ConnectData.pUnk <> nil then
(ConnectData.pUnk as <ɢɧɬɟɪɮɟɣɫ ɫɨɛɵɬɢɣ>).<ɮɭɧɤɰɢɹ ɫɨɛɵ-
ɬɢɣ>
end;
<…………………………….>
end;
Ɋɚɫɫɦɨɬɪɢɦ ɞɚɥɟɟ ɪɟɚɥɢɡɚɰɢɸ ɩɪɢɥɨɠɟɧɢɣ, ɢɫɩɨɥɶɡɭɸɳɢɯ COM-
ɫɟɪɜɟɪɵ, ɩɨɞɞɟɪɠɢɜɚɸɳɢɟ ɫɨɛɵɬɢɹ.
ɉɪɢɦɟɱɚɧɢɟ 5.5.
Ɋɟɚɥɢɡɚɰɢɹ ɩɪɢɥɨɠɟɧɢɣ-ɤɥɢɟɧɬɨɜ ɞɥɹ COM-
ɫɟɪɜɟɪɨɜ, ɩɨɞɞɟɪɠɢɜɚɸɳɢɯ ɫɨɛɵɬɢɹ, ɭɩɪɨɳɟɧɚ ɬɟɦ, ɱɬɨ ɫ ɩɨɦɨɳɶɸ
ɞɢɚɥɨɝɨɜɨɝɨ ɨɤɧɚ ɢɦɩɨɪɬɚ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ ɦɨɠɧɨ ɫɝɟɧɟɪɢɪɨɜɚɬɶ
ɤɨɦɩɨɧɟɧɬ Delphi, ɹɜɥɹɸɳɢɣɫɹ ɨɛɨɥɨɱɤɨɣ, ɩɨɞɞɟɪɠɢɜɚɸɳɟɣ ɜɫɟ ɫɜɨɣɫɬ-
ɜɚ ɢ ɦɟɬɨɞɵ ɤɨɦɩɨɧɟɧɬɚ COM-ɫɟɪɜɟɪɚ.
Ⱦɥɹ ɬɨɝɨ ɱɬɨɛɵ ɨɛɪɚɛɚɬɵɜɚɬɶ ɫɨɛɵɬɢɹ ɩɨɞɤɥɸɱɟɧɧɨɝɨ ɤɨɦɩɨɧɟɧɬɚ,
ɧɟɨɛɯɨɞɢɦɨ ɫɨɡɞɚɬɶ ɜ ɩɪɢɥɨɠɟɧɢɢ ɨɛɴɟɤɬ, ɩɨɞɞɟɪɠɢɜɚɸɳɢɣ ɢɧɬɟɪɮɟɣɫ,
ɫɯɨɠɢɣ ɫ ɢɧɬɟɪɮɟɣɫɨɦ ɫɨɛɵɬɢɣ ɤɨɦɩɨɧɟɧɬɚ. Ɉɬɥɢɱɢɟ ɞɚɧɧɵɯ ɢɧɬɟɪɮɟɣ-
ɫɨɜ ɡɚɤɥɸɱɚɟɬɫɹ ɜ ɬɨɦ, ɱɬɨ ɜ ɤɨɦɩɨɧɟɧɬɟ ɢɫɩɨɥɶɡɭɟɬɫɹ ɢɧɬɟɪɮɟɣɫ ɞɢɫɩɟɬ-
ɱɟɪɢɡɚɰɢɢ (dispinterface), ɚ ɜ ɩɪɢɥɨɠɟɧɢɢ – ɨɛɵɱɧɵɣ ɢɧɬɟɪɮɟɣɫ.
53
ɉɪɢɦɟɱɚɧɢɟ 5.6. Ɉɛɪɚɬɢɬɟ ɜɧɢɦɚɧɢɟ, ɱɬɨ ɢɧɬɟɪɮɟɣɫɵ ɤɨɦɩɨɧɟɧɬɚ
ɢ ɨɛɴɟɤɬɚ ɜ ɩɪɢɥɨɠɟɧɢɢ ɞɨɥɠɧɵ ɢɦɟɬɶ ɨɞɢɧɚɤɨɜɵɣ IID. Ɍɚɤɠɟ ɞɨɥɠɧɚ
ɫɨɜɩɚɞɚɬɶ ɧɭɦɟɪɚɰɢɹ ɦɟɬɨɞɨɜ ɢɧɬɟɪɮɟɣɫɨɜ.
ɉɪɢ ɩɨɞɤɥɸɱɟɧɢɢ ɩɪɢɥɨɠɟɧɢɹ ɤ ɤɨɦɩɨɧɟɧɬɭ ɧɭɠɧɨ ɜɵɩɨɥɧɢɬɶ ɫɥɟ-
ɞɭɸɳɢɣ ɩɪɨɝɪɚɦɦɧɵɣ ɤɨɞ:
with <ɢɧɬɟɪɮɟɣɫ ɤɨɦɩɨɧɟɧɬɚ> as IConnectionPointContainer do
begin
FindConnectionPoint(<IID ɢɧɬɟɪɮɟɣɫɚ ɫɨɛɵɬɢɣ>, ESink);
OleCheck(ESink.Advise(<ɤɨɦɩɨɧɟɧɬ ɨɛɪɚɛɨɬɤɢ ɫɨɛɵɬɢɣ> as
IDispatch, ConnectId));
end;
ȼ ɞɚɧɧɨɦ ɩɪɨɝɪɚɦɦɧɨɦ ɤɨɞɟ ɜɵɩɨɥɧɹɸɬɫɹ ɫɥɟɞɭɸɳɢɟ ɞɟɣɫɬɜɢɹ:
1. ɂɳɟɬɫɹ ɬɨɱɤɚ «ɜɯɨɞɚ» ɞɥɹ ɫɨɨɬɜɟɬɫɬɜɭɸɳɟɝɨ ɨɛɪɚɛɨɬɱɢɤɚ ɫɨɛɵ-
ɬɢɣ.
2. ȼ ɤɨɦɩɨɧɟɧɬ ɩɟɪɟɞɚɟɬɫɹ ɭɤɚɡɚɬɟɥɶ ɧɚ ɢɧɬɟɪɮɟɣɫ ɨɛɴɟɤɬɚ ɩɨɞɤɥɸ-
ɱɟɧɢɹ ɞɥɹ ɨɛɪɚɛɨɬɤɢ ɫɨɛɵɬɢɣ. Ɏɭɧɤɰɢɹ ESink.Advise ɜ ɩɚɪɚɦɟɬɪɟ
ConnectId ɜɨɡɜɪɚɳɚɟɬ ɢɞɟɧɬɢɮɢɤɚɬɨɪ ɫɨɟɞɢɧɟɧɢɹ, ɤɨɬɨɪɵɣ ɛɭɞɟɬ
ɢɫɩɨɥɶɡɨɜɚɬɶɫɹ ɞɥɹ ɪɚɡɪɵɜɚ ɫɜɹɡɢ ɤɥɢɟɧɬɚ ɫ ɫɟɪɜɟɪɨɦ.
ɉɪɢ ɡɚɜɟɪɲɟɧɢɢ ɪɚɛɨɬɵ ɫ ɤɨɦɩɨɧɟɧɬɨɦ ɧɭɠɧɨ ɪɚɡɨɪɜɚɬɶ ɫɜɹɡɶ ɦɟ-
ɠɞɭ ɤɥɢɟɧɬɨɦ ɢ ɫɟɪɜɟɪɨɦ. Ⱦɥɹ ɷɬɢɯ ɰɟɥɟɣ ɢɫɩɨɥɶɡɭɟɬɫɹ ɫɥɟɞɭɸɳɢɣ ɩɪɨ-
ɝɪɚɦɦɧɵɣ ɤɨɞ:
with <ɢɧɬɟɮɟɣɫ ɤɨɦɩɨɧɟɧɬɚ> as IConnectionPointContainer do
begin
FindConnectionPoint(<IID ɢɧɬɟɪɮɟɣɫɚ ɫɨɛɵɬɢɣ>, ESink);
ESink.UnAdvise(ConnectId);
end;
Ⱥɧɚɥɨɝɢɱɧɨ, ɤɚɤ ɢ ɩɪɢ ɩɨɞɤɥɸɱɟɧɢɢ, ɢɳɟɬɫɹ ɬɨɱɤɚ «ɜɯɨɞɚ» ɞɥɹ ɫɨ-
ɨɬɜɟɬɫɬɜɭɸɳɟɝɨ ɨɛɪɚɛɨɬɱɢɤɚ ɫɨɛɵɬɢɣ, ɡɚɬɟɦ ɜɵɡɵɜɚɟɬɫɹ ɩɪɨɰɟɞɭɪɚ ɪɚɡ-
ɪɵɜɚ ɫɨɟɞɢɧɟɧɢɹ ESink.UnAdvise, ɜ ɤɨɬɨɪɭɸ ɩɟɪɟɞɚɟɬɫɹ ɢɞɟɧɬɢɮɢɤɚɬɨɪ
ɫɨɟɞɢɧɟɧɢɹ, ɩɨɥɭɱɟɧɧɵɣ ɜɨ ɜɪɟɦɹ ɩɨɞɤɥɸɱɟɧɢɹ ɤ ɫɟɪɜɟɪɭ.
ɉɪɢɦɟɱɚɧɢɟ 5.7.
ɇɟ ɡɚɛɵɜɚɣɬɟ ɨɬɤɥɸɱɚɬɶɫɹ ɨɬ ɫɟɪɜɟɪɨɜ, ɢɧɚɱɟ
ɫɢɫɬɟɦɚ COM ɛɭɞɟɬ ɫɱɢɬɚɬɶ, ɱɬɨ ɤɨɦɩɨɧɟɧɬ COM-ɫɟɪɜɟɪɚ ɟɳɟ ɢɫɩɨɥɶ-
ɡɭɟɬɫɹ ɢ ɧɟ ɫɦɨɠɟɬ ɟɝɨ ɜɵɝɪɭɡɢɬɶ.
VI. Ⱥɜɬɨɦɚɬɢɡɚɰɢɹ ɩɪɢɥɨɠɟɧɢɣ Microsoft Office
ȼɨ ɦɧɨɝɢɯ ɩɪɢɥɨɠɟɧɢɹɯ, ɫɜɹɡɚɧɧɵɯ ɫ ɮɨɪɦɢɪɨɜɚɧɢɟɦ ɞɨɤɭɦɟɧɬɨɜ ɢ
ɨɬɱɟɬɨɜ, ɧɟɪɟɞɤɨ ɩɪɢɦɟɧɹɸɬ ɫɟɪɜɢɫɵ, ɩɪɟɞɨɫɬɚɜɥɹɟɦɵɟ Microsoft Office.
ɉɪɨɝɪɚɦɦɵ, ɩɪɟɞɨɫɬɚɜɥɹɟɦɵɟ ɜ ɞɚɧɧɨɦ ɩɚɤɟɬɟ, ɪɚɡɪɚɛɨɬɚɧɵ ɩɨ ɬɟɯɧɨɥɨ-
54
Container: IConnectionPointContainer; ���������� 5.6. �������� ��������, ��� ���������� ����������
ConnectionPoint: IconnectionPoint; � ������� � ���������� ������ ����� ���������� IID. ����� ������
begin ��������� ��������� ������� �����������.
OleCheck(QueryInterface(IConnectionPointContainer, Container)); ��� ����������� ���������� � ���������� ����� ��������� ���-
OleCheck(Container.FindConnectionPoint(AutoFactory.EventIID, ������ ����������� ���:
ConnectionPoint));
ConnectionPoint.EnumConnections(result); with <��������� ����������> as IConnectionPointContainer do
end; begin
FindConnectionPoint(, ESink);
������ ������� ��������� �������� ������ �� �������� ��������- OleCheck(ESink.Advise(<��������� ��������� �������> as
���, ����� ���� ����� «��������» �� ���� ������������: IDispatch, ConnectId));
var end;
Enum: IEnumConnections;
ConnectData: TConnectData; � ������ ����������� ���� ����������� ��������� ��������:
Fetched: Cardinal; 1. ������ ����� «�����» ��� ���������������� ����������� ����-
<………………………> ���.
2. � ��������� ���������� ��������� �� ��������� ������� ������-
begin {����� ���������������� ����������} ����� ��� ��������� �������. ������� ESink.Advise � ���������
<…………………………….> ConnectId ���������� ������������� ����������, ������� �����
{��������� ������� ��� ����������� ��������� ��������} �������������� ��� ������� ����� ������� � ��������.
Enum:=GetEnumerator;
if Enum <> nil then ��� ���������� ������ � ����������� ����� ��������� ����� ��-
begin ��� �������� � ��������. ��� ���� ����� ������������ ��������� ���-
while Enum.Next(1,ConnectData,@Fetched) = S_OK do �������� ���:
if ConnectData.pUnk <> nil then with <�������� ����������> as IConnectionPointContainer do
(ConnectData.pUnk as <��������� �������>).<������� ����- begin
���> FindConnectionPoint(, ESink);
end; ESink.UnAdvise(ConnectId);
<…………………………….> end;
end;
����������, ��� � ��� �����������, ������ ����� «�����» ��� ��-
���������� ����� ���������� ����������, ������������ COM- �������������� ����������� �������, ����� ���������� ��������� ���-
�������, �������������� �������. ���� ���������� ESink.UnAdvise, � ������� ���������� �������������
����������, ���������� �� ����� ����������� � �������.
���������� 5.5. ���������� ����������-�������� ��� COM-
��������, �������������� �������, �������� ���, ��� � ������� ���������� 5.7. �� ��������� ����������� �� ��������, �����
����������� ���� ������� ���������� ����� ����� ������������� ������� COM ����� �������, ��� ��������� COM-������� ��� ������-
��������� Delphi, ���������� ���������, �������������� ��� ������- ������ � �� ������ ��� ���������.
�� � ������ ���������� COM-�������.
��� ���� ����� ������������ ������� ������������� ����������, VI. ������������� ���������� Microsoft Office
���������� ������� � ���������� ������, �������������� ���������,
�� ������ �����������, ��������� � ������������� ���������� �
������ � ����������� ������� ����������. ������� ������ ��������-
�������, ������� ��������� �������, ��������������� Microsoft Office.
��� ����������� � ���, ��� � ���������� ������������ ��������� ������-
���������, ��������������� � ������ ������, ����������� �� �������-
��������� (dispinterface), � � ���������� – ������� ���������.
53 54
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »
