Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Русские буквы в Console Application   Найти похожие ветки 

 
Андрей Л.   (2004-09-10 13:31) [0]

В  Delphi 7 пришу приложение Console Application, при выводе русских букв не та кодировка, как её изменить на DOS-овскую? Помню, что как-то делал, но как не помню
writeln("Привет");


 
DiamondShark ©   (2004-09-10 13:42) [1]

Набирать текст программы в досовском редакторе.


 
Андрей Л.   (2004-09-10 13:44) [2]

А функцию какую-нибудь?

СharToOem не работает.


 
Reindeer Moss Eater ©   (2004-09-10 13:45) [3]

У нее по пятницам выходной.


 
Андрей Л.   (2004-09-10 13:49) [4]

Блин, товарищи программисты, давайте не будем отвлекаться от темы.


 
Reindeer Moss Eater ©   (2004-09-10 13:52) [5]

CharToOem


 
Андрей Л.   (2004-09-10 13:55) [6]

Функция может и срабатывает но окно тут же закрывается. При
трассировке компилятор пропускает функцию 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:57) [7]

Под результирующий буфер надо выделять память.


 
DiamondShark ©   (2004-09-10 14:00) [8]


> А функцию какую-нибудь?
>
> С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.


 
SlyFox   (2004-09-10 14:01) [9]

Обычно пользую такую вот функцию:

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;


 
Рамиль ©   (2004-09-10 14:07) [10]

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;


 
Андрей Л.   (2004-09-10 14:35) [11]

А как насчёт решения в одну строчку, можно так?
Мне для молодых студентов нужно. Боюсь, что вышепривелённый код будет для них не очень понятен. Но всё равно спасибо всем, кто ответил.


 
Reindeer Moss Eater ©   (2004-09-10 14:40) [12]

А как насчёт решения в одну строчку, можно так?

Стереть CR_LF в конце строк исходника.


 
kukuikar ©   (2004-09-10 16:33) [13]

не парься и используй MyWriteLn вместо WriteLn!

procedure MyWriteln(const S: string);
var
 NewStr: string;
begin
 SetLengtn(NewStr, Length(S));
 CharToOem(PChar(S), PChar(NewStr));
 Writeln(NewStr);
end;



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

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1093853354
ydv
2004-08-30 12:09
2004.09.26
Таймеры в SQL


14-1094465615
SammIk
2004-09-06 14:13
2004.09.26
Какая-то странныя картинка в правом верхнем углу.


14-1094540468
Sir John
2004-09-07 11:01
2004.09.26
Как это понимать?


1-1094627427
Gepard
2004-09-08 11:10
2004.09.26
TOpenDialog


9-1084228298
Алекс А
2004-05-11 02:31
2004.09.26
GLScene Новая демка "FireBrand" Tank Demo Preview Оцните