VB6でグラフィックの表示に関する問題

このQ&Aのポイント
  • VB6のPictureBoxにLine文を使用して格子を描く際、縦と横の格子が正方形にならず長方形になる問題が発生しています。
  • この問題はDPIやパソコンの画面サイズの違いに関連しており、異なる結果が出る可能性があります。
  • 対処法を検索していますが、まだ解決できていません。助言やヒントをいただけると幸いです。
回答を見る
  • ベストアンサー

グラフィックの表示について VB6

VB6について PictureBoxにLine文で格子を描きましたが、 For X = 1 To X軸 \ 枠 T = 枠 * X * 是正! Picture1.Line (0, Y軸 + T)-(横, Y軸 + T), 線色 Picture1.Line (0, Y軸 - T)-(横, Y軸 - T), 線色 Next X For X = 1 To Y軸 \ 枠 T = 枠 * X Picture1.Line (X軸 + T, 0)-(X軸 + T, 縦), 線色 Picture1.Line (X軸 - T, 0)-(X軸 - T, 縦), 線色 Next X ソースはこんなかんじです。 永遠の初心者(向上心はあるのですが、)で、格子をえがくのははじめてなので、 実行してみて、縦の格子の1マスの幅と横の格子の幅がちがい、正方形になるはずが 長方形になってしまいました。 なぜでしょうか、DPIとかなにか関連があるのでしょうか。それぞれのパソコンで異なった結果が出るのでしょうか。どなたか対処法をご教授ください。検索などかけてはいるのですが、ヒントになるような事柄でも結構です。お願いします。 VB6SP6 OS XP 画面サイズ 1024×768です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>T = 枠 * X * 是正! 「是正」は高さの調整用なのでしょうが不要です。 この値が1以外ならば、長方形になるのは当然です。 >画面サイズ 1024×768です。 パソコンのディスプレイの液晶部の縦横比は、768:1024=0.75:1 になっているか確認して下さい。異なっていれば、グラフィックで正方形を描いてもディスプレイに長方形で表示されてしまいます。 あと気になる点は、 (1)Picture1のプロパティの width と height を同じにすれば、Picture1の外形が正方形になります。これでも長方形に見えるか。 (2)Lineの使い方は無駄があり、同じ線を2度描いてます。

daikaisan
質問者

お礼

顛末は、補足に書きました。 ありがとうございました。

daikaisan
質問者

補足

お返事ありがとうございます。 >T = 枠 * X * 是正! 是正!は当然1でやっていて、長方形とりあえず、是正値で正方形になるようにしてみたりしているだけです。 枠・・・格子の長さを規定しています。 ちなみに、上のソースに Picture1.Line (X軸, Y軸)-(X軸 + 枠, Y軸), &HFF0000 Picture1.Line (X軸, Y軸)-(X軸, Y軸 + 枠), &HFF0000 を付け加え、更に半径を、枠の長さにして円を描きました。 その結果がこれです。 http://withyou.system.cx/plugin/hp/test.gif 枠の横の長さは半径と一致し、同じ長さで描いたはずの縦の枠と一致していません。 ・・・・・・と描いていたところ、 >(1)Picture1のプロパティの width と height のところでハタと、バグに気がつきました。 ソースの前部で With Picture1 .Cls .BackColor = 背景色 .Top = 位T% .Left = 位L% .ScaleWidth = 横%・・・・バグ .ScaleHeight = 縦%・・・・バグ .Width = 横%・・・・バグ .Height = 縦%・・・・バグ とすべきでした。解決です。あほですねぇ、われながら。 大いにヒントになりました。 ありがとうございました。

