Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Новый формат для виртуального принтера, Как создать новый формат через Win API? 
:(
    Опции темы
Ptica_Oz
Дата 14.1.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Необходимо чертёж Компаса сохранить в растр так, что бы небыло ничего лишнего. В принципе результат "Сохранить как ..." меня устраивает, но на больших чертежах это занимает слишком много времени. Хочу сделать это при помощи виртуального принтера, но набор форматов у них довольно ограничин. Есть мысль каждый раз программно через WinAPI создавать подходящий формат и устанавливать его, но как это сделать?
Поделитесь, пожалуйтса, советом, ссылкой (желательно на русском) или примером (VC++ рассматривается)
PM MAIL   Вверх
FractalizeR
Дата 21.1.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: нет
Всего: 4



Не совсем понятно, о чем речь. Какой компас? Откуда сохраняем? "Сохранить как" выбирается где?


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
Ptica_Oz
Дата 22.1.2008, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Программа есть такая Комапс, грубо говоря, отечественный аналог AutoCAD.Так вот в нем при сохранении можно выбрать расширение .jpg. Всё бы хорошо, но долго очень он это делает. И я подумала, почему бы не воспользоваться виртуальным принтером. Но для того что бы получился удовлетворяющий меня результат мне необходимо создавать форматы, точно подходящие по размеру для чертежа. Вопрос состоит в том, как это сделать? Нашла функцию Win API AddForm, которая, судя по описанию, делает то, что мне надо (создаёт новый формат для принтера), попробовала написать функцию, но не работает, говорит, параметры не правильные. Вот код:
Код

// функция создаёт формат заданого размера и ставит его текущим
Function CreateForm(NamePrint : string; H, W : double): Boolean;
var
  HandPrint : THandle;             // манипулятор принтера
  //PInfPrint : PPrinterDefaults;     // структура, заполняемая информацией о принтере
  PInfForm : PFormInfo1A;          // ссылка на структуру с описанием формы
  chNamePrint : PChar;
  Res : Boolean;
begin
  chNamePrint := PChar(NamePrint);
  //new (PInfPrint);
  if (OpenPrinter(chNamePrint, HandPrint, nil))then begin
    Result := False;
    new(PInfForm);
    PInfForm.pName := 'UserForm';
    PInfForm.Size.cx := Round(W*1000);
    PInfForm.Size.cy := Round(H*1000);
    PInfForm.ImageableArea.Left := 0;
    PInfForm.ImageableArea.Bottom := 0;
    PInfForm.ImageableArea.Top := Round(H*1000);
    PInfForm.ImageableArea.Right := Round(W*1000);
    // создаём форму
    if AddForm(HandPrint, 1, PInfForm) then begin
      // делаем созданную форму текущей
      SetForm(HandPrint, 'UserForm', 1, PInfForm);
      Result := True;
    end
    else ShowMessage(SysErrorMessage(GetLastError));
    ClosePrinter(HandPrint);
    Dispose(PInfForm);
  end;
  //Dispose(PInfPrint);
end;


Это сообщение отредактировал(а) Ptica_Oz - 22.1.2008, 16:11
PM MAIL   Вверх
Ptica_Oz
Дата 22.1.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Обнаружила некоторые ошибки в своём коде. Вот код, который и компилится и при работе не ругается:
Код

// процедура создаёт формат заданого размера и ставит его текущим
Function CreateForm(NamePrint : string; H, W : double): Boolean;
var
  HandPrint : THandle;             // манипулятор принтера
  PInfForm : PFormInfo1A;          // ссылка на структуру с описанием формы
  chNamePrint : PChar;
  Res : Boolean;
  inErr : integer;
begin
  chNamePrint := PChar(NamePrint);
  Result := False;
  if (OpenPrinter(chNamePrint, HandPrint, nil))then begin   
    PInfForm.Flags := FORM_PRINTER;
    PInfForm.pName := 'UserForm';
    PInfForm.Size.cx := Round(W*1000);
    PInfForm.Size.cy := Round(H*1000);
    PInfForm.ImageableArea.Left := 0;
    PInfForm.ImageableArea.Top := 0;
    PInfForm.ImageableArea.Bottom := Round(H*1000);
    PInfForm.ImageableArea.Right := Round(W*1000);
    // удаляем ранее созданную форму
    DeleteForm(HandPrint, 'UserForm'); 
    // создаём форму
    if AddForm(HandPrint, 1, PInfForm) then begin
      // делаем созданную форму текущей
      if SetForm(HandPrint, 'UserForm', 1, PInfForm) then
         Result := True
      else begin
         inErr := GetLastError;
         ShowMessage(IntToStr(inErr));
         ShowMessage(SysErrorMessage(GetLastError));
      end;
    end
    else begin
     inErr := GetLastError;
     ShowMessage(IntToStr(inErr));
     ShowMessage(SysErrorMessage(GetLastError));
    end;
    ClosePrinter(HandPrint);
    Dispose(PInfForm);
  end;
end;

т.е. формат как бы создаётся, вот только его никто не видит, что-то вроеде: 
- суслика видишь?
- нет
- а он есть
аналогичная функция на С с принтером cimmerty document converter работает, предположу, что и делфёвый код будет работать с этим принтером, но есть одно "но": этот принтер (cimmerty document converter) печатает только в .pdf, а мне нужен .jpg. сейчас я работаю с принтером Gnostice Print2eDoc. в общем попробую ещё поэксперементировать с принтерами =/
P.S. есть ещё одно услови при выборе принтера - бесплатность.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.