Delphi World - TWinControl.Caption. Теряется маленькая русская буква я
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
TWinControl.Caption. Теряется маленькая русская буква я

Автор: Kuznetsov Alexey

Описание глюка:

  1. Создаешь новый проект;
  2. кидаешь на форму TGroupBox;
  3. в ObjectInspectore выбираешь свойство Caption;
  4. изменяшь его на: я (обязательно маленькая!!!) или на любую строку которая начинается с я;
  5. запускаешь на выполнение;
  6. при выполении у меня на TGroupBox-е не было никакого Caption;

Куда-то он теряет Caption если он начинается с маленькой "я"... Этот глюк будет наблюдаться у всех компонент, включая TForm, которые наследуются от TWinControl

Причем этот глюк можно поймать, и не запуская проект на выполнение. Делаем так:

  1. View Form as Text
  2. View Text as Form
и вуаля: Caption(ы) который начинался с маленькой буквы "я", ушел в гору... Видимо, что то в механизме чтения из dfm не переварило этой буковки.

Проверено на 3-х разных компьютерах.

КОММЕНТАРИЙ

Проверено (D5, NT4, W2K).

Выяснилось следующее.

  1. Проблема имеет место быть только под Windows 2000 (возможно, по наследству осталась и в Windows XP).
  2. Анализ содержимого exe-файла тестового примера (компилировалось под W2K) показал, что символ "я" в Caption присутствует.
  3. Отладка показала, что исчезновение происходит при вызове функции API CreateWindowEx, один из параметров которой - Caption, содержащий первым символом русскую "я" (код $FF в кодировке Win1251).

Очевидно, ошибка кроется в недрах подсистемы Win32 операционки Windows 2000.

Комментарий от SHKoder'a

при большом желании это можно победить так:

procedure TForm1.FormCreate(Sender: TObject);
begin
  GroupBox1.Caption := 'я';
  GroupBox2.Caption := #1103;
end;

но глюк конешно есть и в WinXP и в Win2K3, в Delphi6 и Delphi7

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования