Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
2-1237223111
MagRam
2009-03-16 20:05
2009.04.26
сертификаты и ключи шифрования


15-1235654209
Кто б сомневался
2009-02-26 16:16
2009.04.26
Анабиоз. Сон разума.


2-1236664136
AIK
2009-03-10 08:48
2009.04.26
Access Violation


15-1235652901
Максим
2009-02-26 15:55
2009.04.26
ADOConnection не видит базы созданные на SQL сервере


4-1208886633
Дмитрий С
2008-04-22 21:50
2009.04.26
Заменить ReadFile на свой.