C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Консольное приложение
Werti
Отправлено: 04.12.2005, 00:06


Дежурный стрелочник

Группа: Участник
Сообщений: 30



отображение русского текста.
попросту говоря поддержка отобьражения нормальной кодировки просто никак не воткну где и сматреть то.
Георгий
Отправлено: 04.12.2005, 02:51


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



в DOS 866 кодировка
а в windows 1251

т.к. прогу ты пишешь используя виндусовый редактор, то русский язык в ней тоже пишется в 1251 кодировке и перед выводом на консоль неплохобы выполнить перекодировку или сразу писать в 866 кодировке

Отредактировано Георгий — 04/12/2005, 03:52
GIZMO
Отправлено: 04.12.2005, 19:28


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Werti @ 04/12/2005, 00:06)
отображение русского текста.
попросту говоря поддержка отобьражения нормальной кодировки просто никак не воткну где и сматреть то.

CODE
//---------------------------------------------------------------------------
#define VCL_IOSTREAM

#include <vcl.h>
#include <condefs.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
#include "FormFromConsole.h"

USEFORM("FormFromConsole.cpp", Form1);
//---------------------------------------------------------------------------
String coutRus(String Text)
{
 String Result;
 int TextLen = Text.Length();

 char* Buffer = new char[TextLen];
 CharToOem(Text.c_str(), Buffer);
 Result = Buffer;
 delete Buffer;

 return Result;
}
#pragma argsused
int main(int argc, char* argv[])
{
 char title[256] = "";
 char className[20] = "";

 //SetConsoleOutputCP(1251); — не работает?

 GetModuleFileName(0, title, sizeof(title));

 TOSVersionInfo info;
 info.dwOSVersionInfoSize = sizeof(info);
 GetVersionEx(&info);
 int platform = info.dwPlatformId;

 if (platform == VER_PLATFORM_WIN32_NT) //NT
   strcpy(className, "ConsoleWindowClass");
 else {//Windows 95
   strcpy(className, "tty");
   String name = title;
   int pos = name.LastDelimiter("\\" );
   name = name.SubString(++pos, name.Length());
   name = name.SubString(1, name.Length() — 4);
   strcpy(title, name.c_str());
 }

 HWND hWnd = FindWindow(className, title);

 bool done = false;
 do {
   clrscr();
   cout << coutRus("Введите команду...");
   cout << endl;

   int choice;
   choice = getch();
   choice -= 48;
   while(choice < -1 || choice > 1) {
     clrscr();
     cout << endl;
     cout << coutRus("Список команд...");
     cout << endl;
     cout << coutRus("0. Завершение работы");
     cout  << endl;
     cout << coutRus("1. Вызов формы");
     cout << endl;
     choice = getch();

...

agisland
Отправлено: 05.12.2005, 04:10


Ученик-кочегар

Группа: Участник
Сообщений: 14



Всё просто. пиши русский текст в Far редакторе например
AVC
Отправлено: 05.12.2005, 11:15


Ветеран

Группа: Модератор
Сообщений: 1583



CharToOem
Вот дублирую свой ответ по такому же вопросу (извиняюсь за ленивость)
CODE

сделал этот пример в Builder
File -> New -> Console_Wizard -> Ok
А вот полный текст работающего примера
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include<iostream>

int main(int argc, char* argv[])
{
using namespace std;
int i;
char *test = "фыва Пролджэ";
CharToOem(test, test);
cout << test << endl;
cin >> i;
return 0;
}
//---------------------------------------------------------------------------

Вернуться в Вопросы программирования в C++Builder