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

Вниз

Вывод текста в консольном приложении   Найти похожие ветки 

 
BJValentine   (2005-08-15 13:14) [0]

Как вывести русский текст на консоль чтобы он выглядел нормально, а не абракадаброй? Спасибо.


 
alex_***   (2005-08-15 13:35) [1]

OemToChar или CharToOem


 
BJValentine   (2005-08-15 14:08) [2]

А так чтобы не использовать эти фунуции, там не знаю, ну ключ какой-то во WriteLn есть?


 
alex_***   (2005-08-15 14:10) [3]

есть секреная комбинация клавиш.... вышлю за 5$


 
GLFox ©   (2005-08-15 14:11) [4]

Смотри функцию SetConsoleOutputCP


 
GLFox ©   (2005-08-15 14:17) [5]

А чтобы работало не только под Win NT, то ситуацию надо изменить в свою пользу.
Известно, что Write/WriteLn без указания файла осуществляет вывод в файл Output. Output имеет тип TextFile, он же TTextRec, содержимое которого описано в SysUtils.pas. Есть там и поля, содержащие адреса процедур, в которые приходит на обработку поток выводимых приложением данных (в случае вывода). Не вдаваясь в подробности (посмотреть устройство механизмов вывода можно в исходниках RTL), посмотрим, что происходит в процедуре,
отвечающей за вывод (TTextRec.InOutFunc):
{ Реконструкция TextOut из Assign.asm }
function TextOut(var Text: TTextRec): Integer;
var
 Dummy: Cardinal;
 SavePos: Integer;
begin
 SavePos := Text.BufPos;
 if SavePos > 0 then begin
   Text.BufPos := 0;
   if WriteFile(Text.Handle, Text.BufPtr^, SavePos, Dummy, nil) then
     Result := 0
   else Result := GetLastError;
 end else Result := 0;
end;

Теперь видно, что нужно сделать для вывода символов в нужной кодовой таблице - перед выводом в файл средствами ОС модифицировать данные в выходном буфере структуры Text, вписав следующую строку:
CharToOemBuff(Text.BufPtr, Text.BufPtr, SavePos);
Модифицировать буфер можно, т.к. после операции записи в файл содержимое буфера фактически сбрасывается (когда в Text.BufPos записывается 0 - именно столько актуальных данных остается в буфере). Если не завязываться на эту особенность реализации, можно распределить буфер и модифицировать данные уже в нем. Впрочем, решение в любом случае достаточно сильно опирается на
особенности реализации, поэтому проверить его пригодность при смене версии Delphi рекомендуется в любом случае. С другой стороны, вероятность отхода Borland от наработанного решения крайне мала.

Эту инфу я нашел где-то, по-моему, в статье Евгения Каснерика.
P.S. STFW


 
Leonid Troyanovsky ©   (2005-08-15 14:28) [6]


> GLFox ©   (15.08.05 14:17) [5]

> CharToOemBuff(Text.BufPtr, Text.BufPtr, SavePos);


Зачем все эти приседания:


 CharToOem(Pointer(s), Pointer(s));
 writeln(s);


--
Regards, LVT.



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

Форум: "Основная";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
14-1123573058
boriskb
2005-08-09 11:37
2005.09.04
Есть у меня "пунктик"


3-1122002130
lexus3d
2005-07-22 07:15
2005.09.04
абсолютное удаление записей из БД?


3-1122149035
Ильичев С.А.
2005-07-24 00:03
2005.09.04
Как сформировать имя таблици в триггере и создать её?


2-1123225742
chili
2005-08-05 11:09
2005.09.04
как убрать avto-create form оставить только для main form


1-1124023984
_Seldon_
2005-08-14 16:53
2005.09.04
Про размещение класса в пакетах, DLL ках и т.д.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский