AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
Delphi2010 タブコントロール(TabControl) 2010/10/01
 
前回で[Additional]内のコンポーネントは全て終了しましたので、今回から[Win32]内のコンポーネントを見ていきます。テスト12(フォルダ012)を用意しておきます。それでは[Win32]内の一番最初にある「TabControl」(タブコントロール)について見てみます。タブコントロールは Delphi6 にもあります。

 
取り合えず配置してみます。1つ目ですので Nameプロパティは「TabControl1」となります。

 
タブコントロールは、設定画面等で利用されるような、複数ページの表現手法を提供してくれます。但し、そのページ(タブ)内の構成コンポーネントは全て同じものであり、あるまとまった設定値グループの第1設定、第2設定、第3設定、…というような事をしたい場合に利用されます。ページ内の構成コンポーネントをページ毎に変えたい場合には、タブコントロールではなく、ページコントロール(PageControl)を利用します。
タブコントロールのページ(タブ)を変更した場合(タブコントロールのOnChangeイベントが発生した場合)は、自分で、その内容を更新するプログラムコードを記述する必要があります。
 
タブセット(TabSet)との大きな違いは、タブコントロールはページ(タブ)内の内容を配置できるコンテナを持っている事です(タブセットにはありません)。
 
ページ(タブ)を作るには、<オブジェクトインスペクタ>にて、Tabsプロパティを設定します。右端に表示される[…]をクリックし、「文字列リストの設定」画面が表示されるので、タブ文字を記述します。





 
どのタブ文字を選択しているのかは、TabIndexプロパティで設定・取得する事が出来ます。一番最初のものは 0となり、以降 1,2,3,…となります。-1 は何も指定していないという事を示します。プログラムコードで指定する場合は、Tabs.Count がタブ文字の個数を示すので、Tabs.Count 以上の値を指定しないよう注意します。

 
試しに、タブコントロール内に ラベル3つ、エディット3つ配置してみました。

 
設定は5個指定登録できるようにしましたので、取り合えず、その内容を保持するための静的配列を用意して、起動時=フォームを表示した時に初期設定を行うようにします。
type
 TValSet = record
  xsize : integer ;
  ysize : integer ;
  angle : integer ;
 end;
 TForm1 = class(TForm)
  TabControl1: TTabControl;
  ・・・
  procedure FormShow(Sender: TObject);
 private
  { Private 宣言 }
  vals : array[0..4] of TValset ;
 public
  { Public 宣言 }
end;
・・・
// 文字列→整数
function SInt(s:string):integer ;
var
 i,j : integer ;
begin
 i := 0 ;
 if (s <> '') then begin
  Val(s,i,j);
  if (j <> 0) then i := 0;
 end;
 Result := i;
end;
 
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
 i : integer ;
begin
 for i:=0 to 4 do begin
  with vals[i] do begin
   xsize := 0 ;
   ysize := 0 ;
   angle := 0 ;
  end;
 end;
end;
取り合えず各値は整数値にしています。そして、ページ(タブ)を切り替えた時に、以前の値を保存し、新しいタブの値を表示しますが、タブコントロールには、ページ(タブ)を切り替える直前に発生する OnChangingイベントと、ページ(タブ)を切り替えた直後に発生する OnChangeイベントの双方があります。OnChangingイベントハンドラには、切り替える直前に行う処理=この場合は各値を静的配列に保存する処理、を記述します。OnChangeイベントハンドラには、切り替えた直後に行う処理=この場合は静的配列に格納している各値を表示する処理、を記述します。
// タブ切替直前処理=各値を保存
procedure TForm1.TabControl1Changing(Sender: TObject; var AllowChange: Boolean);
var
 i : integer ;
begin
 i := TabControl1.TabIndex ;
 if (i >= 0) then begin
  with vals[i] do begin
   xsize := SInt(Edit1.Text) ;
   ysize := SInt(Edit2.Text) ;
   angle := SInt(Edit3.Text) ;
  end;
 end;
end;
 
// タブ切替直後処理=各値を表示
procedure TForm1.TabControl1Change(Sender: TObject);
var
 i : integer ;
begin
 i := TabControl1.TabIndex ;
 if (i >= 0) then begin
  with vals[i] do begin
   Edit1.Text := IntToStr(xsize) ;
   Edit2.Text := IntToStr(ysize) ;
   Edit3.Text := IntToStr(angle) ;
  end;
 end;
end;
 
保存・コンパイル(再構築)・実行をしてみます。

↓ 設定1内容を入力して設定2へ

↓ 設定2内容に切替

↓ 設定2内容を入力して設定1へ

↓ 設定1内容を確認

設定2内容を確認
 
実際には、他のコンポーネントへフォーカスが移動した時などでも各値の保存を行う必要はあります。それでは、<オブジェクトインスペクタ>を見ていきます。
 
 
Alignプロパティはお約束、タブコントロールを上下左右の端にぴったり合わせるか、(残りの)画面一杯に合わせるか、合わせない(デフォルト)かを指定します。
HotTrackプロパティは、ヘルプによると
マウスを置くとタブのラベルが自動的に強調表示されるかどうかを決めます。
HotTrack プロパティを true に設定すると,マウスボタンをクリックした場合にどのタブが選択されるかをユーザーにビジュアルに示せます。HotTrack はタブコントロールに複数のタブ行がある場合に便利です。
とありますが、Windows7のAero環境だからなのか、どうも反映されていない様子で True と False(デフォルト)の違いが全く分かりません。ですが必要であれば True にしておくのも良いでしょう。
ImageListプロパティはこれもお約束、イメージリストを用意しておき、アイコン/画像を登録しておくと、タブ文字の箇所にそのアイコン/画像を表示する事が出来ます。例として前回作成したアイコンを表示させてみます。アイコンは順番に表示されていく様子です。

 
MultiLineプロパティをTrueにすると(デフォルトは False)、タブ文字が画面に納まりきらない場合、複数行表示するようになります。

↓ レイアウトが崩れますので整えます

タブ文字内容をプログラム実行時に変更するような場合は、レイアウトが崩れてしまうと問題なのでそういう事はしないほうがいいかもしれません。
 
MultiSelectプロパティは、ヘルプによると
複数のタブを選択できるかどうかを指定します。
MultiSelect プロパティを使用すると,複数のタブを選択できるかどうかを取得または設定できます。MultiSelect プロパティが true になるのは,Style が tsFlatButtons または tsButtons の場合だけです。
との事です。私自身はこれまで、True で使った事はないですが・・・。
 
RaggedRightプロパティは、MultiLineプロパティをTrueにして複数行状態の場合に有効で、以下のようになるようです。
FalseTrue
 
ScrollOppositeプロパティも、MultiLineプロパティをTrueにして複数行状態の場合に有効で、True にすると以下のように、選択行以外が反対側に行くようです。これもレイアウトが崩れてしまうので少し扱いにくいといえます。プログラムコードで調整する事は出来るでしょうけれども、そこまでする必要があるのかは「?」です。
 
Styleプロパティはタブの外観を決めます。
tsButtons
tsFlatButtons
tsTabs
(デフォルト)
 
TabPosition プロパティは、タブの位置をどこにするのかを決めます。
tpBottomtpLefttpRighttpTop
上(デフォルト)
tpLeft・tpRightを利用する場合は、Styleプロパティは「tsTabs」、MultiLineプロパティは「True」となります。プログラムコードで切り替える場合には注意が必要です。
 
 
そのほか、<オブジェクトインスペクタ>をざっと見る限り、他のコンポーネントと共通のものばかりのようですので、このあたりにしておきます。
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/09/30
 2010/10/01
▼2010/10/02
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.