Главная страница
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.017 c
3-1220008167
keymaster
2008-08-29 15:09
2009.04.26
GetTableNames возвращает пустоту


2-1237306540
Кеша
2009-03-17 19:15
2009.04.26
Входящие цветные сообщения


9-1179167410
StreG
2007-05-14 22:30
2009.04.26
помогите новичку


2-1236798663
mahab
2009-03-11 22:11
2009.04.26
GetwindowmoduleFilename не работает


4-1208784022
leonidus
2008-04-21 17:20
2009.04.26
Как узнать размер exe из него же?