Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];

Вниз

Печать из дельфи документов в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
3-42649
PONTIY
2002-01-19 12:19
2002.02.14
Вставка NULL в поле TTable.


4-42901
Anderius
2001-11-17 21:12
2002.02.14
Как насильно завершить другую программу?


1-42713
Kozhanov
2002-01-31 14:37
2002.02.14
как сделать


1-42726
RUS1
2002-01-30 15:51
2002.02.14
как достать параметры , которые передаются вместе с exe при его запуске на выполнение


4-42896
_Dima
2001-12-18 12:12
2002.02.14
В Win98 работаю с COM портом - все OK, в Win2k та же прога глючит. Почему ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский