-
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]:'(
-
Никто не работал с таким ?
....
в общем я поковырял...
сохранить вроде сохраняю в файл
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 (тоже стоит такой вопрос) ? если разобрался скажи как работал ?
-
Ох, и геморное это дело юзать 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 форму.
Кстати с контейнером очень редко возникают ексепшен - только с кривыми Актив-Икс объектами