Основы COM-технологий. Артемов М.А. и др. - 16 стр.

UptoLike

Составители: 

31
2.10.2. ɋɨɡɞɚɧɢɟ ɤɥɢɟɧɬɚ
type
TMainForm = class(TForm)
lb: TListBox;
bCreate: TButton;
bRun: TButton;
sg: TStringGrid;
procedure bCreateClick(Sender: TObject);
procedure bRunClick(Sender: TObject);
private
{ Private declarations }
public
v: IVectSrv;
vm: IMatrixSrv;
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
var X, Y, A , B: olevariant; // ɇɭɠɧɵ ɞɥɹ ɩɟɪɟɞɚɱɢ ɜ COM ɫɟɪɜɟɪ
DynArr : array of array of integer;
// ɞɢɧɚɦɢɱɟɫɤɢɣ ɞɜɭɦɟɪɧɵɣ ɦɚɫɫɢɜ
{$R *.dfm}
procedure TMainForm.bCreateClick(Sender: TObject);
var
I, J: Integer;
begin
// Ⱦɥɹ ɢɥɥɸɫɬɪɚɰɢɢ ɡɞɟɫɶ ɩɪɢɦɟɧɟɧɵ ɞɜɚ ɫɩɨɫɨɛɚ.
// Ɉɞɧɨɦɟɪɧɵɣ ɦɚɫɫɢɜ ɫɨɡɞɚɟɬɫɹ ɤɚɤ ɜɚɪɢɚɧɬɧɵɣ.
// Ɇɚɬɪɢɰɚ - ɤɚɤ ɞɢɧɚɦɢɱɟɫɤɢɣ ɞɜɭɦɟɪɧɵɣ ɦɚɫɫɢɜ.
// Ɂɚɞɚɟɦ ɞɥɢɧɭ 2 ɧɚ 2 ɞɜɭɦɟɪɧɨɝɨ ɞɢɧɚɦɢɱɟɫɤɨɝɨ ɦɚɫɫɢɜɚ
SetLength (DynArr,2,2);
// .. ɢ ɡɚɩɨɥɧɹɟɦ (ɥɭɱɲɟ ɷɬɨ ɫɞɟɥɚɬɶ ɩɨ-ɞɪɭɝɨɦɭ - ɢɡ ɮɚɣɥɚ, ɫɩɢɫɤɚ ɢɥɢ
ɫɟɬɤɢ)
DynArr[0,0]:=1;
DynArr[1,1]:=3;
32
DynArr[0,1]:=4;
DynArr[1,0]:=2;
// ȼɵɜɨɞɢɦ ɜ ɫɟɬɤɭ
sg.ColCount := 2;
sg.RowCount := 2;
with sg do
for I := 0 to ColCount - 1 do
for J:= 0 to RowCount - 1 do
Cells[J,I] := IntToStr(DynArr[I,J]);
// ɋɨɡɞɚɟɦ ɨɞɧɨɦɟɪɧɵɣ ɜɚɪɢɚɧɬɧɵɣ ɦɚɫɫɢɜ
X := VarArrayOf ([1.2, 2.5, 3, 4.8]);
// ȼɵɜɨɞɢɦ ɜ ListBox
lb.Clear;
for i:=0 to VarArrayHighBound(X,1) do
lb.Items.Add(FloatToStr(X[i]));
// Ɂɚɩɭɫɤɚɟɦ ɫɟɪɜɟɪ
V := CreateComObject(Class_VectSrv) as IVectSrv;
if V=Nil then
ShowMessage ('ɋɟɪɜɟɪ ɧɟ ɧɚɣɞɟɧ!');
end;
procedure TMainForm.bRunClick(Sender: TObject);
var
I, J: Integer;
begin
if V <> Nil then
begin
try
// ȼɵɡɵɜɚɟɦ ɦɟɬɨɞ ɢɧɬɟɪɮɟɣɫɚ (ɦɟɧɹɟɬ ɦɟɫɬɚɦɢ ɷɥɟɦɟɧɬɵ)
V.ChangeVect(x,y);
// ȼɵɜɨɞɢɦ ɪɟɡɭɥɶɬɚɬ
lb.Clear;
for i:=0 to VarArrayHighBound(Y,1) do
lb.Items.Add(FloatToStr(Y[i]));
Vm := V as IMatrixSrv; // Ɉɛɪɚɳɚɟɦɫɹ ɤ ɞɪɭɝɨɦɭ ɢɧɬɟɪɮɟɣɫɭ
A := DynArr; // Ɂɚɩɢɫɵɜɚɟɦ ɜ ɜɚɪɢɚɧɬ ɞɢɧɚɦɢɱɟɫɤɢɣ ɦɚɫɫɢɜ
Vm.Trans(A,B); // ȼɵɡɵɜɚɟɦ ɦɟɬɨɞ (ɬɪɚɧɫɩɨɧɢɪɨɜɚɧɢɟ)
// ȼɵɜɨɞɢɦ ɜ ɫɟɬɤɭ
with SG do
for I := 0 to ColCount - 1 do
for J:= 0 to RowCount - 1 do
                                                                               DynArr[0,1]:=4;
                                                                               DynArr[1,0]:=2;
                        2.10.2. �������� �������                                 // ������� � �����
                                                                               sg.ColCount := 2;
