Есть еще один способ установить кнопку на форме. Для этого дважды щелкните мышью по изображению кнопки на палитре компонентов. Но в этом случае кнопка окажется в
центре формы, а не там, где мы хотим.
Выделите кнопку и перейдите в объектный инспектор. В нем (рис. 7.2) показаны свойства кнопки. Как видите, большинство свойств нам уже знакомо по свойствам формы, поэтому не будем их рассматривать. Есть только одно интересное свойство— ModalResult, но с ним мы познако- мимся позже.
Давайте изменим заголовок кнопки. За заголовок формы отвечает свойство caption. Здесь то же самое. Найдите свойство caption и измените содержащийся в нем текст на "Нажми меня".
Сразу ИЗМеНИМ И СВОЙСТВО Name у кнопки. Ранее говорилось, что любым компонентам и формам лучше давать понятные имена. Поэтому давайте с самого начала будем привыкать к нормальному стилю программирования. Найдите свойство
Name и измените его на MyFirstButton. Пускай имя кнопки пока не отражает никакого смысла, ведь она еще ничего не делает.
Теперь изменим имя формы. Для этого снимите выделение с кнопки (щелкните мышью в любом месте формы). Вверху окна объектного инспектора должна загореться надписьFormlTFormi,как это показано на рис. 7.3. Нужный для редактирования компонент можно выбрать и в этом списке.
Теперь найдите здесь свойство Name (оно должно быть равно Forml) и измените его значение на MainForm (это переводится как главная форма).
Попробуйте запустить программу (нажмите клавишу <F9>). Оболочка Delphi скомпилирует программу и запустит на выполнение. Теперь можно спокойно нажимать на кнопку, только ничего в этом случае происходить не будет.
Давайте усложним пример и введем реакцию на событие, когда нажимается кнопка. Для этого перейдите на вкладку Events (События) в окне объектного инспектора. Когда мы рассматривали события формы, говорилось, что за щелчок клавиши мыши отвечает событие onclick. Для кнопки есть такое же событие. Найдите его (для этого надо перейти на вкладку объектного инспектора Events (События)) и щелкните по нему дважды. Delphi должен создать в редакторе кода процедуру— обработчик события onclick. По умолчанию ей присваивается имя в виде имени компонента (нашей кнопки) плюс имя события без приставки on. В нашем случае получается, что имя процедуры обработчика будет
MyFirstButtonclick:
Procedure TFormi.MyFirstButtonclick(Sender: TObject);
begin
end;
В объектном инспекторе напротив строки onclick также должно появиться имя процедуры обработчика. Вы можете изменить его, просто напечатав новое имя или выбрав уже существующий обработчик из ниспадающего списка в этой же строке. В нашем случае ниспадающий список пуст, потому что мы больше не делали схожих обработчиков событий, и оно у нас пока единственное.
Давайте вернемся в редактор кода и посмотрим, что там создал для нас Delphi? Это процедура MyFirstButtonclick. Ей передается ОДИН параметр Sender объектного типа TObject. В начале выполнения процедуры в переменной sender будет находиться указатель на объект, который вызвал этот обработчик. Это очень важно, потому что вы без проблем можете сделать так, что одна процедура-обработчик сможет обрабатывать нажатия сразу нескольких кнопок или вообще компоненты разного типа. По содержимому этой переменной можно узнать, какой именно компонент сгенерировал событие. Чуть позже вы увидите этот трюк на практике.
Давайте напишем внутри процедуры (между операторными скобками begin и end) команду close. Это метод формы, который закрывает процедуру. Теперь наша процедура должна выглядеть как:
Procedure TFormi.MyFirstButtonclick(Sender: TObject);
begin
Close();
end;
Попробуйте запустить программу и нажать на кнопку. Программа закроется.
Так как close — это метод формы, мы могли написать и так:
Procedure TFormi.MyFirstButtonclick(Sender: TObj ect);
begin
Forml.Close;
end;
Разницы между первым и вторым вариантом нет абсолютно никакой. Так почему же в первом случае написано просто close, не указывая имя объекта, метод которого используется? Мы же знаем, что методы нужно вызывать в форме имя_объекта.имя_метода. Все очень просто. Процедура обработчика события относится к объекту Forml (об этом говорит объявление процедуры TForm1.MyFirstButtonclick), и внутри нее можно использовать его свойства и методы без указания владельца. По умолчанию будет браться Forml. Но если мы захотим из этой процедуры закрыть другую форму, например, Form2, то придется указать, что необходим объект именно Form2.
procedure TFormi.MyFirstButtonclick(Sender: TObj ect);
begin
Form2.Close;
end;
Если мы просто напишем close, то закроется Forml, а не Form2. Когда вы пишете имя какой-то процедуры, то сначала поиск этого имени осуществляется среди членов класса, внутри которого написан код.
В объектном инспекторе напротив строки onclick также должно появиться имя процедуры обработчика. Вы можете изменить его, просто напечатав новое имя или выбрав уже существующий обработчик из ниспадающего списка в этой же строке. В нашем случае ниспадающий список пуст, потому что мы больше не делали схожих обработчиков событий, и оно у нас пока единственное.
Давайте вернемся в редактор кода и посмотрим, что там создал для нас Delphi? Это процедура MyFirstButtonclick. Ей передается ОДИН параметр Sender объектного типа TObject. В начале выполнения процедуры в переменной sender будет находиться указатель на объект, который вызвал этот обработчик. Это очень важно, потому что вы без проблем можете сделать так, что одна процедура-обработчик сможет обрабатывать нажатия сразу нескольких кнопок или вообще компоненты разного типа. По содержимому этой переменной можно узнать, какой именно компонент сгенерировал событие. Чуть позже вы увидите этот трюк на практике.
Давайте напишем внутри процедуры (между операторными скобками begin и end) команду close. Это метод формы, который закрывает процедуру. Теперь наша процедура должна выглядеть как:
Procedure TForm1.MyFirstButtonclick(Sender: TObject);
begin
Close();
end;
Попробуйте запустить программу и нажать на кнопку. Программа закроется.