tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: ユーザーコントロールのプロパティ
投稿日: 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 にあるチュートリアルを一通り試しておくと良いですよ。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。