Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

не работает oemtochar() [D6, Win2k]


karburator ©   (2003-10-29 11:23:00) 

Подскажите почему DOS текст не конвертируется функцией oemtochar(),
или лучше самому писать конвертер ascii -> ansi?

мой код:
//================================================
//var pc1, pc2: PChar; //
begin
pc1:= "zdxfdsfgsh 1234567890 ЄапЄ®§пЎал";
oemtochar(pc1, pc2);
showmessage( "#"+strpas(pc2)+"#"+ inttostr(length(pc2)) );
end;
//================================================

PS: Если pc1 и pc2 объявлены в процедуре вызывающей ф-ю oemtochar(), то вылезает ошибка, если pc1 и pc2 глобальные переменные, то pc2 = ""


esVer   (2003-10-30 13:29:00) [1]

Ок. Будем считать, что я употребил некорректные формулировки.
Однако, если мне нужно работать с русским текстом как с русским, то предпочтительно не зависить от региональных настроек и "национальности" Windows.


Игорь Шевченко   (2003-10-30 12:48:00) [2]

esVer © (30.10.03 10:46)

Конечно можно. Зачем изобретать велосипед, если он уже встроен в систему, причем с нужным количество колес.

> большинство в этой конференции работает и с русским текстом,
> а посему результат использования ф-ций Windows часто может
> быть далек от ожидаемого.

У каждой функции есть в Win32.hlp описание, где написано, что она делает. Для того, чтобы писать подобные заявления, нужно прочитать это описание, понять, что можно ожидать от функции, и не желать несбыточного. Функции эти работают в ПОЛНОМ соответствии со своими описаниями.


esVer   (2003-10-30 10:46:00) [3]

Игорь, а обосновать можно?


Игорь Шевченко   (2003-10-30 10:25:00) [4]

esVer © (30.10.03 10:10)

Забивать не рекомендуется


esVer   (2003-10-30 10:10:00) [5]

Рекомендуется "забить" на все эти OemToChar, AnsiUpperCase и пр. "прелести" Windows и взять у Анатолия Подгорецкого на homepage модуль перекодировки. Насколько понимаю, большинство в этой конференции работает и с русским текстом, а посему результат использования ф-ций Windows часто может быть далек от ожидаемого.


MBo   (2003-10-30 06:31:00) [6]

GetMem, например


karburator   (2003-10-30 05:42:00) [7]

Ну раз OemToChar не определяет размер переменнной pc2, то так и быть, я сам определю. Вот только для PChar-a не нашёл ф-ю для задания его размера пришлось использовать динамич. массив Char-ов. Не просветите ли меня, уважаемые мастера, как можно определить размер PChar-а без определения его содержимого (что-то типа setlength).

// так работает, но некрасиво #:-(
var
pc1: pchar;
pc2: array of char;
begin
pc1:= "zdxfdsfgsh 1234567890 абвэюя";
setlength(pc2, 33);
OemToChar(pc1, pchar(pc2));
showmessage("#"+strpas(pchar(pc2))+"#"+ inttostr(length(pc2)));
end;


karburator   (2003-10-29 12:32:00) [8]

АГА! :)


Anatoly Podgoretsky   (2003-10-29 11:31:00) [9]

Пушкин вестимо


MBo   (2003-10-29 11:26:00) [10]

А кто будет память выделять?

В FAQ, кажется, пример oemtochar имеется.


Наверх

Титульная страница Поиск, карта сайта Написать письмо