TButton/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: TButton/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | **TButton**  является компонентом, представляющим собой базовый элемент управления в виде кнопки. Данный компонент доступен на вкладке [[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).* |
