Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » На XP не печатает Courier New

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Man_Without_Face



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день! В мемо есть текст, шрифт Courier New. Отображается нормально. Но при печати на XP у заказчика на 4х принтерах выводит иерогливы. На 7ке печатается нормально, у нас на XP тоже. В чем может быть проблема? Delphi 7.

Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 14:22 12-05-2015
Sergey250



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Man_Without_Face
Может это попробовать добавить в реестр?
Подробнее...

Всего записей: 2730 | Зарегистр. 12-12-2005 | Отправлено: 14:34 12-05-2015
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Гадать можно долго и разнообразно...
 
Например, раз Delphi 7, то уникод ваше приложение не поддерживает.
А значит, кодовую страницу выбирает исходя из настройки в панели управления "Кодовая страница для программ не поддерживающих уникод".
Может быть, у заказчика там корявенько (или более подходяще для его других неуникодных программ) настроено.

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 14:37 12-05-2015
Man_Without_Face



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот печать:
procedure TfrmViewCheck.PrintMemo(Strings: TStrings);
 
 Var
 Prn: TextFile;
 i: word;
begin
  AssignPrn(Prn);
 
  try
    Rewrite(Prn);
    try
      Printer.Canvas.Font := Memo1.Font;
      Printer.Canvas.Font.size := 12;
      for i := 0 to Strings.Count - 1 do
        writeln(Prn, Strings.Strings[i]);
    finally
      CloseFile(Prn);
    end;
  except
    on EInOutError do
      MessageDlg('Ошибка печати текста.', mtError, [mbOk], 0);
  end;
 
end;

Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:04 12-05-2015
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну раз так, то есть ещё предположение...
А шрифт из Memo1 присутствует в Printer.Fonts ?

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 18:43 12-05-2015
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KDPoid, Courier New же truetype шрифт, а значит в списке он будет по любому )
 
Нет семёрки под рукой, но разве out функции под капотом не приводят всё к OEM? Соотв. если принтер её не поддерживает - получаем кракозябры.  
 
Либо пробовать преобразовывать кодировки, либо делать полноценную печать или же отдавать эту функцию на откуп системе, ИМХО.
 
Man_Without_Face в кракозябры превращается вообще любой текст или только кириллица?

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 19:47 12-05-2015 | Исправлено: NeoAnomaly, 20:03 12-05-2015
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NeoAnomaly,
Семёрки под рукой нет, так что, между нами - теоретиками...
 
Насколько помню, Printer.Fonts возвращает список доступных в системе шрифтов.
Т.е. если Courier New снесён в винде, то его и не будет в списке, а для вывода винда попытается подобрать наиболее похожий, руководствуясь записями в FontSubstitutes и внутренним чувством справедливости.
 
Так что, я бы в такой ситуации всё равно проверил, есть ли шрифт на машине и действительно ли мы пытаемся печатать "Courier New", а не "Courier", или "Courier New Cur", или ещё чем...
 
В общем, что-то типа:

Код:
 
if Printer.Fonts.IntexOf(Memo1.Font.Name) = -1 then MessageBox(0,'Вот вы верили людям, а шрифт кто-то спёр...','Как же так ?!?!?!',MB_OK);
 

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 06:48 13-05-2015
Man_Without_Face



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Man_Without_Face в кракозябры превращается вообще любой текст или только кириллица?

Только кириллица. Настройки принтера они категорически отказываются менять.
 
Добавлено:

Цитата:
Так что, я бы в такой ситуации всё равно проверил, есть ли шрифт на машине

Шрифт есть. Принтера HP, скорее всего принтер подсовывает свой шрифт, это можно отключить в настройках, но как писал выше, настройки трогать нельзя.

Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 09:04 13-05-2015 | Исправлено: Man_Without_Face, 09:04 13-05-2015
KDPoid



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Man_Without_Face
 
А если попробовать вот так ?

Код:
 
procedure TfrmViewCheck.PrintMemo(Strings: TStrings);  
 Var  
 i: word;  
 h : integer;
begin  
  try  
      Printer.BeginDoc;
      Printer.Canvas.Font := Memo1.Font;  
      Printer.Canvas.Font.size := 12;  
      h := (5+Printer.Canvas.TextHeight);
      for i := 0 to Strings.Count - 1 do  
        Printer.Canvas.TextOut(10,10+i*h,Strings.Strings[i]);
      Printer.EndDoc;
  except  
    on EInOutError do  
      MessageDlg('Ошибка печати текста.', mtError, [mbOk], 0);  
  end;  
 
end;
 

Всего записей: 404 | Зарегистр. 08-08-2006 | Отправлено: 15:05 13-05-2015
protoror



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
было похожее, вылечил просто правильными дровами
http://dzo-kostroma.ru/component/content/article/154-softfaq/7838-faqkorvet.html#anchor9

Всего записей: 494 | Зарегистр. 23-11-2009 | Отправлено: 15:34 13-05-2015
NightSpawn



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сталкивался с чем-то подобным, спасла снятая галочка в настройках принтера "Включить дополнительные возможности печати". Правда там 1С было, но.. Бумаги попортили знатно, пока разобрались.

Всего записей: 87 | Зарегистр. 01-01-2007 | Отправлено: 04:24 15-05-2015
saidumar

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
99% дело в драйверах

Всего записей: 92 | Зарегистр. 10-04-2011 | Отправлено: 11:23 16-05-2015
sting21

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как вариант в настройках принтера выбрать растровую печать или отключить встроенные шрифты

Всего записей: 10 | Зарегистр. 24-02-2011 | Отправлено: 17:00 17-05-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » На XP не печатает Courier New


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru