Sign in Join
Wiki copytemporary

TButton/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TButton/ru

OldNewLine
1+**TButton** ![](/wiki-images/b/b2/Tbutton.png) является компонентом, представляющим собой базовый элемент управления в виде кнопки. Данный компонент доступен на вкладке [[Standard tab/ru|Standard]] [[Component Palette/ru|палитры компонентов]].
2+
3+Компонент **TButton** является одним из самых основных элементов управления, располагаемых на [[TForm/ru|форме]]. Щелкая мышью по кнопке (или выбирая её с помощью клавиши \[Tab\] и нажимая клавишу \[Enter\]) происходит срабатывание действия. Этот щелчок называется событием. Для его обработки вам необходим [[Event order/ru|обработчик события]].
4+
5+Вы можете добавить кнопку на форму, щелкнув на элемент **TButton** (прямоугольная кнопка с надписью "OK" по середине), расположенный на вкладке **Standard** палитры компонентов, и пометив его на форму с помощью щелчка мыши.
6+
7+Обработчик события щелчка мыши можно легко создать с помощью двойного щелчка по расположенной на форме кнопки (или выбрать событие OnClick для данной кнопки в Инспекторе Объектов). Обработчик события для кнопки с именем *Button1*, расположенной на форме с именем *Form1*, будет выглядеть так:
8+
9+``` pascal
10+procedure TForm1.Button1Click(Sender: TObject);
11+begin
12+
13+end;
14+```
15+
16+Вы можете поместить ваш код между операторами **begin** и **end**, который будет вызываться при нажатии кнопки **Button1**.
17+
18+Практически все доступные руководства для начинающих используют компонент TButton в качестве введения в [[Glossary|Объектно-ориентированное программирование]] в среде Lazarus. Следующие руководства хорошо подходят для новичков, чтобы понять как использовать кнопки:
19+
20+- [[Form Tutorial|Первое графическое приложение]] для новичков
21+- [[Lazarus Tutorial/ru|Ваша первая программа на Lazarus]] руководство по Lazarus
22+- [[Object Oriented Programming with FreePascal and Lazarus/ru|Пример объектно-ориентированного программирования]] на Free Pascal и Lazarus
23+
24+## Простой пример
25+
26+- Создайте новое приложение и разместите элемент управления **TButton** на форме.
27+- Дважды щелкните по кнопке с именем *Button1*, расположенной на форме (по умолчанию создастся обработчик события *OnClick* для кнопки с именем *Button1* и откроется редактор кода).
28+- Добавьте следующий код в обработчик события:
29+
30+``` pascal
31+procedure TForm1.Button1Click(Sender: TObject);
32+begin
33+ ShowMessage('Lazarus makes my day'); //Будет отображено сообщение с текстом...
34+end;
35+```
36+
37+- Запустите программу (нажав клавишу \<F9\>).
38+
39+## Щелчок правой кнопкой мыши
40+
41+Каждый элемент управления **TButton** имеет необязательное свойство *PopupMenu*, через которое можно связать элемент управления [[TPopupMenu/ru|TPopupMenu]] с кнопкой, в результате чего всякий раз, когда вы щелкните правой кнопкой мыши по кнопке будет отображаться всплывающее меню.
42+
43+## Динамически создаваемая кнопка
44+
45+Иногда, вместо создания кнопок (или других компонентов) в режиме разработки в Lazarus с помощью дизайнера форм легче создавать их динамически в режиме выполнения программы. Данный подход особенно полезен, если у вас есть часто повторяющиеся кнопки на форме.
46+
47+Этого можно достичь, как показано в следующем примере (простой калькулятор):
48+
49+- Создайте новое **пустое** [[Form Tutorial|графическое приложение]] с формой *Form1* и добавьте **StdCtrls** в раздел [[Uses/ru|Uses]].
50+- Измените заголовок формы с *Form1* на *QuickAdd*.
51+- Создайте для формы Form1 обработчик события *OnCreate* (перейдите в Инспектор Объектов и в событии *OnCreate* щелкните кнопку \[...\]).
52+- Добавьте следующий код:
53+
54+``` pascal
55+procedure TForm1.FormCreate(Sender: TObject);
56+var
57+ i: Integer;
58+ aButton: TButton;
59+begin
60+ for i:=0 to 9 do begin //создаем 10 кнопок
61+ aButton:=TButton.Create(Self); //создаем кнопки в родительском элементе Form1
62+ aButton.Parent:=Self; //определяем, где они будут отображаться
63+ aButton.Width:=aButton.Height; //ширина каждой кнопки должна соответствовать её высоте
64+ aButton.Left:=i*aButton.Width; //расстояние слева
65+ aButton.Caption:=IntToStr(i); //заголовки кнопок (0..9)
66+ aButton.OnClick:=@aButtonClick; //обработчик события для кнопок -> будет ещё создан
67+ end;
68+ Self.Height:=aButton.Height; //высота формы должна соответствовать высоте кнопок
69+ Self.Width:=aButton.Width*10; //ширина формы для соответствия ширины всех кнопок
70+end;
71+```
72+
73+- Теперь вы должны создать обработчик события для щелчков мыши.
74+- Добавьте класс *TForm1* в секцию **`private`** в редакторе кода.
75+- Добавьте **`procedure aButtonClick(Sender: TObject);`** и нажмите клавиши \[CTRL\] + \[Shift\] + \[c\] (опция завершения кода станет активной и создастся процедура `TForm1.aButtonClick(Sender: TObject);`.
76+- Вставьте следующий код:
77+
78+``` pascal
79+procedure TForm1.aButtonClick(Sender: TObject);
80+const
81+ Cnt: Integer = 0;
82+var
83+ i: Integer;
84+begin
85+ if (Sender is TButton) and //вызывается ли обработчик события кнопки?
86+ TryStrToInt(TButton(Sender).Caption, i) //попытка преобразования текста в число
87+ then begin
88+ Cnt:=Cnt + i; //увеличение значения счетчика
89+ Caption:='QuickAdd: '+IntToStr(Cnt); //вывод результата в заголовок формы
90+ end;
91+end;
92+```
93+
94+- Запустите приложение.
95+
96+> **Note:** You can assign every imaginable event handlers to your buttons, as long as this the form **`procedure <class>.<name of procedure>(Sender: TObject);`** has. Thus, you can use one from another class!
97+
98+## См. также
99+
100+- [[doc:lcl/stdctrls/tbutton.html|Документация по TButton]]
101+- [[TBitBtn/ru|TBitBtn]]
102+- [[TSpeedButton/ru|TSpeedButton]]
103+- [[TColorButton/ru|TColorButton]]
104+- Игра [[15-puzzle/ru|"Пятнашки"]]
105+
106+---
107+*From the Free Pascal wiki, page "TButton/ru", as it stood on 2020-02-29 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history