Sign in Join
Wiki copytemporary

TButton/ja

Deutsch · English · Español · Français · Suomi · Русский · 日本語

>> LCL Components >> TButton
このページでは、TButton コンポーネントの使い方を説明します。
(以下の記述で「○○をクリック」とあればそれは左クリックのことです。右クリックの場合はそのように記述します。)

IDE上の表示

「TButoon」 は「Standard」 タブの4番目のコントロールであり 「"OK"のある四角い押しボタン」 のアイコンで表示されています。

使い方

TButton は TForm におけるもっとも基本的なコントロールです。 ボタンをマウスでクリックすることで(または[Tab]キーを押してボタンが選択された状態にして[Enter]キーで押すことで)、何らかのアクションが実行されます。 この 「ボタンをクリックすること」 を 「イベント」 と呼びます。 クリック後に何かしらの処理をするためには、 「イベントハンドラ(イベントの処理方法)」 を記述する必要があります。\

「ボタン」 コントロールをフォームに追加するには、Standardタブ コンポーネントパレットの左から4番目の TButton ("OK" と書かれた四角形のボタン) を押して選択し、ボタンを配置したいフォームの上でクリックしてください。\

マウスクリックに対するイベントハンドラは、フォーム上に置いたボタンをダブルクリックすることで (または、オブジェクトインスペクタの「イベント」タブから、OnClick というイベントを選択することで) 簡単に作ることができます。 Form1フォーム上のButton1 のイベントハンドラは、以下のような記述になります。:

pascal
procedure TForm1.Button1Click(Sender: TObject);
begin

end;

次に、begin と end の間に、Button1 をクリックしたときの処理を書きましょう。

ほとんどすべての初心者用チュートリアルで、 Lazarus を用いた オブジェクト指向プログラミング の手始めとして TButtons が使われています。
以下に示すチュートリアルもボタンの使い方を理解するためにおすすめです。:

簡単な例

pascal
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Lazarus のおかげでよい一日だ。');  //ボタンを押すと、左に書いた文字列がメッセージダイアログで表示されます。
end;

ボタンの自動生成

ときにはボタン(や他のコンポーネント)を Lazarus のフォームデザイナから作るのではなく、プログラム実行時に、動的に生成する方が簡単な場合があります。この方法は特にフォームにボタンを連続して配置する必要があるときに役立ちます。

以下の例でその方法を学びましょう。(簡単な計算機のアプリです):

pascal
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  aButton: TButton;
begin
  for i:=0 to 9 do begin              // 以下を 10回繰り返し、ボタンを 10個作ります。
    aButton:=TButton.Create(Self);    // TButtonコントロールを生成します。 所有者(オーナー)は、ボタンを生成する場所である Form1 とします。
    aButton.Parent:=Self;             // ボタンをどこに表示するかを決めます。(親コントロールは Form1 とします)
    aButton.Width:=aButton.Height;    // ボタンの幅をボタンの高さと同じにします。
    aButton.Left:=i*aButton.Width;    // ボタンの左端の位置を設定します。
    aButton.Caption:=IntToStr(i);     // ボタンのキャプション(0~9)を設定します。
    aButton.OnClick:=@aButtonClick;   // ボタンを押したときのイベントハンドラを設定します。 -> イベントハンドラはこの後で作成します。
  end;
  Self.Height:=aButton.Height;        // フォームの高さをボタンの高さと同じにします。
  Self.Width:=aButton.Width*10;       // フォームの幅を、ボタン10個の幅の合計と同じにします。
end;
pascal
procedure TForm1.aButtonClick(Sender: TObject);
const
  Cnt: Integer = 0;
var
  i: Integer;
begin
  if (Sender is TButton)                            // aButtonClick プロシージャを呼び出したのが TButton のイベントハンドラかどうか?
  and TryStrToInt(TButton(Sender).Caption, i) then  //   同時に、押したボタンのキャプションを整数値に変換できるかどうか?
    begin
      Cnt:=Cnt + i;                                 // 合計値カウンター に 押されたボタンのキャプションの値を追加します。
      Caption:='合計: '+IntToStr(Cnt);               // 合計値をフォームのキャプションに表示します。
    end;
end;

Note: 設置したボタンには、あなたが考えるどんなイベントハンドラでも設定できます。 そのイベントハンドラが <class>.<プロシージャ名>(Sender: TObject); のプロシージャの形を持つ限り。 このようにして、他のクラスからでもボタンを使うことができます。

日本語訳にあたっての追加

pascal
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    procedure aButtonClick(Sender: TObject);
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  aButton: TButton;
begin
  for i:=0 to 9 do begin              // 以下を 10回繰り返し、ボタンを 10個作ります。
    aButton:=TButton.Create(Self);    // TButtonコントロールを生成します。 所有者(オーナー)は、ボタンを生成する場所である Form1 とします。
    aButton.Parent:=Self;             // ボタンをどこに表示するかを決めます。(親コントロールは Form1 とします)
    aButton.Width:=aButton.Height;    // ボタンの幅をボタンの高さと同じにします。
    aButton.Left:=i*aButton.Width;    // ボタンの左端の位置を設定します。
    aButton.Caption:=IntToStr(i);     // ボタンのキャプション(0~9)を設定します。
    aButton.OnClick:=@aButtonClick;   // ボタンを押したときのイベントハンドラを設定します。 -> イベントハンドラはこの後で作成します。
  end;
  Self.Height:=aButton.Height;        // フォームの高さをボタンの高さと同じにします。
  Self.Width:=aButton.Width*10;       // フォームの幅を、ボタン10個の幅の合計と同じにします。
end;

procedure TForm1.aButtonClick(Sender: TObject);
const
  Cnt: Integer = 0;
var
  i: Integer;
begin
  if (Sender is TButton)                            // aButtonClick プロシージャが、 TButton のイベントハンドラから呼び出されたか?
  and TryStrToInt(TButton(Sender).Caption, i) then  // それから、押されたボタンのキャプションを整数値に変換できるか?
    begin
      Cnt:=Cnt + i;                                 // 合計値カウンター に 押されたボタンのキャプションの値を追加します。
      Caption:='合計: '+IntToStr(Cnt);               // 合計値をフォームのキャプションに表示します。
    end;
end;

end.

以下もご参照ください

TBitBtn/ja
TSpeedButton/ja


From the Free Pascal wiki, page "TButton/ja", as it stood on 2024-03-20 after a change by Ariben, 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.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.