Author |
Topic |
|
Voland
91 Posts |
Posted - 10/06/2005 : 13:04:07
|
Доброго времени суток всем! Проблемка скорее всего уже выносилась на обсуждение, но я ответа пока не нашел... Все казалось бы просто. Нужно выставить размер страницы в формат А3,A1 или А0 программно. Вот как это сделать? Со стандартными константами проблемм нет, делаю так: (Работаю в Delphi c ActiveX DrawingControl) DrawingControl.Document.PaperSize:=visPaperSizeA3; И все, проблем нет, А3 выставляется, но там нет защитых констант в А1, А0 да и вообще, вдруг я хочу специфичный формат, скажем, под факс :)... Вот как программно выставить размер странички? Спасибо всем :)
___ Кто ищет тот найдет __ |
|
Voland
91 Posts |
Posted - 10/06/2005 : 13:08:36
|
Я конечно извиняюсь, но дополню: MyPage.PageSheet.Cells['PageHeight'].Result'MM']:=Нужный размер; MyPage.PageSheet.Cells['PageWidth'].Result['MM']:=Нужный размер; результата не дает :((( Нужно видно как то поменять значения в: MyDocument.PaperHeight['MM']; MyDocument.PaperWidth['MM']; но через свойсво DocumentSheet.Cells['PaperHeight'].Result['MM'] присвоит значение не получается так как его там нет :(( (поля), как и конечно же PaperWidth... Жду ваших соображений... ведь можно же как то менять этот размер пейжа :)
___ Кто ищет тот найдет __ |
|
|
mers
Russia
159 Posts |
Posted - 10/06/2005 : 13:23:06
|
делал так:
public const double WIDTH_PAGE_A4 = 8.26771653543307;
public const double HEIGHT_PAGE_A4 = 11.692913385826772;
public const double WIDTH_PAGE_A3 = 11.692913385826772;
public const double HEIGHT_PAGE_A3 = 16.535433070866141;
public const double WIDTH_PAGE_A2 = 16.535433070866141;
public const double HEIGHT_PAGE_A2 = 23.385826771653544;
public const double WIDTH_PAGE_A1 = 23.385826771653544;
public const double HEIGHT_PAGE_A1 = 33.110236220472437;
public const double WIDTH_PAGE_A0 = 33.110236220472437;
public const double HEIGHT_PAGE_A0 = 46.811023622047244;
// потом так
Visio.Page page = axDrawingControl.Window.PageAsObj;
page.PageSheet.get_Cells("PageWidth").ResultIU = WIDTH_PAGE_A0;
page.PageSheet.get_Cells("PageHeight").ResultIU = HEIGHT_PAGE_A0;
кстати не знал как задавать размеры в миллиметрах.. спасибо :) |
|
|
Voland
91 Posts |
Posted - 10/06/2005 : 15:19:40
|
Итак, пробую, но видно что то ни так, единственным отличием в определении ссылки на страницу. Посмотрите, должно оно так отрабоать, вернее оно так не отрабатывает :( MyDocument:=MainForm.DrawingControl.Document; MyPages:=MyDocument.Pages; MyPage.PageSheet.Get_Cells('PageWidth').ResultIU := 23; MyPage.PageSheet.Get_Cells('PageHeight').ResultIU := 33; //кстати, тут в мм указать размер нельзя :(, только в дюймах :( и все, размер стоит прежний и не меняется... что может быть? Не ужели в обьявлении переменной? Visio.Page page = axDrawingControl.Window.PageAsObj; ... млин...
___ Кто ищет тот найдет __ |
|
|
mers
Russia
159 Posts |
Posted - 10/06/2005 : 16:37:22
|
похоже вы неправильно получаете ссылку на страницу. я так понимаю что вы хотите поменять размер всем страницам в документе.. тогда логичнее было бы сделать так:
MyDocument:=MainForm.DrawingControl.Document;
MyPages:=MyDocument.Pages;
for(int i=1; i<=MyPages.Count; i++)
{
MyPages[i].PageSheet.Get_Cells('PageWidth').ResultIU := 23;
MyPages[i].PageSheet.Get_Cells('PageHeight').ResultIU := 33;
}
как-то так вообщем... |
|
|
Voland
91 Posts |
Posted - 10/07/2005 : 11:48:41
|
Извиняюсь, там описался с типом. А здорово вы соединили код дельфи с сишным :)... вобщем, проблемка пока не решается. Впринципе мне не нужно все странички менять, так как она у меня одна. Делаю напрямую так: --- var MyVisioApp:IVApplication; MyDocument:IVDocument; begin MyDocument:=MainForm.DrawingControl.Document; MyVisioApp:=MyDocument.Application; MyVisioApp.ActivePage.PageSheet.Get_Cells('PageWidth').ResultIU := 23; MyVisioApp.ActivePage.PageSheet.Get_Cells('PageHeight').ResultIU := 33; end; ---- Результата ни какого :((... Скролбары вреде как дергаются, но размер странички ни физически ни визуально не меняется... такое ощущение, что этот : MyDocument.PaperHeight['MM']; MyDocument.PaperWidth['MM']; не изменяет своих значений и не дает странице изменить свои :(... млин...
___ Кто ищет тот найдет __ |
|
|
Voland
91 Posts |
Posted - 10/07/2005 : 11:59:42
|
Млин, точно! у меня на событие ОnViewChanged дравинга стоит вот такой код: ---- if Assigned(MyPage) then begin MyPage.PageSheet.Cells['PageHeight'].Result['MM']:=MyDocument.PaperHeight['MM']; MyPage.PageSheet.Cells['PageWidth'].Result['MM']:=MyDocument.PaperWidth['MM']; end; --- он нужен для того, чтобы страница меняла свои визаульные размеры при смене формата листа вот таким способом: DrawingControl.Document.PaperSize:=visPaperSizeA3;
я его закоментировал ---- if Assigned(MyPage) then begin // MyPage.PageSheet.Cells['PageHeight'].Result['MM']:=MyDocument.PaperHeight['MM']; // MyPage.PageSheet.Cells['PageWidth'].Result['MM']:=MyDocument.PaperWidth['MM']; end; --- Все, теперь размер страницы менятеся свободно вот так: --- //A1 MyVisioApp.ActivePage.PageSheet.Get_Cells('PageWidth').Result['MM'] := 841; MyVisioApp.ActivePage.PageSheet.Get_Cells('PageHeight').Result['MM'] := 594; --- Но когда я начинаю чертеж, у меня класс автоматического распределения элементов на листе, он определяет размер листа, и берет их видо с MyDocument.PaperHeight['MM']; MyDocument.PaperWidth['MM']; и чертит сарый размер, установленный так: DrawingControl.Document.PaperSize:=visPaperSizeA3; получается, что я изменил только визуально размер страници а не реально :((... Конечно, я могу взять размер страници и передать своему классу, чтобы он начертил на весь лист, но при распечатке будет ли он на А1, а то может и будет на А3? :((
___ Кто ищет тот найдет __ |
|
|
immortal
Russia
391 Posts |
Posted - 10/08/2005 : 15:26:38
|
способ 1: идёшь меняешь паже видтшь и паже хейгхт в шейпшите страницы. способ 2(работает только для воланда): подходишь ко мне и я тебе покажу
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
Voland
91 Posts |
Posted - 10/11/2005 : 11:47:48
|
способ 1: идёшь меняешь паже видтшь и паже хейгхт в шейпшите страницы. Да, это способ я уже опробовал, и он описан выше...
способ 2(работает только для воланда): подходишь ко мне и я тебе покажу :) ну что же, покажите... Был бы признателен...
___ Кто ищет тот найдет __ |
|
|
Voland
91 Posts |
Posted - 10/13/2005 : 14:38:22
|
Ладно.. Пока сделал так: ---- const A0_W=1189;A0_H=841; A1_W=841; A1_H=594; ---- //A1 MyVisioApp.ActivePage.PageSheet.Get_Cells('PageWidth').Result['MM'] := A1_W; MyVisioApp.ActivePage.PageSheet.Get_Cells('PageHeight').Result['MM'] := A1_H; MyPageSize:='A1'; ----
Разобрался с печатанием этог дела, оказывается действительно, он будет печатать теми листами, которые были выставлены по вот такому способу: DrawingControl.Document.PaperSize:=visPaperSizeA3; Т.е. получается что напечатает 4 листа А3... Но, в настройках печати, можно выставить ему масштаб 1 к 1, тогда он напечатает путем формат А1 и А0... Вот сейчас разбираюсь с этими параметрами, как программно укахать ему настройки печати в маштабе 1 к 1.
___ Кто ищет тот найдет __ |
|
|
Voland
91 Posts |
Posted - 10/14/2005 : 12:03:40
|
Разобрался как выставить формат при печати 1 к 1 программно, это делается так:
MyVisioApp.ActivePage.PageSheet.Cells['OnPage'].Formula:='1';
В этом случае на принтер будет выводиться страница размером установленным так: const A0_W=1189;A0_H=841; A1_W=841; A1_H=594; ---- MyVisioApp.ActivePage.PageSheet.Get_Cells('PageWidth').Result['MM'] := A1_W; MyVisioApp.ActivePage.PageSheet.Get_Cells('PageHeight').Result['MM'] := A1_H; ---- Если поставить параметр "0"
MyVisioApp.ActivePage.PageSheet.Cells['OnPage'].Formula:='0';
То печать будет производиться теми размерами, которые установлены в MyDocument.PaperHeight['MM'] MyDocument.PaperWidth['MM']
и автоматически разбито на то количество листов, которое необходимо чтобы вместить весь чертеж. Еще есть такой параметр как: MyVisioApp.ActiveDocument.PrintOut (visPrintAll,1,1,False,'',True,'D:\myprint',1,False,Аalse);
Тут вообще много интересного, не мало настроек для необходимой печати, вот ее спецификация из SDK 2003 object.PrintOut(PrintRange, [FromPage], [ToPage], [ScaleCurrentViewToPaper], [PrinterName], [PrintToFile], [OutputFileName], [Copies], [Collate], [ColorAsBlack]) object Required. An expression that returns the Document object to print.
PrintRange Required VisPrintOutRange. The range of document pages to be printed. See Remarks for possible values.
FromPage Optional Long. If PrintRange is visPrintFromTo, the first page in the range to be printed.
ToPage Optional Long. If PrintRange is visPrintFromTo, the last page in the range to be printed.
ScaleCurrentViewToPaper Optional Boolean. If PrintRange is visPrintCurrentView, True to scale the part of the drawing that fits in the program window to fit on the current default paper size; False to print on as many printer pages as necessary. The default is False.
PrinterName Optional String. The name of the printer to use. The default is the default Windows printer.
PrintToFile Optional Boolean. True to send the information for printing to a file on a disk, rather than to the printer; False to print to the printer. The default is False.
OutputFileName Optional String. If PrintToFile is True, the name and path of the .prn file to which to print.
Copies Optional Long. The number of copies to be printed. The default is one copy.
Collate Optional Boolean. True to collate copies. False to not collate. The default is False.
ColorAsBlack Optional Boolean. True to print all colors as black to ensure that all shapes are visible in the printed drawing. This is useful if a monochrome printer translates very light colors in a drawing to white rather than a shade of gray. False to print colors normally. The default is False.
Ну вот вроде и решил проблему Всем спасибо!
___ Кто ищет тот найдет __ |
|
|
|
Topic |
|
|
|