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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2012, 12:44   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Текст в DOS кодировке загрузить в RichEdit

Добрый день!
Есть некий TXT файл в DOS кодировке. Нужно его загрузить в RichEdit (или Мемо). Нашел такой вариант:
Код:
function WinToDos(St: string): string;
var
  Ch: PChar;
begin
  Ch := StrAlloc(Length(St) + 1);
  AnsiToOem(PChar(St), Ch);
  Result := Ch;
  StrDispose(Ch)
end;

function DosToWin(St: string): string;
var
  Ch: PChar;
begin
  Ch := StrAlloc(Length(St) + 1);
  OemToAnsi(PChar(St), Ch);
  Result := Ch;
  StrDispose(Ch)
end;
и использую его:
Код:
procedure TMainForm.sBitBtn1Click(Sender: TObject);
begin
if sOpenDialog1.Execute then
begin
 sRichEdit1.Lines.LoadFromFile(sOpenDialog1.FileName);
 DosToWin(sRichEdit1.Text);
end;
end;
но проект не компилируется, ругаясь на строку (выделил красным), говоря, что:
Код:
[DCC Error] MainUnit.pas(144): E2010 Incompatible types: 'PAnsiChar' and 'PWideChar'
Прошу помощи в решении. Windows 7, Delphi XE
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 10.11.2012, 13:04   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Вот так сработало в Delphi 2010 (нету XE)
Код:
function DosToWin(St: ansistring): string;
var
  Ch: PWideChar;
begin
  Ch := StrAlloc(Length(St) + 1);
  OemToCharW(PAnsiChar(St), Ch);
  Result := Ch;
  StrDispose(Ch)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ts: tstringstream;
begin
  if OpenDialog1.Execute then
  begin
    ts := tstringstream.Create;
    ts.LoadFromFile(OpenDialog1.FileName);
    RichEdit1.Text := DosToWin(ansistring(ts.DataString));
    ts.free;
  end;
end;
Наткнулся на проблему - перенос преобразуется интереснейшим образом
Update
Цитата:
А, стесняюсь спросить, почему TEncoding не используешь раз в DXE сидишь?
Спасибо, не знал . Так правильно?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  ts: tstringstream;
  astr: String;
  B: TBytes;
begin
  if OpenDialog1.Execute then
  begin
    ts := tstringstream.Create();
    ts.LoadFromFile(OpenDialog1.FileName);
    B := tEncoding.Convert(tEncoding.GetEncoding(866),
      tEncoding.GetEncoding(1251), ts.Bytes);
    astr := StringOf(B);
    RichEdit1.Text := astr;
    ts.free;
  end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 10.11.2012 в 13:37.
BDA на форуме Ответить с цитированием
Старый 10.11.2012, 13:11   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
AnsiToOem(PAnsiChar(St), Ch);
А, стесняюсь спросить, почему TEncoding не используешь раз в DXE сидишь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.11.2012, 13:50   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Так правильно?
Да, все работает .
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закодированный текст в кодировке windows-1251 )Игнат( Общие вопросы Delphi 1 15.04.2011 22:25
Сохранение файла в Dos кодировке mistx Microsoft Office Excel 5 04.12.2009 16:33
Загрузить текст(30стр.) в RichEdit Delaila Помощь студентам 2 19.11.2008 23:07
Сохранять текст в нужной кодировке snake-as Microsoft Office Excel 5 28.10.2008 06:37
Как сохранить текст в DOS кодировке? oleg kutkov Общие вопросы Delphi 9 06.08.2007 09:32