RUS  ENG 

VIR_RUS (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Из памяти в файл.
 
Как мне слой с параметром InMemory = true записать в файл?
Применение стиля
 
Попробуй создать новый типовой стиль и присвоить этот стиль этим элементам. И при смене этого стиля, стиль элементов будет меняться...
Как использовать MapDoc.DrawToStream(...)?
 
3 часа разбирался как это в C# реализовать.
Разобрался =), вот код если кому еще потребуется...

class Map
{
 [DllImport("OLE32.DLL", EntryPoint = "CreateStreamOnHGlobal")]
 extern public static Int32 CreateStreamOnHGlobal(System.IntPtr hglobal, bool fDeleteOnRelease, out UCOMIStream pOutStm);

(...)

 Image GetIMG(...)
 {
   UCOMIStream stream = null;
   int res = Map.CreateStreamOnHGlobal(IntPtr.Zero, true, out stream);
   if(res != 0)
     return null;

   bool flag = mapDoc.DrawToStream(w, h, cX, cY, scale, 0, stream);
   if(!flag)
     return null;

   System.Runtime.InteropServices.STATSTG stat;
   stream.Stat(out stat, 0);
   byte[] buffer = new byte[stat.cbSize];

   // Обязательная строка. После возвращения стрима позиция в конце
   stream.Seek(0, 0, System.IntPtr.Zero); // Из за этой строчки лишний час разбирался

   stream.Read(buffer, (int)stat.cbSize, System.IntPtr.Zero);
   Image img = Image.FromStream(new System.IO.MemoryStream(buffer));
   return img;
 }
}
Как использовать MapDoc.DrawToStream(...)?
 
Пишу на C#.
Как использовать функцию?
Мне нужно чтоб кусок карты отрисовался в память.
Какого типа использовать Stream.
И какого размера.

Входные параметры такие же как при DrawToRaster()?
Проблемы с печатью.
 
Отправил на емайл.
Проблемы с печатью.
 
Проверил. Все правильно указывается.
Просто у меня в программе считает в мм (в Zulu см) и переворачивает координаты (x и y). Мне так удобней. А потом подгоняет к Zulu.
Растр мне дает правильно, только при печати такие поля выдает =(. Еслибы эти поля накладывались на соседних листах, а то они не накладываются и получаются пробелы на склейки листов.

Получилось убрать эту область, с вычитанием из области печати 5 мм. Но это не выход. Поля в 2.5 мм все портят, если печатать на принтере у которого нет не печатных полей...
Проблемы с печатью.
 
Пишу компонент на C# заполняю PrintInfo:

// Печать по установленной области
Int32 option = (Int32)ePrintInfoConstants.ePrintExplicitRect;
// Печать по установленному маштабу
option |= (Int32)ePrintInfoConstants.ePrintExplicitScale;
// Не показывать диалог печати
option |= (Int32)ePrintInfoConstants.ePrintNoPrintDlg;
pi.Options = option;

// Размер бумаги
pi.PaperSize = (int)m_PrinterSetings.PrinterSettings.DefaultPageSettings.PaperSize.Kind;
// Вертикально или горизонтально
if (m_PrinterSetings.Landscape)
 pi.Orientation = (int)ePrintInfoConstants.ePrintOrientLandscape;
else
 pi.Orientation = (int)ePrintInfoConstants.ePrintOrientPortrait;

// Установить имя принтера
pi.Device = m_PrinterSetings.PrinterSettings.PrinterName;
// Установить область
pi.SetAreaRect(rect.RB.Y / 10, rect.LT.X / 10, rect.LT.Y / 10, rect.RB.X / 10);
           
// Установить маштаб
pi.Scale = Scale;

// Установить расположение печатаемой области на листе
pi.Align = (Int32)eLabelPosition.eCenter;

pi.VertPages = 1;
pi.HorzPages = 1;

// Задаем слой по габаритам которого определяется печатаемый фрагмент карты.
pi.Layer = -1;

Размер области деленый на Маштаб равен печатной зоне на листе (в FrameWork 2.0 это PrintArea). При выводе на печать образуется область (на картинке видно), что вокруг области полигоны обрезаются, а буквы продолжают идти. Хотя по идеи полигоны должны обрезаться где обрезаются буквы. Пытался уменьшить область печати, думал что при печати вы сами добавляете поля, но это не к чему не привело =(
Проблемы с печатью.
 
Я конечно все понимаю, но зачем УДАЛЯТЬ мои вопросы??? Не можите решить проблему с печатью так и скажите!!!
Почему при печати возникают такие проблемы: <A HREF="http://img.xet.ru/images/6/6/2/0/0/66200MAP.jpg" target="_blank">http://img.xet.ru/images/6/6/2/0/0/66200MAP.jpg</a>
Страницы: 1