Программирование

Русский язык в консоли в Delphi. Подскажите, что тут не так?

Flk 03-12-2011 21:46

Что написала - то и получила Вопрос-то в чём? Получить русские буквы в консольном выводе? Тогда смотри функцию CharToOem(). Или почему твоя русификация не работает? Так функция Rus() в коде не вызывается.
Kaprice_P 03-12-2011 22:24

я так понимаю вот так записать:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,windows;
var
welcome : PAnsiChar; // или PChar
begin
try
CharToOem('Привет!', welcome);
Writeln(welcome);
ReadLn
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
Azgaroth 04-12-2011 15:23

Если хочется использовать именно свою функцию, то её правильную реализацию стоит посмотреть здесь, например: http://reslib.com/book/Delphi_6__Programmirovanie_na_Object_pascal#128

code:

function Rus(mes: string):string;
// В ANSI русские буквы кодируются числами от 192 до 255,
// в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я).
var
i: integer; // номер обрываемого символа
begin
for i := 1 to length(mes) do
case mes[i] of
'А'..'п' : mes[i] := Chr(Ord(mes[i]) - 64);
'р'..'я' : mes[i] := Chr(Ord(mes[i]) - 16);
end;
Result := mes;
end;

А затем вызывать в коде:

Writeln(Rus('Привет!'));


Если использовать CharToOem, то в простейшем случае можно написать:

code:

var
msg, source : string;
begin
source := 'Привет';
SetLength(msg, length(source));
CharToOem(PChar(source), PChar(msg));
Writeln(msg);
end.

(Правда, проверить нет возможности, компилятора Delphi под рукой давненько нет)

Kaprice_P 05-12-2011 12:58

ммм.....конечно это всё работает, но у меня проблемка в другом:
const rSmall:string='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
rBig:string='АБВГДЕЁЖЗИКЛМНОПРСТУФХЧЦШЩЪЫЬЭЮЯ';
эти константы у меня выводит в виде всяких крюкозябликов с точками и черточками
Flk 05-12-2011 13:37

Перед выводом их тоже надо конвертировать в кодировку консоли.