![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Печать из дельфи документов в 866 кодировке с псевдографикой [D5, D6, Win95/98, WinME, NT4, Win2k, WinXP]
Alexxx © (2002-01-29 15:19:00)Проблема в следующем: при печати из Дельфи документов, созданных в 866 кодировке канва принтера, а точнее Printer.Canvas.Font не хочет дружить с OEM_CHARSET.
Перекодировка OEMTOANSI ничего не дает в силу того, что все символы псевдографики (рамки и т.п.) начинают отображаться плюсиками и тому подобными знаками, что не соответствует условиям задачи. Буду признателен за любую помощь, проблема появилась как всегда неожиданно и в самое неудачное время :(
AlexKniga (2002-01-30 20:21:00) [1]Принтер шрифт Тerminal понимает?
То есть:
1) Открываем в Word"e текст с псевдографикой как "text only", не "text DOS". {символы с номером > 128 отобразяться не правильно}
2) Выделяем всё. Меняем шрифт Courer на Terminal. {всё выглядит OK} Если в Word"e доступны только TT, делаешь через Excel.
3) Отправляем на печать.
Смотрим результат.
Если он плачевный
то нужен Unicode
иначе печатаем Terminal"ом;
Alexxx (2002-01-30 16:29:00) [2]Но для канвы изображения ведь срабатывает.
То есть
Image1.Canvas.Font.Name:="Courier New";
Image1.Canvas.Font.Charset:=OEM_CHARSET;
Image1.Canvas.TextOut(1,1,"Всякая псевдографика");
печатается нормально, а как только Image1 меняем на Printer - все. никаких шрифтов мы не понимаем со всеми вытекающими.
Единственное - твой пример с Unicode получился, но это же тоже тот еще выход... :(((
valery_f (2002-01-30 15:48:00) [3]Только не textOut, а TextOutW. TextOut использует активную кодовую страницу и к спец. символам через нее не доберешься. А TextOutW работает с юникодом (двухбайтные символы) и страницы ей пополам - лишь бы указанный символ в шрифте присутствовал.
Alexxx (2002-01-30 14:56:00) [4]Разница есть.
Иначе бы и textOut срабатывал.
Но все равно попробую, спасибо.
valery_f (2002-01-30 14:17:00) [5]Какая разница - принтер или нет? 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 13:09:00) [6]Попробовать не успел, если честно, но в примере у тебя вывод не на принтер, а как на принтере это будет выглядеть ?
Просто на канве он в любой кодировке нормально печатает, а вот с принтером гемморой начинается :((
valery_f (2002-01-30 12:42:00) [7]Я так понял - пример не помог? На чем споткнулся?
Alexxx (2002-01-30 11:57:00) [8]?
Alexxx (2002-01-29 18:06:00) [9]К слову, опять же - он ее и 866 странице имеет, только это не спасает :(((
valery_f (2002-01-29 17:58:00) [10]Сейчас посмотрел - курьер сию псевдографику имеет (символы начиная с $2500), правда в списке кодовых страниц шрифта сие не значится (что характерно :) Чтобы их напечатать прийдется юзать TextOutW с указанием двухбайтового кода символов (unicode). Если что - пиши, кину пример.
Alexxx (2002-01-29 17:19:00) [11]????
Alexxx (2002-01-29 16:27:00) [12]???
Alexxx (2002-01-29 15:43:00) [13]Вот и я о том же... :(((
Просто есть надежда, что есть способ проще :-)
panov (2002-01-29 15:42:00) [14]Еще вариант - отрисовывать самому, но задача, конечно, не из тех, что вдохновляют...
Alexxx (2002-01-29 15:36:00) [15]Терминал не подходит - у него вообще единственный charset - это OEM_CHARSET, к тому же он растровый, а не TT :(((
panov (2002-01-29 15:32:00) [16]Можно попробовать шрифт "terminal" использовать, только я не уверен, что любой принтер будет их поддерживать...
Alexxx (2002-01-29 15:30:00) [17]А откуда взять эти символы ?
Для Courier New шрифта, например, эти символы содержатся только в OEM_CHARSET.
panov (2002-01-29 15:23:00) [18]используй собственную таблицу перекодировки, в которой псевдографику заменяй на символы, которые тебе нужны...