Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.14;
Скачать: CL | DM;

Вниз

Печать из дельфи документов в 866 кодировке с псевдографикой   Найти похожие ветки 

 
Alexxx ©   (2002-01-29 15:19) [0]

Проблема в следующем: при печати из Дельфи документов, созданных в 866 кодировке канва принтера, а точнее Printer.Canvas.Font не хочет дружить с OEM_CHARSET.
Перекодировка OEMTOANSI ничего не дает в силу того, что все символы псевдографики (рамки и т.п.) начинают отображаться плюсиками и тому подобными знаками, что не соответствует условиям задачи. Буду признателен за любую помощь, проблема появилась как всегда неожиданно и в самое неудачное время :(


 
panov ©   (2002-01-29 15:23) [1]

используй собственную таблицу перекодировки, в которой псевдографику заменяй на символы, которые тебе нужны...


 
Alexxx ©   (2002-01-29 15:30) [2]

А откуда взять эти символы ?
Для Courier New шрифта, например, эти символы содержатся только в OEM_CHARSET.


 
panov ©   (2002-01-29 15:32) [3]

Можно попробовать шрифт "terminal" использовать, только я не уверен, что любой принтер будет их поддерживать...


 
Alexxx ©   (2002-01-29 15:36) [4]

Терминал не подходит - у него вообще единственный charset - это OEM_CHARSET, к тому же он растровый, а не TT :(((


 
panov ©   (2002-01-29 15:42) [5]

Еще вариант - отрисовывать самому, но задача, конечно, не из тех, что вдохновляют...


 
Alexxx ©   (2002-01-29 15:43) [6]

Вот и я о том же... :(((
Просто есть надежда, что есть способ проще :-)


 
Alexxx ©   (2002-01-29 16:27) [7]

???


 
Alexxx ©   (2002-01-29 17:19) [8]

????


 
valery_f   (2002-01-29 17:58) [9]

Сейчас посмотрел - курьер сию псевдографику имеет (символы начиная с $2500), правда в списке кодовых страниц шрифта сие не значится (что характерно :) Чтобы их напечатать прийдется юзать TextOutW с указанием двухбайтового кода символов (unicode). Если что - пиши, кину пример.


 
Alexxx ©   (2002-01-29 18:06) [10]

К слову, опять же - он ее и 866 странице имеет, только это не спасает :(((


 
Alexxx ©   (2002-01-30 11:57) [11]

?


 
valery_f   (2002-01-30 12:42) [12]

Я так понял - пример не помог? На чем споткнулся?


 
Alexxx ©   (2002-01-30 13:09) [13]

Попробовать не успел, если честно, но в примере у тебя вывод не на принтер, а как на принтере это будет выглядеть ?
Просто на канве он в любой кодировке нормально печатает, а вот с принтером гемморой начинается :((


 
valery_f   (2002-01-30 14:17) [14]

Какая разница - принтер или нет? Canvas - и в Африке Canvas :) Только что отправил на печать бо-о-ольшущий иероглиф - работает:

procedure TForm1.Button1Click(Sender: TObject);
var s: widestring; c: widechar; p: ^word;
begin
Printer.PrinterIndex := 2; //это у меня сетевой принтер
Printer.BeginDoc;
s := " "; p := @c;
p^ := $512F; //код иероглифа
s[1] := c;
Printer.Canvas.Font.Name := "Arial Unicode MS";
Printer.Canvas.Font.Size := 48;
TextOutW(Printer.Canvas.Handle,100,100,PWideChar(s),1);
Printer.EndDoc;
end;


 
Alexxx ©   (2002-01-30 14:56) [15]

Разница есть.
Иначе бы и textOut срабатывал.
Но все равно попробую, спасибо.


 
valery_f   (2002-01-30 15:48) [16]

Только не textOut, а TextOutW. TextOut использует активную кодовую страницу и к спец. символам через нее не доберешься. А TextOutW работает с юникодом (двухбайтные символы) и страницы ей пополам - лишь бы указанный символ в шрифте присутствовал.


 
Alexxx ©   (2002-01-30 16:29) [17]

Но для канвы изображения ведь срабатывает.
То есть
Image1.Canvas.Font.Name:="Courier New";
Image1.Canvas.Font.Charset:=OEM_CHARSET;
Image1.Canvas.TextOut(1,1,"Всякая псевдографика");

печатается нормально, а как только Image1 меняем на Printer - все. никаких шрифтов мы не понимаем со всеми вытекающими.
Единственное - твой пример с Unicode получился, но это же тоже тот еще выход... :(((


 
AlexKniga ©   (2002-01-30 20:21) [18]

Принтер шрифт Тerminal понимает?
То есть:
1) Открываем в Word"e текст с псевдографикой как "text only", не "text DOS". {символы с номером > 128 отобразяться не правильно}
2) Выделяем всё. Меняем шрифт Courer на Terminal. {всё выглядит OK} Если в Word"e доступны только TT, делаешь через Excel.
3) Отправляем на печать.

Смотрим результат.
Если он плачевный
то нужен Unicode
иначе печатаем Terminal"ом;





Страницы: 1 вся ветка

Текущий архив: 2002.02.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
14-42860
Андрей Сенченко
2001-12-25 16:20
2002.02.14
Безумные размеры EXE-шников


3-42682
xmapa
2002-01-22 10:51
2002.02.14
Поле-массив в InterBase


1-42784
Eraser
2002-01-31 09:45
2002.02.14
Формирование массива


1-42807
Potemkin
2002-01-31 14:42
2002.02.14
FastReport


14-42832
Polevi
2001-12-24 15:45
2002.02.14
LOL