# TButton

Deutsch (de) English (en) español (es) suomi (fi) français (fr) 日本語 (ja) русский (ru)

A TButton is a component that provides a basic push button control. It ia available on the Standard tab of the Component Palette.

A TButton is one of the most basic controls on a Form. Clicking with the mouse on it (or change with the [tab] key on the button and pressed it with enter), an action is triggered. This click is called an event. For this you need event handler that are called after the jump.

You can add a button to your form, by clicking the TButton (square button with an "OK" in the middle) on the Standard component palette and place it with a click on your form.

The event handler for a mouse click can be quite easily reached in which a double-click on the pasted Button (or in the Object Inspector, select the event OnClick of your Button). The event handler for a Button1 on a form Form1 will look like this:

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

Between the statements begin and end you could write code that is called when Button1 is clicked.

Almost all available beginner tutorials use TButtons as an easy entry into the Object Oriented Programming with Lazarus. Following tutorials are well suited for beginners to understand the use of buttons:

## A simple example

• Create a new application and drop a TButton on the form.
• Doubleclick this Button1 on the form (the default handler: OnClick is created for Button1, the source text editor opens).
• Add following code in the event handler:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Lazarus makes my day');  //A message will be displayed with the content...
end;
• Start your program (with Key <F9>).

## Right-click

Each TButton has an (optional) PopupMenu property that will activate a connected TPopupMenu whenever the button is right-clicked.

## Dynamically generated button

Sometimes, instead of creating buttons (or other components) with the Lazarus form designer, it is easier to create them dynamically at run time. This approach is useful especially if you have continually repeated buttons on a form.

This can be achieved as in the the following example (a quick calculator):

• Create a new blank GUI application with the form Form1 and add StdCtrls to the uses clause (here the TButton is).
• Change caption Form1 to QuickAdd.
• Create the OnCreate event handler of Form1 (go in the Object Inspector to the event OnCreate and click the button [...]).
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
aButton: TButton;
begin
for i:=0 to 9 do begin              //create 10 Buttons
aButton:=TButton.Create(Self);    //create Button, Owner is Form1, where the button is released later
aButton.Parent:=Self;             //determine where it is to be displayed
aButton.Width:=aButton.Height;    //Width should correspond to the height of the buttons
aButton.Left:=i*aButton.Width;    //Distance from left
aButton.Caption:=IntToStr(i);     //Captions of the buttons (0.9)
aButton.OnClick:=@aButtonClick;   //the event handler for the button -> will be created yet
end;
Self.Height:=aButton.Height;        //Height of the form should correspond to the height of the buttons
Self.Width:=aButton.Width*10;       //Width of the form to match the width of all buttons
end;
• Now you must create the event handler for the button clicks.
• In the source editor, entering your class TForm1 in the section private.
• Add procedure aButtonClick(Sender: TObject); and then press the keys [CTRL] + [Shift] + [c] (the code completion becomes active and creates the procedure TForm1.aButtonClick(Sender: TObject);.
• Paste following code:
procedure TForm1.aButtonClick(Sender: TObject);
const
Cnt: Integer = 0;
var
i: Integer;
begin
if (Sender is TButton) and                       //called the event handler of a button out?
TryStrToInt(TButton(Sender).Caption, i)       //then try to convert the label in a integer
then begin
Cnt:=Cnt + i;                                 //the adding counter is incremented by the number of entrechende
Caption:='QuickAdd: '+IntToStr(Cnt);          //write the result to the caption of the form
end;
end;
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!