Адрес этой странички : http://doc-prg.narod.ru/art_00701/art_00701-02.htm 
Дата обновления: 15.05.2009

(c) Sergey Popov, Usinsk, Komi, 2007

© 15.05.2009 Сергей Попов

Rational Rose.
Информационный обмен с использованием механизма OLE Automation.

Модель: открыть и получить ссылку.

 
Откроем Rational Rose (в качестве приложения, но не OLE Automation server).

Создадим пустую модель, выберем визуальный объект типа Note :

Разместим его с соотв. надписью :

Сохраним модель в файл с именем : rrose_example.mdl и закроем Rational Rose

 

Чтобы загрузить модель из файла и получить для нее ссылку, можно использовать след. код:

Листинг 3.1 

function RRose_Model_Load(RRose : variant; fn_Model : string = ''; YesReadOnly : boolean = true) : variant;
//Загрузить модель из файла fn_Model и получить на нее ссылку
//RRose - ссылка на Rational Rose (OLE Automation server)
//YesReadOnly - если TRUE, то открыть модель только для чтения
begin
    Result:=UnAssigned;
    if not VarIsEmpty(RRose) then begin
        fn_Model:=trim(fn_Model);
        if length(fn_Model)>0 then begin
            if FileExists(fn_Model) then begin
                //загружаем модель
                Result:=RRose.OpenModel(fn_Model);
                //Устанвливаем (или сбрасываем) флаг ReadOnly для модели
                Result.Modifiable(not YesReadOnly);
            end;
        end;
    end;
end;

 

Чтобы получить ссылку на текущую модель, загруженную в Rational Rose, можно использовать след. код:

Листинг 3.2 

function RRose_Model_Get(RRose : variant) : variant;
//Получить ссылку на текущую модель Rational Rose
//RRose - ссылка на Rational Rose (OLE Automation server)
begin
    Result:=UnAssigned;
    if not VarIsEmpty(RRose) then begin
        Result:=RRose.CurrentModel;
    end;
end;

 

Посмотрим, как это работает на практике.

 

Откроем проект из нашего прошлого примера и доработаем его след. образом.

1. Добавим в секцию public еще одну переменную.

Листинг 3.3 

public
    { Public declarations }
    //ссылка на текущую модель Rational Rose
    model_ole : variant;
    ...
    ...
end;

2. Добавим на форму еще 3 компонента: кнопку, TLabel и TOpenDialog:

 

3. Создадим обработчик события "нажатие на кнопку "3" (загрузить модель из файла).

Листинг 3.4 

procedure TForm1.btn3Click(Sender: TObject);
begin
    if not VarIsEmpty(rrose_ole) then begin
        if dlgOpen1.Execute then begin
            //сначала закрываем текущую модель, если она существует
            RRose_Model_Close(model_ole);

            lbl_fnModel.Caption:=ExtractFileName(dlgOpen1.FileName);

            //теперь делаем попытку загрузить модель из файла и получить на нее ссылку
            model_ole := RRose_Model_Load(rrose_ole, dlgOpen1.FileName, True);

        end;
    end
    else begin
        ShowMessage('Нет соединения с Rational Rose');
    end;
end;

 

4. Создадим обработчик события "нажатие на кнопку "4" (выгрузить текущую модель).

Листинг 3.5 

procedure TForm1.btn4Click(Sender: TObject);
begin

    RRose_Model_Close(model_ole);

    lbl_fnModel.Caption:='';

end;

 

 

Теперь посмотрим, как все это работает ...

Скомилируем, запустим наше приложение и откроем Rational Rose.

Нажмем на кнопку "3" и выберем файл с нашей моделью (rrose_example.mdl).

После выбора файла, следует запрос (со стороны Rational Rose) на подтверждение о закрытии текущей модели :

 

И, далее, загружается выбранная модель :

 

 

Как видно, загрузилась именно наша модель ...


Здесь следует отметить, что по "нажатию" на кнопку "2" (закрыть Rational Rose), запрос на подтверждение закрытия текущей модели уже не появляется.

Это связано с тем, модель мы открыли с флагом "только для чтения".

Теперь можно доработать функцию RRose_Open таким образом, чтобы нужная модель могла загружаться по запуске Rational Rose.

Листинг 3.6 

function RRose_Open(YesVisible : boolean = true; fn_Model : string = ''; YesReadOnly : boolean = true) : variant;
//Открыть Rational Rose и загрузить модель fn_Model (если существует) и вернуть ссылку на него
//(как OLE Automation Server)
//YesReadOnly - если TRUE, то открыть модель только для чтения
Var
    oleModel : variant;
begin
    Result:= CreateOleObject('Rose.Application');
    fn_Model:=trim(fn_Model);
    if length(fn_Model)>0 then begin
        if FileExists(fn_Model) then begin
            oleModel:=Result.OpenRoseModel(fn_Model,false);
            oleModel.Modifiable(not YesReadOnly);
        end;
    end;
    Result.Visible:=YesVisible;
end;

 

 

 

Исходные тексты иллюстрирующего примера здесь:  rrose_ole_02.zip (260 кб)


 Назад ...

 

© 15.05.2009 Сергей Попов

 


Hosted by uCoz
-->