2014年7月25日金曜日

縦書きテキストボックスコントロールの作成(その3)



プロパティをちまちま作っていくのもめんどくさい&デザイナでやらないときりがないと思い、継承コントロールで縦書き指定してやることはできないのか? という部分に気が付いて、今度はそっちにシフトします。

RichTextBox Version4.1自体はあるのですから、それを呼び出して継承してやり、縦書き指定のプロパティをセットしてやればいけそうじゃん? ってなもの。
 

まずは適当な名前でユーザーコントロールを作り
 
ソリューションエクスプローラーの「すべてのファイルを表示」を選んで
先ほど作ったコントロールのデザイナーの部分のコードを選択表示します。
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Control_tate
    Inherits System.Windows.Forms.UserControl

    'UserControl はコンポーネント一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナーで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
    'Windows フォーム デザイナーを使用して変更できます。 
    'コード エディターを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    End Sub

End Class
こんな感じに表示されるかと思われ。
Inherits System.Windows.Forms.UserControl
この部分を編集します。

Inherits System.Windows.Forms.RichTextBox

Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font」はリッチテキストコントロールにはないプロパティっぽいので、削除します。

おそらくはいけないだろうと思われますが、まずは単純に上記のようにリッチテキストを呼び出しました。
次に縦書き指定をしてやります。デザイナじゃない通常のコード画面に以下の指定をしてやって実行。
Public Sub New()
    InitializeComponent()
    Class_API.SendMessage(Me.Handle, Class_API.EM_SETOPTIONS, Class_API.ECOOP_OR, Class_API.ES_VERTICAL)
End Sub
 
縦書きになりませんでした。
まぁ、リッチテキストのバージョンが4.1ではないためかな? と考慮いたします。
 
なら、DLLを参照設定して直接「Inherits」でVersion4.1を宣言できないか? と思っていろいろ調べてみましたが、DLLの参照設定ができない……

いろいろ試してみましたが、どうにも直接コントロールを配置できそうになさそうです。
とはいえ、プロパティをせっせと作るのはめんどくさいんだよなぁ……
なかなか思うとおりに行かない。

0 件のコメント:

コメントを投稿