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