太い点線を描画したいのですが、どのようにすればよいかわかりません。教えていただきたいのですが。
Line メソッドをループでまわして
たくさん直線を描くとか。
便乗しますが
Lineオブジェクトで点線や鎖線のBorderWidthプロパティを2以上にすると、ただの太線に見えるようになっちゃいますよね……。
これを点線や鎖線のまま太線にしたい場合は、BorderWidth=1のLineオブジェクトをたくさん横に並べるしか方法がないのでしょうか。
>Lineオブジェクトで点線や鎖線のBorderWidthプロパティを2以上にすると
最初の質問も、そのことが問題で出た質問だと仮定して回答してますが。。。
# Line オブジェクトと Line メソッドは別のものです。
>Lineオブジェクトで点線や鎖線のBorderWidthプロパティを2以上にすると、
>ただの太線に見えるようになっちゃいますよね……。
見えるのではなくて、APIの CreatePenIndirect を使ってLineを書かせるとき、
実線、破線、点線・・等スタイルを設定できますが、このスタイルはペン幅が
1の時だけ有効で、その他は全て実線になってしまいます。
多分これから来ているのでしょう。
>特攻隊長まるるう様
いやいや、私の質問はLineオブジェクトをフォームに貼り付けたときの話です。
たまちゃん様のLineメソッドの話とは別でございます。
>我龍院忠太様
と、いうことは、やはりペン幅1のLineオブジェクトを並べるしかないのでしょうか。
ついレスしてしまいましたが、便乗質問は解決のチェックが難しいので出来れば別スレを立てた方が・・
で、Lineオブジェクトを太くしてみると解るのですが、Lineの端面は四角では有りません。
つまり、端面を気にするなら、Lineオブジェクトを長手方向に並べる方が良いと思います。
端面を気にしないなら縦に並べれば良いでしょう。
GdipDrawLine API を使ってみるとか。
最初の質問者は Line メソッドの質問はしていません。
広く、太い点線の描画です。
その際、ライン (Line) コントロールを使って太くした時に
点線が描けなかったのでは?というのはボクの予想です。
それに対し、ラインコントロールにこだわらず、メソッドで
描画して対応しては?との回答をしました。
>たまちゃん様のLineメソッドの話とは別でございます。
ならば便乗質問で割り込むのは失礼でしょう。質問者が
解決した後ならともかく、勝手に自分の質問にすりかえる
のは迷惑だと思いませんか?別スレッドをたててそちらで
質問してください。
>GdipDrawLine API を使ってみるとか。
確かに、GDI+ならStyle もDash、DashDot、DashDotDot、Dot等があり
太さも自由自在に太さも変えられますね。
.NETからしか使ったことは有りませんが、VB6から使用してみるのも手ですね。
>と、いうことは、やはりペン幅1のLineオブジェクトを並べるしかないのでしょうか。
よく考えたら、線幅が太くなってくると線幅とドットの間隔の比率が変わって、だめジャン。(^^;
Lineコントロール又はLineメソドのどちらを使っても、きちんとやるには、線の太さと
開始点終了点をパラメーターとして受け取り、DashやDashDotを引く関数を作ってしまった方が
速いですね。
> 確かに、GDI+ならStyle もDash、DashDot、DashDotDot、Dot等があり
DashStyle 列挙値、ですね。あるいは、GdipSetPenDashArray API にて、
カスタム定義となる、任意スタイルの破線を指定する事も。
> 太さも自由自在に太さも変えられますね。
GdipCreatePen1 / GdipCreatePen2 API の第 3 引数、もしくは、
GdipSetPenWidth API あたりで。
訂正:
> GdipCreatePen1 / GdipCreatePen2 API の第 3 引数、
幅の指定は 第 2 引数でした。m(_ _)m
(第 3 引数は Unit の指定)
どこかのスレで、APIを応用したプログラムが掲載されていたが、どこだったかな?たまちゃん様の答えになっていない・・・。どなたかそのスレ知りませんか。
スレ見つけてみます。
ツイート | ![]() |