Форум: "Начинающим";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];
ВнизAnsiToOem, CharToOem Найти похожие ветки
← →
programmer90 (2009-03-09 21:38) [0]Здравствуйте!
В Связи с апгдейдом проекта на Delphi 2009 возникли некоторые проблемы, как известно это дельфя поддерживает юникод.
Использую функцию AnsiToOem итам ошибка E2010 мол типы не совпадают (в параметрах функции).т.е AnsiString и String не одно и то же.
На сайте поискал нашел то что надо, но для старых версии дельфи.
В немного подправил , компиль идет, правильного резалта нет(((function ConvertAnsiToOem(const S : string) : string;
{$IFNDEF WIN32}
var
Source, Dest : array[0..255] of Char;
{$ENDIF}
begin
{$IFDEF WIN32}
SetLength(Result, Length(S));
if Length(Result) > 0 then
//CharToOem (PChar(S), PChar(Result));
CharToOem (PChar(S), PAnsiChar(Result));
{$ELSE}
if Length(Result) > 0 then
begin
CharToOem(StrPCopy(Source, S), Dest);
Result := StrPas(Dest);
end;
{$ENDIF}
end; { ConvertAnsiToOem }
function ConvertOemToAnsi(const S : string) : string;
{$IFNDEF WIN32}
var
Source, Dest : array[0..255] of Char;
{$ENDIF}
begin
{$IFDEF WIN32}
SetLength(Result, Length(S));
Utf8ToAnsi(s);
if Length(Result) > 0 then
//OemToChar(PChar(S), PChar(Result));
OemToChar(PAnsiChar(S), PChar(Result));
{$ELSE}
if Length(Result) > 0 then
begin
OemToChar(StrPCopy(Source, S), Dest);
Result := StrPas(Dest);
end;
{$ENDIF}
end;
{ ConvertOemToAnsi }
Да и ещё, вызов такой:
ConvertAnsiToOem( Memo[AdvPageControl1.ActivePageIndex].Lines.Text);
Пробовал CharToOem
Расчитываю на помощь мастеров!
← →
Eraser © (2009-03-09 23:37) [1]>
>
> [0] programmer90 (09.03.09 21:38)
> Использую функцию AnsiToOem
а в чем сложности? поведение у функций стандартное. CharToOem теперь работает с юникодовой строкой, если нужно анси - используйте CharToOemA.
← →
programmer90 (2009-03-10 00:28) [2]Вот так писал бы на пред версиях:
function WinToDos(str: string): string;
begin
Result := str;
CharToOemA(PChar(Result), PChar(Result));
end;
я nfr понимаю что надо просто вместо String -AnsiString;
PChar -PAnsiChar?
а вот так на новой :
function WinToDos(str: ansistring): ansistring;
begin
Result := str;
CharToOemA(PAnsiChar(Result), PAnsiChar(Result));
end;
Сложность в том всё равно кракозябры выводит...
← →
programmer90 (2009-03-10 01:00) [3]Код напишите плизззз
← →
Германн © (2009-03-10 01:05) [4]
> programmer90 (10.03.09 01:00) [3]
>
> Код напишите плизззз
Вот пусть код тебе пишет тот, кто заставил тебя перейти на Д2009.
А ещё лучше будет, если сам во всём этом разберёшься.
← →
Eraser © (2009-03-10 01:32) [5]> Source, Dest : array[0..255] of Char;
вот это почитай
http://edn.embarcadero.com/article/38446
http://edn.embarcadero.com/article/38582
http://edn.embarcadero.com/article/38703
← →
programmer90 (2009-03-10 23:36) [6]за ссыль спасибо, очень интересно, но всё правильно сделал только не работает(((
← →
programmer90 (2009-03-10 23:43) [7]
> Вот пусть код тебе пишет тот, кто заставил тебя перейти
> на Д2009.А ещё лучше будет, если сам во всём этом разберёшься.
>
никто не засталял меня перейти, не получится хрен сним, вернусь обратно в 2007 -ой...
Там элементарно типы меняешь и всё, есть какой-то нюанс кот я не могу найти, просто я хочу на двести процентов уверен, чтобы искать этот нюанс
Думаю вот это правильно:function WinToDos(str: ansistring): ansistring;
begin
Result := str;
CharToOemA(PAnsiChar(Result), PAnsiChar(Result));
end;
в 4-ех местах надо поменять и вот тебе апгрейд , разве не так?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c