ツールバーの高さの取得

解決


いか  2005-08-20 07:16:57  No: 124261

ツールバーをvbAlignTopで配置しています。そして直ぐ下にテキストボックスを
配置しています。テキストボックスのtopはツールバーの高さで取得していますが、
そこで問題が生じています。フォームのresizeイベントにtextbox.top=toolbar.
height + 30 としているのですが、フォームの幅を狭くして、ツールバーの高さが
二段になったときに、テキストボックスがツールバーの後に隠れてしまいます。
そしてもう一度少しフォームの大きさを変えると、適正な位置になります。
多分フォームをリサイズした後に、ツールバーがフォームの大きさを読取り
折り返しを設定しているものと思われます。その場合、テキストボックスの
位置がリアルタイムで取得できません。これはどのように回避したらよいでしょ
うか?
宜しくお願いします。


マグ  2005-08-20 18:16:28  No: 124262

環境はVB6かVB.NET、どちらでしょうか?

VB.NETで試してみましたが、
>フォームの幅を狭くして、ツールバーの高さが
>二段になったときに、テキストボックスがツールバーの後に隠れてしまいます。

この現象を再現できませんでした。
新規フォームを新たに作成して、必要な部分のコードだけを記載して、
もう一度、試してみてください。


いか  2005-08-20 20:29:49  No: 124263

申し訳有りません。VB6です。

新規プロジェクトでフォームとツールバーとテキストボックスの3つのコント
ロールを配置して必要なコードのみtextbox.top=toolbar.height + 30 (
フォームのリサイズイベント)記述しましたが、結果は上記と同じで、
ツールバーの高さが遅れて取得されるため上手くいきません。

どうぞ宜しくお願いします。


030  2005-08-20 22:09:11  No: 124264

下記環境でも
WinXP SP2
VB6 SP6
でも再現しませんでした。
以下実験手順。

1)新規プロジェクトでフォーム(Form1)にツールバー(ToolBar1)と
    テキストボックス(Text1)を貼り付ける。
2)ToolBar1に適当な数のボタンを作成。
3)Form_Resizeイベントプロシージャに
    Text1.Top = Toolbar1.Height
    を記述
4)実行
5)ウィンドウのサイズを縮小したり伸ばしたりする

結果、テキストボックスはツールバーの下に表示されました。


いか  2005-08-20 23:43:45  No: 124265

030さんありがとうございます。
前の投稿分はvb6にwin98seでした。

それで同じものをwinXP環境で実行しました。すると見事に綺麗に動き
ました。
98ではどのように対処したらよいでしょうか。


マグ  2005-08-21 01:31:36  No: 124266

フォームのresizeイベントがWin98seで動作するかどうかを
MessageBoxなどで確認してください。
動作している場合は再描画をさせて、で試してください。

>ツールバーの高さが遅れて取得されるため上手くいきません。

ここが気になりました。
フォームのサイズを変更すると、ツールバーの高さが遅れて取得されて、
TextBoxの位置設定も遅れて移動するということでしょうか?
もし、そうだったら、PCの環境を調べてください。
CPUとメモリとグラフィックボードの性能などを・・・・・・


いか  2005-08-21 05:35:22  No: 124267

マグさん有難う御座います。

MessageBoxでみたところリサイズイベントが動作しています。
再描画をさせてとはどういうことでしょうか

>>ツールバーの高さが遅れて取得されるため上手くいきません。
>ここが気になりました。

もう一度ここを説明します。
(仮にツールバーの高さを330とします。)
ツールバーが折り返すようにフォームの幅を狭くします。すると、高さが330と
なります。テキストボックスが隠れます。そして次にフォームが折り返しの状態にならないようにフォームの幅を広げます。すると、ツールバーの高さが660になり
ます。よってこの時、テキストボックスは、高さが660の位置になり、ツールバー
から330離れてしまいます。このような具合で、位置設定が上手くいきません。
通常の処理の部類だと思うのですが、どうやればよいのでしょうか。


030  2005-08-21 07:32:22  No: 124268

Win98SEは持ってないので確認がとれませんが思いつく方法を2点

1)Form_Resizeの中でテキストボックスの位置を調整する前に
    DoEventsを入れてやる
2)ツールボックスのウィンドウハンドルよりサブクラス化し
    WM_SIZEメッセージにてテキストボックスの位置調整を行ってやる

とか


030  2005-08-21 07:33:53  No: 124269

>2)ツールボックス
2)ツールバー

でした


いか  2005-08-21 17:57:07  No: 124270

030さん有難う御座います。

1)Form_Resizeの中でテキストボックスの位置を調整する前に
    DoEventsを入れてやる

DoEventsは使用したことがなく全くわからないのですが、とりあえず以下のように
記述しました。しかし上手くいきません。記述の仕方が違うと思うのですが
申し訳有りませんが、少し教えていただけないでしょうか

Private Sub Form_Resize()
  DoEvents
  Text.Top = Toolbar1.Height
End Sub


030  2005-08-21 18:44:04  No: 124271

思っていたのはその通りです。
うまくいかないようですので、2をお試しください。


マグ  2005-08-21 22:56:58  No: 124272

そして、030さんの2番目の方法が出来なかった場合、
Labelを一つ、配置して、ツールバーの高さを表示するように
コーティングして、
ツールバーを折り返したり、折り返さなかったりして、
正常に取得できているかどうかを確かめてください。


葉月α  2005-08-23 22:37:54  No: 124273

1.Resizeイベントの中でブレイクポイントを設置
2.値の変更前と変更後を目で確認する
    (カーソルを合わせるorイミディエイトに表示する)
3.その数値が適切な値かを判断する
4.適切なのにorステップ時はうまくいく場合は再度現象を質問する
5.3.終了時バグに気づいたらバグの報告を行い
    何をどう修正したかを報告する


出掛けに一筆  2005-08-24 16:04:04  No: 124274

スマートな遣り方ではないことをあらかじめお断りしておきます。
formにタイマーコントロールを貼り付けenabled=falseに
しておきます。リサイズイベントでタイマーを有効にし例えば1/100
間隔でツールバーの高さとテキストボックスの位置をチエックする
満足する状態でなければ満足する状態にする
タイマーを無効にする。
こんなんでいかがでしょうか?


移動  2005-08-24 23:21:57  No: 124275

移動した模様。
http://www.gizshare.com/vbtomo/boards/vbqanda.php?do=spread&num=11303


いか  2005-08-25 19:59:05  No: 124276

030さん2の方法は今は技術的に出来ないので、次回にします。
XPではリアルタイムでリサイズイベントが働いているみたいですが、
98では違うみたいです。

出掛けに一筆さん
タイマーコントロールを使うと出来ますね。有難う御座います。

移動さん
>移動した模様。
移動していません。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加