Top > OOobbs > 24

OOobbs/24

  • サマリ: Dialog上のTextBoxコントロールの重ね順を変える方法
  • 環境: Calc
  • 状態: 解決
  • 投稿者: suou?
  • 投稿日: 2004-06-17 (木) 12:00:21

質問

Dialog上にTextBoxコントロールをのせ、そこに直前のセル行番号情報を記憶させるなどのために使おうと考えています。このTextBoxがDialog上で見えるとわずらわしいですし、また、Dialog上の場所を余分に占めますので、他のコントロールの裏側に隠れた状態でおきたいと思います。ところが、Propertyダイアログからは、重ね順等を指定することができません。何かのコントロールの裏側にもって行く方法はないでしょうか?

回答

  • 重ね合わせの順序を設定できるプロパティーが実はあります。

それは,ダイアログ作成の時のプロパティーを設定するダイアログの「順序」プロパティーです。(多分,「順序」です。メニューが英語のものを使っているので,正確にはわからないのですが,"Order" となっているものです。「高さ」の一つ上のプロパティーです。)

このプロパティーの数値が大きいほど,コントロールが前に表示されます。

隠しのコントロールにユーザーが入力したりするなどのアクセスを必要としないのであれば,もっと他の方法で隠しのコントロールを作成してはどうでしょうか?

1)Visible プロパティーを使って,非表示にする。

2)別の Step にコントロールをおいておく。

二つの方法を紹介します。

1. Visible プロパティーを使って,非表示にする。

まず,一つ目はコントロールオブジェクトの Visible プロパティーを設定してやることで,コントロール事態を非表示にしてやる方法です。

この方法では,コントロールをどこかにおいておいても,確実に非表示にすることができます。また,コントロール自体はユーザーが GUI からアクセスできません。

テキストフィールドの名前が TextField1 とすして,

oDialog = createUnoDialog(DialogLibraries.Standard.Dialog2)

とします。(createUnoDialog で作成したダイアログオブジェクトとします。)

Dim oTextField1 As Object
  oTextField1 = oDialog.getControl("TextField1")
  oTextField1.Visible = false

この Visible プロパティーの設定は,ダイアログを execute メソッドで表示する前に行います。また,すべてのコントロールがと同じ Visible プロパティーを持っています。

2. 別の Step にコントロールをおいておく。

次に,Step を使って行う方法です。

Step というのは,ダイアログのページを変更するようなものです。ダイアログオブジェクトの Step プロパティーを変更することで変更します。

それぞれのコントロールオブジェクトも Step プロパティーを持っていて,これを設定することで,その Step のページにそのコントロールが表示されます。

Step は 0 から 1, 2, ... と使うことができます。(いくつまでつかえるのかよく分かりません。)

ここで,Step 0 は特別で,Step 0 に設定したコントロールは,すべての Step で表示されます。

隠しておきたいコントロールを別の Step にしておくと表示されません。また,その Step に変更できないようにしておけばユーザーはアクセスできません。

Step プロパティーはそれぞれのコントロールオブジェクトで使うことができます。「ページ (ステップ)」(Page (step)) と書かれているプロパティーを設定します。

ダイアログの作成時に,ダイアログ自体を選択して,Step プロパティーを変更すると,そのページで表示されるコントロールオブジェクトが表示,編集できます。

あと,ダイアログを execute メソッドで表示する際には,ダイアログを作成していたときに最後に表示していた Step のページが最初に表示されます。なので,execute する前にダイアログモデルオブジェクトの Step プロパティーを表示したいページに設定します。

MoDialog = oDialog.getModel()
MoDialog.Step = 1

などとします。

まあ,ダイアログからコントロール自体,全体がはみ出ているコントロールは表示されませんけど。

  • はにゃ?? 2004-06-18 (金) 01:14:59
  • いつもながら迅速・懇切なご説明ありがとうございます。oxx.Visible=Falseが使い勝手がよく、旨くいきました。実はoxx.IsVisible=Falseが使えるかと思って質問の前に試しておりましたが、この場合はVisibleなのですね。これでまたひとつ解決です。ありがとうございました。 -- suou? 2004-06-18 (金) 11:02:36


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes