Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Печать из дельфи документов в 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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо