タイトル | : Re^3: ユーザーコントロールのプロパティ |
記事No | : 15410 |
投稿日 | : 2012/01/23(Mon) 17:40 |
投稿者 | : 魔界の仮面弁士 |
> hWndが使用できないのが今回引っかかりまして、 取り出すだけなら、WindowFromAccessibleObject するなり FindWindowEx するなりすれば拾えます。まぁ、それらの ウィンドウハンドルを取り出したとて、それが どこまで役に立つのかは少々疑問ですが。
> 外見上の理由でBorderLineがあったら困るので 枠線の変更は Appearance ぐらいしか無いですね。
隠すだけなら Region を切り取るか、少し小さめの Frame / PictureBox / UserControl に載せて隠すぐらい…。
なお PictureBox は「フォーカスを受け取れるコントロール」のため、 クリックによってアクティブなコントロールが変化してしまいます。 余計なフォーカス遷移をさせたくない場合は、Frame の方が良いかも知れません。
その逆に枠線の描画なら、LineTo API などを使って、コントロールの上に 直接描画することはできます。再描画タイミングの制御は必要ですが。
>> VB6.0 の標準のListBox コントロールには BorderLine どころか >> BorderStyle プロパティさえもありませんし ListBox 以外のコントロールでも、BorderLine というプロパティは見当たらないですね。 BorderColor とか BorderSize などを持ったものはあるようですが。
> Forms2.0のListBoxの機能でほしいのはBorderLineです。 手元の Office 2010 では、MSForms.ListBox に BorderLine が 見当たりませんでしたが、BorderLine とはどういうプロパティなのでしょうか?
> ShapeコントロールはListBoxの上に張れなかったと思います > Zorderを変更してもListBoxの上にはきませんでした。 Shape はフォームの中層に描画されますが、ListBox は上層に配置されるためですね。 (ZOrder が影響を与えるのはそれぞれの層内だけで、別の層への移動はできません)
とはいえコントロールの上ではなく、周辺に配置するだけならできますね。 たとえば UserControl の中に、それより一回り小さい Frame を貼って その周りに Shape を配置。あとは、BorderStyle なしの Frame の上に それより一回りはみ出すような ListBox を載せるとか。
> その後ListBoxのIntegralHeightをFalseにすることでPictureBoxに > 張れる(はみ出すことができる)ことを知りましたので IntegralHeight は、はみ出せるかどうかを制御するためのものというよりも、 コントロールの高さ指定をリスト項目の高さ単位にするか、1ドット単位で 設定できるようにするかを指定するための物ですね。
> MSDNではOLE_COLORとなっていますがそのようなデータ型の登録がなく 普通に As OLE_COLOR で良いと思いますよ。
Option Explicit
Public Property Get BackColor() As OLE_COLOR BackColor = UserControl.Picture1.BackColor End Property
Public Property Let BackColor(ByVal newColor As OLE_COLOR) UserControl.Picture1.BackColor = newColor UserControl.BackColor = newColor UserControl.PropertyChanged "BackColor" End Property
Private Sub UserControl_InitProperties() On Error Resume Next 'Me.BackColor = UserControl.Ambient.BackColor Me.BackColor = UserControl.Extender.Container.BackColor End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag) On Error Resume Next 'Me.BackColor = PropBag.ReadProperty("BackColor", UserControl.Ambient.BackColor) Me.BackColor = PropBag.ReadProperty("BackColor", UserControl.Extender.Container.BackColor) End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag) PropBag.WriteProperty "BackColor", Me.BackColor, vbButtonFace End Sub
> あとUserControlのPropertyやMethodの追加について詳しい(かつ簡単)な本が VB6 付属の MSDN Library にあるチュートリアルを一通り試しておくと良いですよ。
|