Советы по Delphi

         

Получение имени формы


Если вы используете свойство 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 ;

    var
TC: TComponent; begin
TC := label1.Owner; label1.Caption := TC.ClassName; end;

К своей форме я добавил кнопку, и в обработчике события поместил следующую строчку:

    name := 'AName';

Затем, после щелчка на кнопке, я мог бы щелкнуть на форме, и заголовок метки изменился бы на 'AName'. Мое решение основывается на определении свойства Name в обработчике события создания формы. Т.е., если бы вы хотели назвать форму MyForm, то в обработчике события OnCreate вы должны написать следующее:

    name := 'MyForm';

Я надеюсь, это поможет вам решить проблему. [001757]



Содержание раздела