• ベストアンサー

VBを用いた対話型図形処理

VB6で以下のような簡単な図形を扱うプログラムを作りたいのです。どこからとっかかればいいか教えてください。VBの経験は長いのですが図形処理は初めてです。 (1)描かれた線の上にマウスカーソルを置くと、線の長さを表示する。 (2)描画枠の隅にカーソルを持って行くと、カーソルの形が変わって、それをドラッグすると描画枠が変形する。(描画図形を拡大/縮小したい)

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

  • ベストアンサー
noname#221368
noname#221368
回答No.2

 Mouse位置を基点にして、文字を表示するとします。最も簡単には、PictureBoxにAutoSize = TrueのLabelを貼り付け、Visible = Falseにセットしておきます。これが初期状態です。基点とLabelのOffset量も最初に決めておきます。  Mouseが図形を認識したと判断されたとき.   (1)表示情報をLabelにセットする.   (2)LabelのTop,Leftを、基点とOffset量から再セットする.   (3)LabelのTop,Left,Width,Heightから、LabelがPictureBoxの描画領域をはみ出していないか、チェックする.   (4)はみ出す場合は、Offset量を再計算し、LabelのTop,Leftを、再セットする.   (5)LabelのVisible = Trueとする.  Mouseが図形から外れたと判断されたとき.   (1)LabelのVisible = Falseとする.  以上において.   (1)PictureBoxに貼り付けたLabelのTop,Left,Width,Heightは、PictureBoxの内部座標に連動します。   (2)PictureBoxの幅,高さは、PictureBoxのScaleWidthとScaleHeightで取得できます。   (3)PictureBoxの原点は、Dufaultで左上隅が(0,0)で、下方向がyの正です。   (4)内部座標の原点と方向,内部Scaleを変更するには、PictureBoxのScaleメソッドとScaleModeを利用します。   (5)以上のTop,Left,(Scale)Width,(Scale)Heightは、内部座標と常に連動するので、ロジックは常に適用できます。  ・・・でも、もっといい方法が知りたい・・・。

Toshi_sj
質問者

お礼

なるほど! ご丁寧な説明、有り難うございます。 やってみます。

その他の回答 (1)

noname#221368
noname#221368
回答No.1

 もっと良い方法があれば、私も知りたいのですが、今までは次のようにやって来ました。 (1)  描かれた線の認識ですが、VB6には図形認識に関する適当なEventがないと思います。なので、点や線の端点の座標を記録するClassをつくり、Mouse座標から探索しました。このクラスをPictureBoxなどのMouse Eventで使用します。 (2)  これには適当なProperty,Event,Methodがあると思います。

Toshi_sj
質問者

お礼

さっそく有り難うございました。 (1)線の認識は、自分でやるしかないわけですね。  線を認識したとして、その情報をカーソル位置付近に表示する方法はご存じでしょうか? (2)その後調べた結果、どうにか出来そうです。

関連するQ&A