Delphi2010 スクロールボックス(ScrollBox)
2010/09/06
前回は[Additional]内の「Bevel」(べベル)について見ましたので、今回は同じく[Additional]内の「ScrollBox」(スクロールボックス)について見てみます。
スクロールボックスは Delphi6 にもあります。
フォーム画面をリサイズ可能にしている場合、フォームの
AutoScroll
プロパティがFalse(デフォルト)になっている場合、フォーム内のコンポーネントが画面外になっている部分は見えなくなります。
↓
画面外に見えなくなるとまずい、という事で、フォームの
AutoScroll
プロパティをTrue にすると、フォーム内のコンポーネントが画面外になろうとすると自動的にフォームがスクロールバーを表示します。
↓
こういった場合にはスクロールボックスを配置せずともフォームが処理してくれるのですが、フォームにツールバーやステータスバーを表示させている場合には、
↓
という風になってしまい、ステータスバーが見えなくなってしまいます。フォームをリサイズしてもステータスバーは見えていて欲しい、となるでしょう。
そこで登場するのが、スクロールボックスです。
まずは、画面上に表示されているコンポーネント(
※非表示コンポーネント(Dialogなど)は別に構いません
)を選択して切り取り(カット)します。
マウスで範囲選択
Shiftキーを押しながらコンポーネント複数選択も可
構造ウインドウで名前を選択するのも可
↓
選択するとコンポーネントの端に四角いマークが表示されます
↓
切り取りします。Ctrlキーを押しながら[X]キーでも可
↓
切り取りしたらフォームをクリック
それでは、スクロールボックスを配置します。1つ目なので
Name
プロパティは「ScrollBox1」となります。
Align
プロパティを「alClient」にします。
スクロールボックス ScrollBox1 をクリックして選択した状態で、貼り付け(ペースト)を行います。
↓
これで保存・コンパイル(再構築)・実行してみます。
↓
リサイズしてもステータスバーがちゃんと見えている事が分かります。このようにして、スクロールボックスを、フォームの自動スクロールバーの代わりのように使う事が出来ます。また、フォームの任意の場所にスクロール可能な領域を作ることも可能です。
以前作成した[参照]ボタンの OnClickイベントを
procedure TForm1.Button1Click(Sender: TObject);
begin
if (OpenPictureDialog1.Execute) then begin
Image1.Picture := nil ;
try
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Width := Image1.Picture.Width ;
Image1.Height := Image1.Picture.Height ;
finally
;
end;
end;
end;
と追記しておき、画像ファイルの持つ画像の大きさで表示するようにしておき、スクロールボックスの上にイメージを載せておきます。イメージの
Left
プロパティ、
Top
プロパティは共に「0」にしておきます。
↓ 実行
同様にして、画面を2分割するように、スクロールボックスを2つ配置して双方別々のものを表示させたり、画面を4分割するように、スクロールボックスを4つ配置したり、というような事が出来ます。
スクロールボックスの上に他コンポーネントを画面一杯状態で載せると、画面デザイン時、スクロールボックスをマウスで選択出来なくなってしまいます(スクロールバー辺りをクリックしても選択出来ない)。そういった場合は、構造ウインドウで ScrollBox1 をクリックすると選択出来ます。
スクロールボックスのプロパティでは、水平スクロールバー用の
HorzScrollBar
プロパティ、および、垂直スクロールバー用の
VertScrollBar
プロパティの内容はよく操作するかもしれません。内容の項目は双方同じです。それぞれの中の
Smooth
プロパティはヘルプによると
関連付けられているコントロールのスクロール量を動的に計算するかどうかを指定します。
関連するコントロールのクライアント領域サイズに応じて,スクロールバーでスクロールのインクリメントを動的に調整する場合,Smooth を true に設定してください。Smooth が true である場合,スクロールバーの端にある矢印をクリックすると,クライアント領域の約 10 分の 1 ごとに関連のコントロールがスクロールされます。そして,スクロールボックスタブの横にあるスクロールバーをクリックすると,クライアント領域の長さから端の矢印でスクロールする長さを引いた分だけコントロールがスクロールされます。Smooth が false である場合,Increment プロパティは,ユーザーが端にある矢印をクリックしたときにスクロールの量を制御します。そして,スクロールボックスタブの横をクリックすると,クライアント領域の全体の長さでコントロールがスクロールされます。
との事です。また、
Tracking
プロパティはヘルプによると
スクロールボックスを離す前にフォームまたはスクロールボックスがスクロールするかどうかを指定します。
Tracking プロパティを使用して,スクロールボックスのドラッグ中にスクロールバーと関連付けられているコントロールを再描画するかどうかを制御します。Tracking プロパティが true の場合,イメージはスクロールボックスとともにスクロールします。Tracking が false の場合,スクロールボックスを離すまでイメージはスクロールしません。スクロールボックスのドラッグ時に再描画を行うと,コントロールのスクロール量などの役立つフィードバックがユーザーに対して提供されますが,処理速度は低下します。
との事です。また、
Style
プロパティや
Size
プロパティもありますが、変更しても反映されていない様子?です。スクロールバーの位置を指定・取得したい場合は
Position
プロパティ、取得のみですが
ScrollPos
プロパティもあります。プログラムでスクロール制御をする場合には必要になってきますね。
<オブジェクトインスペクタ>をざっと見た感じでは、これまでと同じ、また、他のコンポーネントの追加分と同じ、という感じです。
しかし、Delphi2010のヘルプは少し使いにくいです。
「継承クラスのメンバ」と「クラスのプロパティ」に分かれている事。分類化というのは仕方がないですが、一括して見れないというのはどうも…。それと、「C++の情報」も一緒に表示されていますが、C++をしない私にしてみると少し邪魔かなという気はします。また、Scrollbox の HorzScrollBar の Style プロパティの内容を見たい、という場合、Scrollbox1 で[F1]ヘルプをすると「Forms.TScrollBox」の画面が表示されます。その中の「Forms.TScrollBox のメンバ」をクリックし、表示される「Forms.TScrollBox のメンバ」画面の「HorzScrollBar」をクリックすると、「Forms.TScrollingWinControl.HorzScrollBar」画面が表示され、その画面内には、スクロールバーのプロパティへのリンクはありません。一体どこをクリックしたら、Style プロパティの説明にたどり着けるのか? さっぱり分かりません。
<オブジェクトインスペクタ>で HorzScrollBarプロパティは「(TControlScrollBar)」と表示されていますので、その文字をコピーして、ヘルプの検索の文字入力欄でペーストし、括弧をはずして検索、「Forms.TControlScrollBar」画面が表示されますのでその中の「クラスのプロパティ: Forms.TControlScrollBar のプロパティ」をクリックし、「Forms.TControlScrollBar のプロパティ」画面内にある「Styleプロパティ」をクリックしてようやく説明文にたどり着く、という感じ。
<オブジェクトインスペクタ>で直接[F1]キーでのヘルプが使えない、というのはやっぱり、かなりのストレスです。また、目的の説明に辿り着くまで時間が掛かってしまいます。慣れたらおしまい、かもしれませんが・・・
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>
Delphi入門編
>
Delphi2010
▲2010/09/05
2010/09/06
▼2010/09/07
シェアウェア
Script!World
データベース
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.