Заметил такую особенность или фичу?
Основное меню программы создаётся на основной форме при запуске в run-time. Установка кодировки строк для его заголовком в UTF8 из cp1251 даёт крокозябры.
У всех так или я ошибаюсь?
Win 7 все.
Lazarus все версии.
Кодировка текста для основного меню
Модератор: Модераторы
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Tango, текст примера в студию... возможно, не так подобрана функция перекодировки. Например, у меня работоспособен данный фрагмент (правда, не в рантайме)
Код: Выделить всё
Form1.Caption:=UTF8ToSys(MyFile)+' LexEditor';Вот:
Если UseUTF = True и вот так DefaultSystemEncoding:='utf8'; то в меню кракозябры на Win7 32x. А на Win7 64х нормально, хотя может проблема в другом.
Код: Выделить всё
Function BaseToInterface(S: String): String;
Begin
If UTF8Base then
Result:=ConvertEncoding(S, GPT.ServerCodePage, DefaultSystemEncoding) // AnsiToUTF8(S)
Else
Result:=S;
End;
procedure AddSubItem(Caption, ItemName: String; ToMenu: Integer);
Begin
If ToMenu<> - 1 then
Begin
FormData[CurrentForm].ToItem:=FormData[CurrentForm].Mainmenu.Items[ToMenu];
FormData[CurrentForm].ItemMenu:=TMenuItem.Create(FormData[CurrentForm].ToItem);
FormData[CurrentForm].ItemMenu.Name:=ItemName;
FormData[CurrentForm].ItemMenu.Caption:=BaseToInterface(Caption);
FormData[CurrentForm].ItemMenu.OnClick:=MenuAction.ClickMenu;
FormData[CurrentForm].ToItem.OnClick:=nil;
FormData[CurrentForm].ToItem.Insert(FormData[CurrentForm].ToItem.Count,
FormData[CurrentForm].ItemMenu);
End;
End;
Begin
GPT.ServerCodePage:='cp1251';
DefaultSystemEncoding:=GetDefaultTextEncoding;
End.Если UseUTF = True и вот так DefaultSystemEncoding:='utf8'; то в меню кракозябры на Win7 32x. А на Win7 64х нормально, хотя может проблема в другом.
