お世話になっております。
ピクチャーボックスへの描画と、オブジェクトの配置に関する質問です。
ピクチャーボックスのScaleModeをミリメートルにすると、描画や配置にずれが出てしまいます。
以下の例を見ていただけますでしょうか。
Rem::::::::::::
Rem まずオブジェクトとして、Picture1を配置し、その中にText1を配置します。
Private Const H = 20
Private Sub Form_Load()
Picture1.Move 0, 0, Form1.Width, Form1.Height
Picture1.ScaleMode = 6
For i = 1 To 100
Picture1.Line (i * H, 0)-(i * H, Picture1.Height)
Next
Text1.Appearance = 0
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
xx = Int(X / H) * H
Text1.Move xx, 0, H
End Sub
Rem ::::::::::::ここまで
これを実行すると、ピクチャーボックスに縦線が表示され、そのピクチャーボックスをクリックすると、その列に沿ってテキストボックスが移動するのですが、列によって、縦線にそろわずにはみ出すことがあります。。
ScaleModeをピクセルにすると、そのようなことは起こりません。
テキストボックスを、縦線にきれいにそろえて配置する方法はあるでしょうか?
よろしくお願いします。
タイトルは、
ScaleMode=3(ミリメートル)
ではなく
ScaleMode=6(ミリメートル)
でした。すみません。
ここらへんで、学習してみてください。
Visual Basic メモ スケール変換
http://cse.naro.affrc.go.jp/yellow/docs/VB-VBA/memo.html
ScaleMode=6(ミリメートル)って印刷用には使うけど
画面では使うことが無いんだけど・・・
やじゅさん、ありがとうございます。
なぜ画面の描写でミリメートルを指定するかというと、画面に10cmの方眼紙のような縦横線を描いて、好きな場所に文字や絵を描き、その画面と同じように印刷をしたいのです。
画面がピクセルで印刷がミリだと、線と文字の位置関係が画面と印刷とでずれてしまいます。
(例えばMicrosoftエクセルでも、画面と印刷ではずれる場合があります)
Picture1のScaleModeをミリに指定して、
Text1.Left=10
としたところ、
Text1のプロパティを見ると、自動的に
Text1.Left=10.001
となっているので、この少数が描画のずれを生じさせていると思うのですが、どうしたらいいか分かりません。
ミリ単位で描画した方眼と文字の位置関係をうまく画面で描画する方法はあるでしょうか?
かなり難しいですね。
画面にピッタリ10cm×10cmの正方形を描く方法【Win32】
http://blogs.wankuma.com/shannon/archive/2007/04/25/73048.aspx
ありがとうございます。
難しそうですね。
「画面に定規を当てて長さを測ったら10cmの線を引く」と言うことまでは望みません。
印刷したときに10cmの長さの線と、その線と同じ長さの文字列が描かれていて、さらに、画面で同じ長さの線と文字列が描かれていたら、画面に定規をあててその線の長さが10cmでなくてもかまいません。
「画面はプレビュー表示」という程度でいいです。
ピクチャーボックスに描くだけだったらできそうなんですけど、ピクチャーボックスの上にテキストボックスを置いて、その配置もぴったり合わせたいので、その部分が難しいと思います。
イメージ的に、Microsoftエクセルでミリメートル単位でセルの幅を指定できる、ようなものを作りたいです。
質問の仕方があいまいな感じですみません。
私ばかりで申し訳ないです。最後にて
画面の最小単位は1ドット(1ピクセル)です。
位置をミリの値でもっていても、最終的にはドット単位に
なります。小数部が出て、例1.5だとすると、画面上は
小数部を切捨て(または切上げ)されて、1.0で描画されて
しまいます。すると画面上の線はずれて表示されます。
画面上できっちり合わせたいならScaleMode=3にします。
ミリ←→ピクセルに変換する処理を記述し、画面上で
きっちり位置を合わせるように補正するしかないです。
ありがとうございました。
画面の最小単位が1ピクセルだったら、画面の描画はScaleModeをピクセルにしなければ、ずれの解消はどうしても無理そうですね。
解決法としては、画面のスケールモードをミリにするかピクセルにするかをユーザに選択させるようにしようと思います。
Adobeイラストレーターのように、環境設定としてユーザが選択できるようにしたいと思います。
ありがとうございました。