All Forums
 Категория Visio
 Форум Вопросы и ответы
 Программно размер страницы не зашитый в Const
Author Previous Topic Topic Next 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...
Жду ваших соображений... ведь можно же как то менять этот размер пейжа :)




___ Кто ищет тот найдет __
Go to Top of Page

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;
кстати не знал как задавать размеры в миллиметрах.. спасибо :)
Go to Top of Page

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;
... млин...


___ Кто ищет тот найдет __
Go to Top of Page

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;
}
как-то так вообщем...
Go to Top of Page

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'];
не изменяет своих значений и не дает странице изменить свои :(... млин...

___ Кто ищет тот найдет __
Go to Top of Page

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? :((


___ Кто ищет тот найдет __
Go to Top of Page

immortal

Russia
391 Posts

Posted - 10/08/2005 :  15:26:38  Visit immortal's Homepage
способ 1: идёшь меняешь паже видтшь и паже хейгхт в шейпшите страницы.
способ 2(работает только для воланда): подходишь ко мне и я тебе покажу

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

Voland

91 Posts

Posted - 10/11/2005 :  11:47:48
способ 1: идёшь меняешь паже видтшь и паже хейгхт в шейпшите страницы.
Да, это способ я уже опробовал, и он описан выше...

способ 2(работает только для воланда): подходишь ко мне и я тебе покажу
:) ну что же, покажите... Был бы признателен...

___ Кто ищет тот найдет __
Go to Top of Page

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.

___ Кто ищет тот найдет __
Go to Top of Page

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.

Ну вот вроде и решил проблему Всем спасибо!


___ Кто ищет тот найдет __
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)