![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Русские буквы в Console Application [D7, WinXP]
Андрей Л. © (2004-09-10 13:31:00)В Delphi 7 пришу приложение Console Application, при выводе русских букв не та кодировка, как её изменить на DOS-овскую? Помню, что как-то делал, но как не помню
writeln('Привет');
kukuikar (2004-09-10 16:33:00) [1]не парься и используй MyWriteLn вместо WriteLn!
procedureMyWriteln( constS: string);
var
NewStr: string;
begin
SetLengtn(NewStr, Length(S));
CharToOem(PChar(S), PChar(NewStr));
Writeln(NewStr);
end;
Reindeer Moss Eater (2004-09-10 14:40:00) [2]А как насчёт решения в одну строчку, можно так?
Стереть CR_LF в конце строк исходника.
Андрей Л. (2004-09-10 14:35:00) [3]А как насчёт решения в одну строчку, можно так?
Мне для молодых студентов нужно. Боюсь, что вышепривелённый код будет для них не очень понятен. Но всё равно спасибо всем, кто ответил.
Рамиль (2004-09-10 14:07:00) [4]function StrToOem(const AnsiStr: string): string;
begin
SetLength(Result, Length(AnsiStr));
if Length(Result) > 0 then
CharToOemBuff(PChar(AnsiStr), PChar(Result), Length(Result));
end;
function OemToAnsiStr(const OemStr: string): string;
begin
SetLength(Result, Length(OemStr));
if Length(Result) > 0 then
OemToCharBuff(PChar(OemStr), PChar(Result), Length(Result));
end;
SlyFox (2004-09-10 14:01:00) [5]Обычно пользую такую вот функцию:
function CnvAnsiToOem(const S : string) : string; //Конвертим в DOS-кодировку
var
Source, Dest : array[0..255] of Char;
begin
SetLength(Result, Length(S));
if Length(Result) > 0 then
AnsiToOem(PChar(S), PChar(Result));
if Length(Result) > 0 then
begin
AnsiToOem(StrPCopy(Source, S), Dest);
Result := StrPas(Dest);
end;
end;
DiamondShark (2004-09-10 14:00:00) [6]
> А функцию какую-нибудь?
>
> СharToOem не работает.
А код и описание симптомов где?
Есть ещё unicode-версии консольных функций:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, Windows;
var
hStdOut: THandle;
procedure WriteW(str: PWideChar);
var
Chars: DWORD;
begin
WriteConsoleW(hStdOut, str, lstrlenW(str), Chars, nil);
end;
begin
hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
WriteW('Привет');
readln;
end.
Reindeer Moss Eater (2004-09-10 13:57:00) [7]Под результирующий буфер надо выделять память.
Андрей Л. (2004-09-10 13:55:00) [8]Функция может и срабатывает но окно тут же закрывается. При
трассировке компилятор пропускает функцию writeln(s1) и readln.
Если убираем функцию, то всё работает нормально
Вот код
uses widows;
var s1,s2:string;
begin
s1:='Привет';
CharToOem(Pchar(s1),Pchar(s2));
writeln(s2);
readnl;
end.
Reindeer Moss Eater (2004-09-10 13:52:00) [9]CharToOem
Андрей Л. (2004-09-10 13:49:00) [10]Блин, товарищи программисты, давайте не будем отвлекаться от темы.
Reindeer Moss Eater (2004-09-10 13:45:00) [11]У нее по пятницам выходной.
Андрей Л. (2004-09-10 13:44:00) [12]А функцию какую-нибудь?
СharToOem не работает.
DiamondShark (2004-09-10 13:42:00) [13]Набирать текст программы в досовском редакторе.