tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルRichTextBoxの行間隔設定方法を教えて下さい
記事No1793
投稿日: 2005/06/07(Tue) 08:29
投稿者うえし
[OSのVer]:Windows2000    [VBのVer]:VB.NET2003
   [OSのVer]:Windows2000,XP    [VBのVer]:VB.NET2003
はじめて投稿します。よろしくお願い致します。

VB6.0ではParaFormat2を利用するとRichTextBoxの行間隔を設定でき、.NETへもそのまま移植できると
の記事が、[VB6.0関係]のRichTextBox関係のページに記載されていました。
確かにVB6.0では動作しましたが、MDEを利用して.NETへ変換しても動作しません。
見かけ上は正常終了しますが、行間隔がまったく変化しないのです。

SendMessage関数は次のように記述しました。
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As
Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As Integer) As Intege
r

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As
Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As PARAFORMAT2) As
Integer

SendMessageがまずいのかと思い、その戻り値をチェックしましたが、VB6.0の場合と同じでした。
なお、RichTextBoxは.NET対応ではなく、変換したままの状態(AX)です。
アドバイスをいただければ幸いです。
よろしくお願い致します。

[ツリー表示へ]
タイトルRe: RichTextBoxの行間隔設定方法(訂正)
記事No1794
投稿日: 2005/06/07(Tue) 09:21
投稿者花ちゃん
> 確かにVB6.0では動作しましたが、MDEを利用して.NETへ変換しても動作しません。

構造体の書き方に注意して下さい。
私が一番苦労したところで、私のやり方(配列の部分を構造体で)はスマートとは言えず、
ここへ記載するには少し恥ずかしいので、ご自分で試すなり、他の人に質問するなりして下さい。
PARAFORMAT2 構造体も下記のように変更しております。

    Private Structure PARAFORMAT2
        Dim cbSize As Integer
        Dim dwMask As Integer
        Dim wNumbering As Short
        Dim wEffects As Short
        Dim dxStartIndent As Integer
        Dim dxRightIndent As Integer
        Dim dxOffset As Integer
        Dim wAlignment As Short
        Dim cTabCount As Short
        Dim rgxTabs As RGX_TAB2    '結局この部分は構造体で処理する事で OK でした。
        Dim dySpaceBefore As Integer
        Dim dySpaceAfter As Integer
        Dim dyLineSpacing As Integer
        Dim sStyle As Short
        Dim bLineSpacingRule As Byte
        Dim bOutlineLevel As Byte
        Dim wShadingWeight As Short
        Dim wShadingStyle As Short
        Dim wNumberingStart As Short
        Dim wNumberingStyle As Short
        Dim wNumberingTab As Short
        Dim wBorderSpace As Short
        Dim wBorderWidth As Short
        Dim wBorders As Short
    End Structure

以上の部分に注意してコードを書き換えればうまく動作します。(配列では NG でした。)

(今、アップグレードウィザードで変換して確認しました)

他にいい方法等が見つかれば結果共々教えて下さい。


# VB6.0 の方のサンプルは試して頂いたそうですが、できれば、試した結果や
環境を詳しく教えて頂けないでしょうか?

[ツリー表示へ]
タイトルRe^2: RichTextBoxの行間隔設定方法を教えて下さい
記事No1797
投稿日: 2005/06/07(Tue) 13:18
投稿者うえし
[OSのVer]:Windows    [VBのVer]:VB.NET  
> > 確かにVB6.0では動作しましたが、MDEを利用して.NETへ変換しても動作しません。
>
> まず、新たに、.NET 上でVB6.0のコードを変換した物を参考にして作り直して下さい。
> 構造体の書き方に注意して下さい。
> 私が一番苦労したところで、私のやり方(配列の部分を構造体で)はスマートとは言えず、
> ここへ記載するには少し恥ずかしいので、ご自分で試すなり、他の人に質問するなりして下さい。
> 後は注意点として間隔の単位がVB6.0と.NET では違うと言う事です。
> (twip のようなのでポイント単位に変換)
>
> 以上の点に注意してコードを書き換えればうまく動作します。
> まずは、新たに.NET 上で一からコードを書いて下さい。
>
> # VB6.0 の方のサンプルは試して頂いたそうですが、できれば、試した結果や
> 環境を詳しく教えて頂けないでしょうか?

早速ご返事いただきありがとうございます。
構造体の書き方を中心に検討してみます。

実はVB6.0では以前からPRARAFORMAT2を利用して行間隔の変更、段落間の行間隔の変更を行っておりまし
た。今回、.NETに移行するにあたりどうしても解決できない部分がこの点でした。RichTextBoxはAXでは
なく.NET標準のコントロールを利用しておりますので、それにはPARAFORMAT2は対応していないのか、と
も考えておりました。

サンプルをVB6.0で試した件ですが、単純にコードをコピー&ペーストしただけです。
rtfを呼び出してボタンをクリックすると行間隔が指定した間隔に変わりました。
正確に間隔を測ったわけではありませんが、見た目は全く問題ありませんでした。
Windowsは2000,XPです。

ありがとうございました。

[ツリー表示へ]