Конференция "Corba" » Delphi 7 + Visio 2003
 
  • zero-g © (07.10.06 08:08) [0]
    Доброго времени суток коллеги...
    Сидя как то вечером решил покавырять то что написано в теме..
    У меня такая проблемма...
    делю Menu->Component->Import ActiveX Control -> Microsoft Visio Drawing.
    Сделал, все нормально... кидаю компанент на форму, получаю рабочую область Visio, а как мне панели инструментов выташить??????

    Панели с линииями там, квадратиками и тд...
    Я часа два убил.. так нифига и не понял....

    Помогите кто чем сможет, пожалуйста :)
  • zero-g © (08.10.06 09:14) [1]
    Никто не работал чтоли ?
  • zero-g © (09.10.06 04:40) [2]
    :'(
  • zero-g © (13.10.06 01:37) [3]
    Никто не работал с таким ?

    ....

    в общем я поковырял...
    сохранить вроде сохраняю в файл

    form1.DrawingControl1.Window.Document.SaveAs('c:\q.vsd');

    Открыть немогу...
    Верней как.. он открывате.. но что куда без понятия...
    Как я понял визио открыват в памяти.. кудато... но не мне на форму...
    а вот как допустим открыть на форму.. вообще фиг знает..

    А если я пытаюсь сам нарисовать чего нить... например ректангл.. мне говорить что этого сделать невозможно, тк приложение заблочино... ?? чего.. куда... я фиг знает...

    Ковырял и в Visio_TLB и в VisOcx_TLB (они создаются когда делаешь импор ActivX) нифига не вьехал... чтото гдето въехал.. гдето нет.. в общем либо у мя соображалки нехватает либо я не знаю...

    вот мои ковыряния...

    procedure TForm1.Button1Click(Sender: TObject);
    const
    //IID_IDrawingControl: TGUID = '{9BF6FD73-F05B-406E-B938-09E2B413528E}';
    //CLASS_DrawingControl: TGUID = '{E4615FA3-23B0-4976-BD3E-D611DDBE330E}';
    DIID_EVisOcx: TGUID = '{BD086122-F160-436A-BE7B-6B1D58D14703}';
    CLASS_DrawingControl: TGUID = '{000D0700-0000-0000-C000-000000000046}';
    var
    // Visio: IDrawingControl;
    // Visio : IDrawingControlDisp;
      Visio : EVisOcx;
    begin
    {   Visio :=  CreateComObject(IID_IDrawingControl) as EVisOcx;
      visio.DocumentSavedAs(form1.DrawingControl1.Window.Document);

      Visio := Nil;}
      //form1.DrawingControl1.Window.Shape.DrawRectangle(12,21,12,12);
       form1.DrawingControl1.Window.Document.SaveAs('c:\q.vsd');
    //    form1.DrawingControl1.Window.Shape.Shapes.CenterDrawing;
    end;

    procedure TForm1.Button2Click(Sender: TObject);

    var f : IVUIObject;
    Visio : IVApplication;
    h : HWND;
    begin

    //f.ToolbarSets.Add.Toolbars;
    //Get_BuiltInToolbars();
    //form1.DrawingControl1.Window.Document
    //Visio.Documents.Open('Drawing1.vsd');
    //form1.DrawingControl1.Window.Application.Documents.Open('c:\Drawing1.vsd');
    //DrawingControl1.Window.Application.Documents.Open('c:\Drawing1.vsd');

    //form1.DrawingControl1.Document.Open('c:\Drawing1.vsd');

    //Visio :=  CreateComObject(IID_IDrawingControl) as IVApplication;
    //Visio.Application.Documents.OpenEx('Drawing1.vsd')
    //form1.DrawingControl1.Window.Document.Application

    //form1.DrawingControl1.Window.Document.SetCustomToolbars(f);
    //form1.DrawingControl1.Document.DocumentSheet.DrawRectangle(12,12,12,12);
    //form1.DrawingControl1.Window.Document.DocumentSheet.DrawRectangle(12,12,12,12);
    end;

    Из всего работает тока сохранение ))) И то не знаю правильно или нет )))
    ...
    вот если кому интресно Visio_TLB и в VisOcx_TLB

    http://alex-shad.narod.ru/temp/Visio_TLB.pas
    http://alex-shad.narod.ru/temp/VisOcx_TLB.pas
  • T54 © (23.10.06 11:44) [4]
    Разобрался с Visio (тоже стоит такой вопрос) ? если разобрался скажи как работал ?
  • -Ven- © (23.10.06 13:23) [5]
    Ох, и геморное это дело юзать Visio 2003 под Дельфи. Я на это убил кучу времени и до сих пор с этим вожусь (по работе нужно). Разобрался очень со многим, но многое осталось не ясным (надеюсь пока что). Самое фиговое, что сам компонент еще довольно сырой. В общем если спрашивайте, если я с этим разобрался, отвечу. По поводу текущих вопросов:
    1) Как открыть документ:
      что бы создать документ, нужно просто сделать следующее
      VisioDrawingControl.Src := '';
      что бы открыть уже созданный документ
      VisioDrawingControl.Src := FileName; //где FileName это полный путь к созданному файлу

    2) Как повытаскивать панели инструментов:
       Стенсилы (панельки с набором шаблонов) открываются из файлов (расширение vss) следующим образом
       try
         Doc:= DrawingControl.Document.Application.Documents.OpenEx('c:\tmp.vss',visOpenDocked) ;
       except
         Doc:= DrawingControl.Document.Application.Documents.AddEx('c:\tmp.vss', visMSDefault, visAddDocked, 0);
       end;
       Doc.Title := 'bla bla bla';

       Тут дело в том, что OpenEx открывает файл и блокирует его, но если этот файл уже заблокирован, то выкидывается эксептион, и поэтому вызывается функция AddEx. Которая открывает копию шаблонов. В принципе можно сразу использовать эту функцию, но тут есть огромный недостаток. При открытии шаблонов таким образом, компонент открывает их в режиме редактирования (т.е. можно на панель шаблоно перетащить какой нибудь элемент и эту панель сохранить в другой файл). Как это запретить я не разобрался :(

       Еще из полезных инструментов можно вызвать панель Pan & Zoom
       VisioDrawingControl.Window.Windows.ItemFromID[visWinIDPanZoom].Visible:= true;
       Таким же образом можно открыть еще несколько панелей, указав другие константы вместо visWinIDPanZoom (см. описание констант в Visio_TLB.pas)
  • cerber (25.10.06 23:12) [6]
    Посмотри пример в \examples\activex,попробуй чере OLE-контейнер.
    Панель должна сама появиться при вызове(активизации) содержимого контейнера. Но не забудь добавить toolbar и сделать MDI форму.
    Кстати с контейнером очень редко возникают ексепшен - только с кривыми Актив-Икс объектами
 
Конференция "Corba" » Delphi 7 + Visio 2003
Есть новые Нет новых   [134431   +10][b:0][p:0]