- PR -

ポップアップメニューで選択時だけフォントを大きくしたい

1
投稿者投稿内容
ぷーちん
常連さん
会議室デビュー日: 2002/10/30
投稿数: 28
投稿日時: 2003-02-20 18:36
ぷーちんです。いつもお世話になります。

VB.NETでツールを作成しています。
右クリックで表示するポップアップメニューで選択状態の時だけフォントを大きくしたいのですが、
OnDrawItemで渡ってくる e.Bounds のサイズを大きくしないと無理そうです。
このサイズを大きくする方法はないでしょうか?

よろしくお願い致します。
Tog
ベテラン
会議室デビュー日: 2002/06/09
投稿数: 76
投稿日時: 2003-02-20 20:35
boundsの値

bounds.Width +=10
bounds.Height += 10

これでおおきくなりませんか?
ぷーちん
常連さん
会議室デビュー日: 2002/10/30
投稿数: 28
投稿日時: 2003-02-21 10:03
Togさん、ありがとうございます。
boundsに値を代入する方法試してみましたが、
Expression は値であるため、代入式のターゲットにすることはできません。
とエラーが出てしまい駄目でした。
RectangleをNewしたりもしてみましたが、やはり駄目でした。

OnMeasureItem の時点で選択時の大きめのフォントでサイズ設定して、
選択なしの時にはその中心あたりに表示させる方法しかないのかもしれません。
Tog
ベテラン
会議室デビュー日: 2002/06/09
投稿数: 76
投稿日時: 2003-02-21 12:00
こんにちわ。

'状態チェックでフォーカスありのとき
if e.State = Focus Then

e.Graphics.PrintStringで任意に描画するという方法ではどうでしょうか?

br = new SolidBrush(e.ForeColor)
e.Graphics.PrintString(Text,_font,br,e.Bound.x,e.Bound.y)

試していないので上手く動くかわからないですが



[ メッセージ編集済み 編集者: Tog 編集日時 2003-02-21 12:16 ]
ぷーちん
常連さん
会議室デビュー日: 2002/10/30
投稿数: 28
投稿日時: 2003-02-21 14:34
お世話になっております。

Bounds の領域を大きくしないまま描画すると領域内で表示できる
ところまでは拡大された状態で表示するのですが、
領域を超えるところはブチッと切れてしまうんです。
OnMeasureItem でサイズ変更するしかないようです。

とりあえず、OnMeasureItem では選択時のフォントでサイズ設定し、
ついでに非選択時のフォントの高さをで取得しておき、
OnDrawItem で非選択の状態ならサイズと非選択のフォントサイズとの差を
使って領域のY方向真ん中に描画するようにしてみました。
若干非選択の時のメニュー間隔が広く感じてしまいますけど...。

Togさん、いろいろとありがとうございます。
今後ともよろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)