|
Delphi2010 ヘッダーコントロール(HeaderControl) 2010/10/19 |
まず最初に、「テスト18」(フォルダ「018」)として新規作成しておきます。前回は[Win32]内の「ListView」(リストビュー)について見ましたので、今回は同じく[Win32]内の「HeaderControl」(ヘッダーコントロール)について見てみます。ヘッダーコントロールは Delphi6 にもあります。これは配置したコントロールに列名を付加させる機能を提供します。
[Standard]内のパネル(Panel)を配置します。1つ目ですので Nameプロパティは「Panel1」となります。位置・大きさは適当に調整します。Captionプロパティは空状態にしておきます。
配置したパネルを選択した状態で、[Win32]内のヘッダーコントロール(HeaderControl)を配置します。1つ目ですので Nameプロパティは「HeaderControl1」となります。
配置したヘッダーコントロールをダブルクリックするか、右クリックメニュー「セクションの設定」をするか、<オブジェクトインスペクタ>のSectionsプロパティの右端の[…]をクリックします。すると、セクション(Sections)編集画面が表示されます。
↓
左上のアイコン「新規追加」をしてみます。
<オブジェクトインスペクタ>で Textプロパティを「名前」と入力します。
同様にもう1つ新規追加をして、 Textプロパティを「内容」と入力し、Widthプロパティを「100」とし、Alignmentプロパティを「taCenter」とします。列名は2つにするとします。
セクション(Sections)編集画面を閉じます。フォーム画面は下記のようになります。
パネル Panel1 の上にリストボックスを配置します。Alignプロパティを「alLeft」にして Widthプロパティを「50」とします。
リストボックスをもう1つ配置します。Alignプロパティを「alClient」にします。
リストボックスそれぞれ Itemsプロパティにテキトウに文字入力をしておいて、保存・コンパイル(再構築)・実行をしてみます。列名のついた、それらしき画面が表示されます。列名にマウスを合わせると色が変わったり、ドラッグで列幅を変更する事は出来ますが、リストボックスは自動的には連動しません。
列幅を変更したときには、リストボックスの幅を変更するようプログラミングします。列幅を変更した時には、OnSectionResizeイベントが発生しますので、そのイベントハンドラを記述します。
procedure TForm1.HeaderControl1SectionResize(HeaderControl: THeaderControl; Section: THeaderSection);
var
w1,w2 : integer ;
begin
if (Section.Index = 0) then begin
// 第1列の幅を変更
w1 := Section.Width ;
w2 := Panel1.ClientWidth - w1 ;
if (w2 < 5) then begin
w1 := Panel1.ClientWidth - 5 ;
w2 := 5 ;
Section.Width := w1 ;
end;
ListBox1.Width := w1 ;
HeaderControl.Sections[1].Width := w2 ;
end
else begin
// 第2列の幅を変更→変更させない
w1 := HeaderControl.Sections[0].Width ;
Section.Width := Panel1.ClientWidth - w1 ;
end;
end; |
第1列の幅の変更だけ行うようにしています。第2列の幅の変更をしてもパネル残り分を取るようにしています。第1列の幅を大きくしても第2列は最低5ドットは残すように補正しています。
保存・コンパイル(再構築)・実行をしてみます。列名の幅を変更しようとすると、リストボックスも追随するのが分かります。
ヘルプには、
OnSectionResize イベントは,ヘッダーセクションのサイズを変更すると発生します。Tracking プロパティが True(デフォルト)の場合,ユーザーがセクションを操作している間に一連の OnSectionResize イベントが発生します。Tracking プロパティが False の場合,OnSectionResize は,ユーザーがマウスボタンを離したときにのみ発生します。 |
とありますが、Delphi2010でのヘッダコントロールに、Trackingプロパティというのは見つかりません。これは、FullDragプロパティの誤記であると思われます。FullDragプロパティがTrue(デフォルト)かFalseかで、そのような状態となります。
なお、OnSectionTrackイベントも、「ヘッダーコントロールのセクションのいずれかをサイズ変更しているときに発生します。」との事なので、こちらでも同様の処理が出来ます。
それでは<オブジェクトインスペクタ>をみていきます。
Alignプロパティはこれまで同様、いつもの定番・お約束です。画面の4辺/全てにくっつける、或いは、何もしない(alNone)を指定します。
Checkboxesプロパティは、Trueにすると(デフォルトは「False」)列名にチェックをつける事が出来るようになります。ヘッダーコントロールのこのプロパティだけでなく、各セクション内のCheckboxプロパティも True にする必要があります。プログラム実行時、各セクション内のCheckedプロパティでチェックを付けたか付けていないかが分かります。
DragReorderプロパティは、Trueにすると(デフォルトは「False」)列名から列名へドラッグ&ドロップする事によって列名の位置を変更する事が出来るようになります。その際、OnSectionDragイベントが発生します。
HotTrackプロパティは、列名の上をマウスが通過したときに列名を強調表示するかどうかを指定します、とありますが、Windows7(Aero)だからなのか、仕様なのかは分かりませんが、False の状態でも、マウスを通過させると強調表示はされています。
Imagesプロパティはこれまで同様、イメージリストを指定し、各セクション内のImageIndexプロパティでイメージ番号を指示することによって、列名にアイコン絵を追加する事が出来るようになります。
NoSizingプロパティは、Trueにすると(デフォルトは「False」)マウスドラッグによる列幅変更が出来なくなります。マウスカーソル形状も変更されません。
OverFlowプロパティは、Trueにすると(デフォルトは「False」)マウスドラッグにより列幅変更を行った際、オーバーフローボタン(「>>」マーク)を表示させる事が出来るようになります。しかし、上記のようにプログラミングにて補正を掛けているような場合には不都合が生じる場合もあるようです。また、WindowsVista/7でのみ有効な機能のようですので、Windows9x/2000/Xpで使用する場合には使えないようですから、Falseのままにしておくのが無難なように思います。
Styleプロパティは、ヘッダーコントロールの外観(スタイル)を「hsButtons」「hsFlat」のうちから選択できるようですが(デフォルトは「hsButtons」)、Windows7(Aero)で動作させているためか、その差異は全く感じられません。
各セクション内にもプロパティは幾つかありますが、まぁ、見れば分かるようなものばかりなので省略します。と、まぁこんな感じでしょうか? 他に代用可能なコンポーネントもありますし、利用する機会があるのかどうかは「?」ですけれども。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/10/18
2010/10/19
▼2010/10/20
シェアウェア
Script!World
データベース
|