Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2010, 06:56   #1
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию Русский текст в консольном приложении!

Всем привет, в Delphi 7 данный модуль работает без нареканий, но в D2009 не догоню как пофиксить ошибку:
Код:
unit RuConsole;

interface

implementation

uses
  Windows;

type
  TTextRec = packed record
  Handle: Integer;
  Mode: Word;
  Flags: Word;
  BufSize: Cardinal;
  BufPos: Cardinal;
  BufEnd: Cardinal;
  BufPtr: PAnsiChar;
  OpenFunc: Pointer;
  InOutFunc: Pointer;
  FlushFunc: Pointer;
  CloseFunc: Pointer;
  UserData: array[1..32] of Byte;
  Name: array[0..259] of AnsiChar;
  Buffer: TTextBuf;
end;

function ConOutFunc(var Text: TTextRec): Integer;
var
  Dummy: Cardinal;
  SavePos: Integer;
begin
  SavePos := Text.BufPos;
  if SavePos > 0 then
  begin
    Text.BufPos := 0;
    CharToOemBuff(Text.BufPtr, Text.BufPtr, SavePos);
    if WriteFile(Text.Handle, Text.BufPtr^, SavePos, Dummy, nil) then
      Result := 0
    else
      Result := GetLastError;
  end
  else
    Result := 0;
end;

initialization
  Rewrite(Output);
  TTextRec(Output).InOutFunc := @ConOutFunc; // [DCC Error] RuConsole.pas(82): E2089 Invalid typecast
  TTextRec(Output).FlushFunc := @ConOutFunc; // [DCC Error] RuConsole.pas(82): E2089 Invalid typecast
end.
Что не так?
XerSon вне форума Ответить с цитированием
Старый 21.12.2010, 07:23   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Как не сложно сообразить, TTextRec в D2009 и выше выглядит иначе.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 21.12.2010, 09:36   #3
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

Иначе чем? Этим:
TTextRec = packed record
Buffer: TTextBuf;
XerSon вне форума Ответить с цитированием
Старый 21.12.2010, 16:58   #4
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

Я конечно не знаю, но попробуй в перед выводом текста в консоль поменять кодировку на UTF8. Просто в консоле есть функция для переключения кодировок, и вот в UTF8 отображается норм
alexprey вне форума Ответить с цитированием
Старый 21.12.2010, 18:13   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Иначе чем?
А запустить поиск по TTextRec в .pas из Delphi\Source не судьба?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с ClientSocket в консольном приложении prod87 Работа с сетью в Delphi 1 18.07.2010 14:48
Использование DSPack в консольном приложении Jacobson Мультимедиа в Delphi 5 21.06.2010 05:21
Расширение экрана в консольном приложении FelixKoT Общие вопросы Delphi 1 19.02.2010 21:22
Русский язык в консольном приложении С++ на VS2008 Munch Помощь студентам 3 17.10.2009 17:33