Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2011, 07:36   #1
roperd
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 44
Сообщение Печать текста с отступами(margins)

Доброго времени суток, вот в чем проблема, при печати текста из компонента JvRichEdit способом Print(Caption) игнорируются отступы указанные в PageSetupDialog, нужно как нибудь к этому способу печати (либо предложить другой) привязать настройки PageSetupDialog, конкретно в этом месте кода (выделено красным):
Код:
procedure TJvCustomRichEdit.Print(const Caption: string);
var
  Range: TFormatRange;
  LastChar, MaxLen, LogX, LogY, OldMap: Integer;
  SaveRect: TRect;
begin
  FillChar(Range, SizeOf(TFormatRange), 0);
  with Printer, Range do
  begin
    Title := Caption;
    BeginDoc;
    HDC := Handle;
    hdcTarget := HDC;
    LogX := GetDeviceCaps(Handle, LOGPIXELSX);
    LogY := GetDeviceCaps(Handle, LOGPIXELSY);
    If IsRectEmpty(PageRect) then
    begin
      //Здесь генерируются отступы при печати, это и нужно привязать
      rc.Right := PageWidth * CTwipsPerInch div LogX;
      rc.Bottom := PageHeight * CTwipsPerInch div LogY;
    end
    else
    begin
      rc.Left :=  PageRect.Left * CTwipsPerInch div LogX;
      rc.Top := PageRect.Top * CTwipsPerInch div LogY;
      rc.Right := PageRect.Right * CTwipsPerInch div LogX;
      rc.Bottom := PageRect.Bottom * CTwipsPerInch div LogY;
    end;
    rcPage := rc;
    SaveRect := rc;
    LastChar := 0;
    MaxLen := GetTextLenEx;
    chrg.cpMax := -1;
    { ensure printer DC is in text map mode }
    OldMap := SetMapMode(HDC, MM_TEXT);
    SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); { flush buffer }
    try
      repeat
        rc := SaveRect;
        chrg.cpMin := LastChar;
        LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 1, LPARAM(@Range));
        if (LastChar < MaxLen) and (LastChar <> -1) then
          NewPage;
      until (LastChar >= MaxLen) or (LastChar = -1);
      EndDoc;
    finally
      SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); { flush buffer }
      SetMapMode(HDC, OldMap); { restore previous map mode }
    end;
  end;
end;
PS. Такие методы печати, как AssignPrn и Printer.Canvas.TextOut пожалуйста не предлагать, не подходят...

Последний раз редактировалось roperd; 12.10.2011 в 07:39.
roperd вне форума Ответить с цитированием
Старый 12.10.2011, 08:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
не подходят...
А если я предложу тебе выгрузку текста в MS Word, и уже из него посыл на печать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2011, 08:46   #3
roperd
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А если я предложу тебе выгрузку текста в MS Word, и уже из него посыл на печать?
Не думаю, что такой вариант подойдет, моя программа будет массовой, а Word есть не у всех, к тому же задействование в программе Ole объектов для таких мелочей, как печать, снизит производительность программы, у меня честно говоря были мысли по поводу переписи вышеприведённого мной кода, а конкретно можно в rc вывести размер страницы указанный в PageSetupDialog перевести его в надлежащий вид, т.е из дюймов перевести в миллиметры и округлить, но получилось бы лишь приблизительно, надеялся , что вы предложите более рациональный и выгодный вариант...
roperd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странности с отступами evheniys HTML и CSS 7 06.06.2011 10:42
Вывод на печать выделенного текста vmilyoshin Помощь студентам 5 08.03.2011 12:23
Печать текста на принтере Terazoid Общие вопросы Delphi 11 10.10.2010 15:23
Печать текста из поля МЕМО(Delphi) ChEaTeR-abc Помощь студентам 2 01.07.2010 16:48
печать текста в форме пилы OlifK@ Паскаль, Turbo Pascal, PascalABC.NET 3 13.04.2008 15:11