type
                                                                               sg.RowCount := 2;
  TMainForm = class(TForm)
                                                                               with sg do
    lb: TListBox;
                                                                                  for I := 0 to ColCount - 1 do
    bCreate: TButton;
                                                                                     for J:= 0 to RowCount - 1 do
    bRun: TButton;
                                                                                        Cells[J,I] := IntToStr(DynArr[I,J]);
    sg: TStringGrid;
                                                                                      // ������� ���������� ���������� ������
    procedure bCreateClick(Sender: TObject);
                                                                               X := VarArrayOf ([1.2, 2.5, 3, 4.8]);
   procedure bRunClick(Sender: TObject);
                                                                                    // ������� � ListBox
  private
                                                                               lb.Clear;
   { Private declarations }
                                                                               for i:=0 to VarArrayHighBound(X,1) do
  public
                                                                                 lb.Items.Add(FloatToStr(X[i]));
   v: IVectSrv;
                                                                                 // ��������� ������
   vm: IMatrixSrv;
                                                                               V := CreateComObject(Class_VectSrv) as IVectSrv;
   { Public declarations }
                                                                               if V=Nil then
  end;
                                                                                  ShowMessage ('������ �� ������!');
                                                                             end;
var
 MainForm: TMainForm;
                                                                             procedure TMainForm.bRunClick(Sender: TObject);
                                                                             var
implementation
                                                                              I, J: Integer;
                                                                             begin
var X, Y, A , B: olevariant; // ����� ��� �������� � COM ������
                                                                              if V <> Nil then
   DynArr : array of array of integer;
                                                                              begin
                  // ������������ ��������� ������
                                                                                 try
                                                                                       // �������� ����� ���������� (������ ������� ��������)
{$R *.dfm}
                                                                                   V.ChangeVect(x,y);
procedure TMainForm.bCreateClick(Sender: TObject);
                                                                                     // ������� ���������
var
                                                                                  lb.Clear;
 I, J: Integer;
                                                                                  for i:=0 to VarArrayHighBound(Y,1) do
begin
                                                                                    lb.Items.Add(FloatToStr(Y[i]));
    // ��� ����������� ����� ��������� ��� �������.
                                                                                  Vm := V as IMatrixSrv; // ���������� � ������� ����������
    // ���������� ������ ��������� ��� ����������.
                                                                                  A := DynArr; // ���������� � ������� ������������ ������
    // ������� - ��� ������������ ��������� ������.
                                                                                  Vm.Trans(A,B); // �������� ����� (����������������)
    // ������ ����� 2 �� 2 ���������� ������������� �������
  SetLength (DynArr,2,2);
                                                                                  // ������� � �����
    // .. � ��������� (����� ��� ������� ��-������� - �� �����, ������ ���
                                                                                  with SG do
�����)
                                                                                  for I := 0 to ColCount - 1 do
  DynArr[0,0]:=1;
                                                                                    for J:= 0 to RowCount - 1 do
  DynArr[1,1]:=3;
                                    31                                                                             32