Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Re: 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;

Ответить   Томилов Александр Sat, 8 May 2004 12:44:25 +0500 (#140809)

 

Ответы:

Здравствуйте !

Можно попробовать конвертировать все это дело в 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

Ответить   Sun, 9 May 2004 21:09:35 +0400 (#141411)

 

Здоровеньки булы, Victor V. Vakchturov!

9 мая 2004 г., воскресенье, 22:09:35 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Unicode (Delphi5 win2k)",
в котором сообщалось следующее:

В том то и весь прикол - мне нужны символы из Unicode которых в ASCII
нету:
Например 1, 2, 3 в верхнем индексе, корень (он есть в шрифте Terminal
или OEM кодировке, но мне надо ОДИН шрифт и ОДНУ кодировку - Unicode).

Ответить   Томилов Александр Mon, 10 May 2004 13:53:00 +0500 (#141644)