Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Русские буквы в 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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо