ウィキのコピーミラー

これは pascal.chat のウィキのミラーです。編集、履歴、ログインはそちらで行います。

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.

第2版、最終更新:WikiArchive 。