![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кодировки ASCII [D6, Win2k, WinXP]
kaif © (2008-01-29 18:31:00)Пытаюсь использовать армянский шрифт Arial LatArm.
Буквы армянского алфавита (их всего 36) занимают ASCII-коды, начиная с 178 и далее подряд (всего 62 символа).
procedure TForm1.Button2Click(Sender: TObject);
var
c: char;
i: integer;
begin
Edit2.Text := '';
for i := 178 to 178 + 62 - 1 do
begin
c := chr(i);
Edit2.Text := Edit2.Text + c;
end;
Label1.Caption := Edit2.Text;
PaintBox1.Canvas.Font.Charset := ANSI_CHARSET;
PaintBox1.Canvas.Font.Name := 'Arial LatArm';
PaintBox1.Canvas.TextOut(0,0,Edit2.Text);
end;
Все компоненты (и TEdit и TLabel и TCanvas, в который я попробовал вывести текст вручную, как видно в примере) отображают в русской Windows XP Pro только четыре армянские буквы, с кодами 181,182,183 и 187.
На остальных позициях отображаются квадраты.
Тот же EXE-файл отображает весь алфавит без проблемпод русской Windows 2000.
Посмотрел исходный код компонентов VCL. Не вижу никаких причин чтобы так работало.
В "таблице символов" Windows все буквы видны под XP тоже.
Даже в Notepad-е все буквы видны.
Видимо только дельфийские приложения так себя ведут. Но ведь они вызывают функцию DrawText(), а дальше все делает Windows... Я ничего не понимаю и даже не представляю, что можно предпринять.
Помнится лет пять назад у меня была точно такая же проблема под Windows 2000. Тогда под Windows 98 все работало нормально, а под W2k часть букв не отображалась. Теперь все отображаются, но проблема теперьв XP.
Кто что может посоветовать или прояснить?
С уважением.
Плохиш (2008-01-29 18:40:00) [21]
> kaif © (29.01.08 18:31)
Ну не верю я, что kaif не знает про отсутствие поддержки юникода в визуальных компонентах VCL.
> Но ведь они вызывают функцию DrawText(),
А привязана она к DrawText A...