Unicode (Delphi5 win2k)

Аллоха, ALL!
В этот знаменательный день 8 мая 2004 г.
пиво ударило мне в голову, и я наскреб:
Кто-нибудь знает как отобразить в RichEdit (label, button, canvas -
без разницы лишь бы работало) строку в Unicode
например
'x+'+#8730+'x+'+#179+#8730+'x=0'
из этого должно получиться
x+Корень квадратный из x + Корень кубический из x = 0
Номера символов я брал из фонта Arial с помощью таблицы символов
(win2000). Причем если скопировать из таблицы символов в Word то
формула отображается верно.
На данный момент я сделал вот так, но это через жо..:
procedure TForm1.Button1Click(Sender: TObject);
type
EquString = record
str:string;
arr: array [0..9,0..1] of integer;
end;
const
EquationString: EquString = (str:'x+'+#251+'x+'+#179+#251+'x=0'; arr:
( (2,1),(5,1),(6,1),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0)));
var i:integer;
begin
RichEdit1.Font.Name:='Arial';
RichEdit1.Font.Charset:=ANSI_CHARSET;
RichEdit1.Text:=EquationString.str;
for i:=0 to 9 do
begin
if EquationString.arr[i][1]=0 then break;
Richedit1.SelStart:=EquationString.arr[i][0];
Richedit1.SelLength:=EquationString.arr[i][1];
if i mod 2=0 then Richedit1.SelAttributes.Charset:=OEM_CHARSET
else Richedit1.SelAttributes.Charset:=ANSI_CHARSET;
end;
Richedit1.SelLength:=0;
end;
символ 251 - в OEM = 8730 Unicode = корень
PS: IsValidCodePage вообще какую-то чушь выдает (через GetLasterror):
function GetErrorMessage(ErrorCode: integer): string;
const BUFFER_SIZE = 1024;
var lpMsgBuf: Pchar;
LangID: DWORD;
begin
lpMsgBuf := AllocMem(BUFFER_SIZE);
LangID := GetUserDefaultLangID;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS,
nil, ErrorCode, LangID, lpMsgBuf, BUFFER_SIZE, nil);
Result := StrPas(lpMsgBuf);
FreeMem(lpMsgBuf);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
IsValidCodePage(1251); // 1251 Windows 3.1 Cyrillic
showmessage(GetErrorMessage(GetLasterror));
IsValidCodePage(1200); //1200 Unicode (BMP of ISO 10646)
showmessage(GetErrorMessage(GetLasterror));
end;
Здравствуйте !
Можно попробовать конвертировать все это дело в ASCII, а уж потом -
в ричедит совать обычными методами.
Функция WideCharToMultiByte
MultiByteToWideChar - обратное преобразование.
--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru
Номер выпуска : 3026
Возраст листа : 230 (дней)
Количество подписчиков : 394
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/141411
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru