Если вы используете свойство ClassName... with Sender as TForm do Label1.Caption := copy(ClassName,2,length(ClassName)-1); Это даст желаемый эффект без дополнительного кодирования в методе формы OnCreate. 'Sender' в вашем случае может и не быть формой, и тогда ваша программа получит исключительную ситуацию с ошибкой неверного приведения типов. Я не уверен, что при описанных выше условиях Sender может быть только формой. Во всяком случае, вы можете защититься от такой ситуации, сделав предварительную проверку соответствия типов, и приведя Sender к класу вашей формы, как показано ниже: If Sender is TForm then Label1.Caption := (Sender as TForm).Name ; Выполнить этот код можно так: Label1.Caption := Form1.Name ; Но здесь появляется масса других проблем. Мне писали гневные письма о том, что свойство у Form не доступно во время выполнения приложения, что, вероятнее всего связано с тем, что класс формы еще не был проинициализирован. Если бы читали документацию по Delphi более тщательно, вы бы обратили внимание на тот момент, что установка свойства в Инспекторе Объектов (Object Inspector) НЕ означает его автоматическую установку во время выполнения программы. В ответ на ЭТУ ситуацию вам нужно будет установить это свойство явно (в нашем случае .Name) в методе формы .Create. Следующий пример БУДЕТ работать: procedure TForm1.Create( Sender : TObject ) ; begin Form1.Name := 'Form1' ; end ;
procedure TForm1.Button1Click( Sender : TObject ) ; begin Label1.Caption := Form1.Name ; end ; face="Courier New" size="2"> var TC: TComponent; begin TC := label1.Owner; label1.Caption := TC.ClassName; end; К своей форме я добавил кнопку, и в обработчике события поместил следующую строчку: Затем, после щелчка на кнопке, я мог бы щелкнуть на форме, и заголовок метки изменился бы на 'AName'. Мое решение основывается на определении свойства Name в обработчике события создания формы. Т.е., если бы вы хотели назвать форму MyForm, то в обработчике события OnCreate вы должны написать следующее: Я надеюсь, это поможет вам решить проблему. |