関連するQ&A

  • グラフの目盛りの打ち方

    使っている環境はVB6.0です。 ピクチャーボックスに折れ線グラフを書きたいのですが、X軸とY軸に目盛りを打って目盛りの横に数字を付けたいのですが、どのように書けばよいか分かりません・・・ 軸自体はLineを使えばできそうなのですが。。。なので、分かる方お願いしますm(_ _)m

  • VBによる回帰直線のプログラム

    VB6を本を見ながら勉強していますが、どの本にもフォーム上にグラフを表示するものばかりでピクチャボックスに回帰直線y=ax+bの直線を描けるようにはどうしたらいいのかプログラムに困っています。どなたか分かる方いましたらよろしくお願いします。ちなみにプログラムはこのようになっています; Private Sub Command1_Click() Dim c(10) As Double Dim d(10) As Double Dim cx As Integer, cy As Integer, lx As Integer, ly As Integer '----------------------------------------------------------------- 'ピクチャボックスの初期化 Picture1.Cls 'グラフの位置 cx = 60 cy = 320 lx = 300 ly = 300 'グラフ枠を描画 Picture1.FillColor = QBColor(15) Picture1.Line (cx, cy)-(cx + lx, cy - ly), , B '縦軸の目盛り Picture1.DrawStyle = 2 '線の種類 点線 For i = 0 To 5 Picture1.Line (cx, cy - 60 * i)-(cx + lx, cy - 60 * i) Picture1.CurrentX = cx - 25 'ラベルを表示する場所の指定 Picture1.CurrentY = cy - 60 * i '横軸を描画 Picture1.Print Format(i) 'ラベル出力位置を設定 '(i*縦軸の目盛りの倍数 現在は10倍 Next i '横軸の目盛り For i = 0 To 5 Picture1.Line (cx + 60 * i, cy)-(cx + 60 * i, cy - ly) Picture1.CurrentX = cx + 60 * i Picture1.CurrentY = cy + 5 Picture1.Print Format(i) Next i '------------------------------------------------------------------------ Dim n As Integer 'n:データ数 n = Val(Text3.Text) For i = 0 To n - 1 c(i) = Val(Text1(i).Text) d(i) = Val(Text2(i).Text) Next i 'データを○印でプロット For i = 0 To n - 1 Picture1.Circle (cx + 60 * c(i), cy - 60 * d(i)), 3, QBColor(0) Next i 'ここまで成功---------------------------------------------------------------------- 'xに関する平均値と標準偏差の計算プログラム Dim sx As Double, sxx As Double, avx As Double, sdx As Double Dim x(10) As Integer For i = 0 To n - 1 x(i + 1) = c(i) Next i sx = 0 sxx = 0 For i = 1 To n sx = sx + x(i) sxx = sxx + x(i) * x(i) Next i avx = sx / n sdx = Sqr((sxx - n * avx * avx) / n) 'yに関する平均値と標準偏差の計算プログラム Dim sy As Double, syy As Double, svy As Double, sdy As Double Dim y(10) As Double 'インデックスが範囲を超えているのエラーの解決 10を代入 For i = 0 To n - 1 y(i + 1) = d(i) Next i sy = 0 syy = 0 For i = 1 To n sy = sy + y(i) syy = syy + y(i) * y(i) Next i avy = sy / n sdy = Sqr((syy - n * avy * avy) / n) '-------------------------------------------------------------------------------------- '回帰直線y=ax+bを描く End Sub

  • VBで円を書いたとき、同じにならないのですが。どうしてでしょう?

    VBで、円を描いたとき Circle (CX, CY), 450 で、描いた円と Pi = 3.14159265 For i = 1 To 120 dd = i * 3 x = Cos((90 - dd) * Pi / 180) y = -Sin((90 - dd) * Pi / 180) HX = CX + x * 450 HY = CY + y * 450 PSet (HX, HY) Next i で、描いた円が、重ならないのですが、何故でしょうか? Circle で、描いた円の方が縦が、少し短いような感じになります。

  • VB.NET(2008)を初めて1週間の初心者です.昔はVB6.0を少

    VB.NET(2008)を初めて1週間の初心者です.昔はVB6.0を少し勉強したのですが,2008に移してから色々変わってしまってて,わからないことだらけなのでアドバイスをお願いします. 只今,PictureBox(640*480)に写し出した画像を二値化しようと取り組んでいます. そこで,色成分を取り出す際に,以前(6.0)はPictureBoxに「.Point」をつけて取り出しをしていましたが,2008では何をあてはめて色の取り出しを行えばいいか全く分かりません….自分で色々と調べてはみたのですが,うまくいかなかったので,こちらの方でご意見を頂ければ幸いに思います. 以下は,6.0のときの色抽出のプログラム部分です. For y = 1 To 480 For X = 1 To 640 pColor(X, y, 0) = main.Point(X - 1, y - 1) Mod 256 '赤の成分の取り出し pColor(X, y, 1) = Int(main.Point(X - 1, y - 1) / 256) Mod 256 '緑 pColor(X, y, 2) = Int(Int(main.Point(X - 1, y - 1) / 256) / 256) '青 Next X Next y

  • 格子点の問題

    nを正の整数とする。xy平面において直線x-3y=0とx+3y=6nとx軸で囲まれてできる領域(境界を含む)に含まれる格子点の数を求めよ この問題を数列ではなく縦1/2n,横3nの長方形の格子点を考えて、そこから余分な分を引いて領域内の格子点の数を求めたいのですが、どのように求めればいいのでしょうか? 直線上の格子点の求め方と考え方を詳しく解説していただけると嬉しいです。

  • VBのFileOpenとInputというコマンドをVC#で使えませんか?

    例:(VB)   FileOpen(2, "test.txt", OpenMode.Input)   Dim i, j, p, r, t As Integer Dim y, T1 As Double Dim x As Double Dim S1() As Double Dim S2() As Double Try Input(2, y) Input(2, T1) For p = 1 To Emax Input(2, x(p)) Next For t = 1 To Tmax Input(2, S1(t)) Next For t = 1 To Tmax Input(2, S2(t)) Next Catch ex As Exception FileClose(2) Exit Sub End Try

  • VBAについて質問します。

    UserFormにTextBoxを縦13個×横9個=117個で並べています。 ExcelのSheetに入力された内容をUserForm内のTextBoxに表示しています。 以下の様に・・・   Dim y As Integer Dim x As Integer For y = 1 To 13 For x = 1 To 9 Controls("TextBox" & (y - 1) * 9 + x) = ThisWorkbook.Sheets(2).Cells(y, x) Next x Next y このコードに表示された数字の先頭に¥を付けたいのですが、どの様にしたら良いでしょうか? だだしUserForm上のTextBoxで縦13個×横9個のうち、縦1列目と縦3列目と縦5列目のみ¥は必要ないです。 それ以外を全て¥を数字の頭に付けたいのですが、よろしくお願いします。

  • データを別なプログラムでも利用したいのですが

    例えばAのプログラムで for x=1 to 10 y=x-5 next x として(x,y)の値を何らかのファイルとして保存し 別なプログラムBでそのデータを利用して picture1.pset(x,y) と作りたいのですが、このときはどのように作ればよいのでしょうか 宜しくお願いします。VB6を使っています 最初のプログラム(A)では↓こんな風に作るのかなと思いますが… Open "C:\WINDOWS\デスクトップ\実験.dat" For Output As #1 For x = 1 To 10 y = x-5 Write #1, x, y Next x Close #1

  • AUTOCAD LT2004の座標系について

    AUTOCAD LT2004を使っています。 CADの標準設定では「横方向がX軸、縦方向がy軸」となっていますが、「横方向がy軸、縦方向がx軸」に変更する方法はありませんか?

  • 円と二次曲線と、楕円

    次の方程式の表す図形を描け。 4x^2+9y^2-8x+54y+49=0 教えてください!この問題の回答は 4(x-1)^2+9(y+3)^2=36 よって、だ円4x^2+9y^2=36をx軸、y軸の方向にそれぞれ1、-3だけ移動したものである。。。 っと書かれていて、二つの図が書いてありました! 二つともx軸の方向に横に伸びた、だ円でした。 <教科書では> 中心が0でー3から3までがx軸の範囲で y軸は2と-2が4x^2+9y^2=36の図です。 つまり横が半径±3、縦が±2のだ円でした。 <4x^2+9y^2-8x+54y+49=0の図> これは式を整理すると、確かに 4(x-1)^2+9(y+3)^2=36 になるのですけど、 教科書に書かれてる図をみると、x軸の方向に長いだ円で、中心が(1、-3)で、 半径が横が±3で、縦が±2と 4x^2+9y^2=36の式と同じでした。 そして教科書の説明どおりに、1、-3だけ移動しただけの事にはなってるのですけど、 私がわからないのは、どうして半径が横は3で縦が2なのか不明です!! だって4(x-1)^2+9(y+3)^2=36の 式を見ても、これって半径は6の円じゃないのですか?? スゴクナゾです!!

専門家に質問してみよう