ピクチャボックスにグラフを描画しているのですが
幅に16383以上の値を設定しても自動的置き換えられて
しまいます。(ScaleModeはピクセル)
pic.Width = 棒グラフの幅 * 棒グラフの数
↑棒グラフの幅 * 棒グラフの数 = 20000であっても
pic.Width の値は16383となります
16383(2^14)がピクチャボックスの幅の最大値なのでしょうか?
どなたかご存知の方、教えて頂けないでしょうか・・・
仕様ですので、表示されるべき領域だけを必要に応じて
描画する、という仕組みに変えるべきでしょう。
>幅に16383以上の値を設定しても自動的置き換えられて
>しまいます。(ScaleModeはピクセル)
これは又思いっきり狭いですね。(^^;
どのような環境でしょう、VGAのノートパソコンとか。。(単なる興味です)
私の環境では、FormのWidthのMAXは19200Twipsで
PictureBoxのWidthのMAXは245745Twpsです。
>>ねろさん
元質問者は、
>(ScaleModeはピクセル)
と書かれていますよ。
単位は『ピクセル』でしたか。orz
おはようございます。
やはり仕様なのですね・・・
ピクチャボックス内のグラフをスクロールする様に作成している為
"表示される領域だけを必要に応じて描画する"とスクロールの動きに
ついてこれない気がして・・・
色々なテクニックが有りますが、取りあえず
スクロールの度にデーターを書き換えるのでは無く、
PictureBoxを2枚用意して横に並べてグラフを書き、
スクロールは2枚同時にするようなしたらいかがですか。
グラフをスクロールするって何か変ではないですか。
全体が見えなければグラフの意味がないのでは?
座標空間はスケーリングして使用すれば、
ピクチャボックス幅の最大値の問題はなくなります。
VB.NETでは、e.Graphics.ScaleTransform() を使用します。
VB6でも同じ機能があるはずです。
それから、VB.NETではピクチャボックス幅は、2^16ピクセルまであります。
>グラフをスクロールするって何か変ではないですか。
>全体が見えなければグラフの意味がないのでは?
たとえば、『一日の売上を棒グラフにして5年分を表示してください。』
と言う仕様があったとした場合、やおきなさんはどのようにされますか。
作成しているグラフは5分置きに送られてくるデータを
指定された期間分表示したい・・・です。
1日分の幅 = 棒グラフの幅 * 12 * 24
(注:5分ごとなので1時間当り12本で24時間分)
描画したい幅 = 1日分の幅 * 表示日数
メインのピクチャボックスの中にサブのピクチャボックスを
張り付け、スクロールバーでスクロールさせています。
サブのピクチャボックスの幅が16383よりも大きくならず
現在は指定期間の最大日数を15日程度に制限しています。
本当は1ヶ月分くらい表示したのですが、
仕様というのであれば、無理ですね・・・
一枚のPictureBoxに書かずに、複数枚のPictureBoxに
書けばいいだけなのですが。
ツイート | ![]() |