Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > XE2, '!dx' вконце названия класса


Автор: superVad 10.7.2014, 15:11
Перехожу с д7 на ХЕ2.
В модулях юзается метод ClassName, который возвращает имя класса формы.
И вот раньше он возвращал, например 'TMainForm', а стал 'TMainForm!dx'. Чего это он?

Автор: Poseidon 11.7.2014, 09:31
А не смутило что ClassName вообще введен для отладки? Используй is и не мудри.

Автор: superVad 11.7.2014, 13:36
Цитата(Poseidon @  11.7.2014,  08:31 Найти цитируемый пост)
А не смутило что ClassName вообще введен для отладки? Используй is и не мудри.

Для чего он введен - на нем не написано.
Если честно, то я не знаю как с помощью is получить имя класса smile

Автор: Poseidon 11.7.2014, 14:08
Цитата(superVad @  11.7.2014,  13:36 Найти цитируемый пост)
я не знаю как с помощью is получить имя класса
Для начала давай разберемся что ты потом с этим именем делаешь? Лично я вижу единственное практическое применение этому имени - это сравнение. Вроди этого:
Код

if MyForm.Classname = 'TForm' then
  begin
    {...}
  end;


Ну так вот тут лучше (и правильнее) будет сравнивать через is.

Автор: superVad 11.7.2014, 15:20
Цитата(Poseidon @  11.7.2014,  13:08 Найти цитируемый пост)
Для начала давай разберемся что ты потом с этим именем делаешь?

Оно просто используется для названия ини файла где хранятся настройки этой формы. Делал не я, если что smile
Надо будет пробежаться по всем формам и поменять этот вызов на обычный текст.

Я уже понял, что этому методу нельзя доверять. Остался чисто академический интерес.

Автор: Poseidon 11.7.2014, 15:38
Цитата(superVad @  11.7.2014,  15:20 Найти цитируемый пост)
Оно просто используется для названия ини файла где хранятся настройки этой формы.
Я надеюсь сам ты хоть понимаешь, что это обсурд. Класс может иметь не один экземпляр. И если каждый захочет сохраниться, то все экземпляры будут дергать один и тот же файл, в результате победит только последний. Поменяй там Classname хотя бы на Name. VCL дает хоть мало-мальски какую-то гарантию индивидуальности Name.

Автор: superVad 12.7.2014, 12:10
Цитата(Poseidon @  11.7.2014,  14:38 Найти цитируемый пост)
Поменяй там Classname хотя бы на Name. VCL дает хоть мало-мальски какую-то гарантию индивидуальности Name.

Если я вдруг создам 2 раза одну и ту же форму одновременно, то Name там будет один и тот же.
Если бы этот код использовался где то в предке форм - то в Classname (или Name) был бы смысл. А так - просто поменяю на текст.

Автор: Poseidon 12.7.2014, 12:41
Цитата(superVad @  12.7.2014,  12:10 Найти цитируемый пост)
Если я вдруг создам 2 раза одну и ту же форму одновременно, то Name там будет один и тот же.
Если у них будет общий Owner (а при создании форм это обычно Application), то VCL не даст второй форме присвоить такое же имя. Единственное исключение - "пустые" имена.

Автор: superVad 12.7.2014, 15:44
Цитата(Poseidon @  12.7.2014,  11:41 Найти цитируемый пост)
Если у них будет общий Owner (а при создании форм это обычно Application), то VCL не даст второй форме присвоить такое же имя. Единственное исключение - "пустые" имена.

Спасибо - не знал. Полез проверять - действительно добавляет к второй форме _1, к третьей _2 и т.д.
Просто извне я к формам не обращаюсь, а изнутри разве что через Self.

Автор: drkot 16.7.2014, 00:40
Цитата(superVad @  10.7.2014,  15:11 Найти цитируемый пост)
а стал 'TMainForm!dx'. Чего это он?

Это мега глюк и не иначе. Возможно в коде идет перекрытие ClassName тем же хелпером.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)