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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
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.