ScaleMode=3(ミリメートル)の場合でもきれいに描画、配置するには?

解決


かんとく  2008-03-12 10:17:20  No: 100446  IP: 192.*.*.*

お世話になっております。

ピクチャーボックスへの描画と、オブジェクトの配置に関する質問です。

ピクチャーボックスの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をピクセルにすると、そのようなことは起こりません。

テキストボックスを、縦線にきれいにそろえて配置する方法はあるでしょうか?

よろしくお願いします。

編集 削除
かんとく  2008-03-12 10:18:22  No: 100447  IP: 192.*.*.*

タイトルは、
ScaleMode=3(ミリメートル)
ではなく
ScaleMode=6(ミリメートル)
でした。すみません。

編集 削除
やじゅ  2008-03-12 13:27:35  No: 100448  IP: 192.*.*.*

ここらへんで、学習してみてください。
Visual Basic メモ スケール変換
http://cse.naro.affrc.go.jp/yellow/docs/VB-VBA/memo.html

編集 削除
やじゅ  2008-03-12 13:38:54  No: 100449  IP: 192.*.*.*

ScaleMode=6(ミリメートル)って印刷用には使うけど
画面では使うことが無いんだけど・・・

編集 削除
かんとく  2008-03-13 12:21:34  No: 100450  IP: 192.*.*.*

やじゅさん、ありがとうございます。

なぜ画面の描写でミリメートルを指定するかというと、画面に10cmの方眼紙のような縦横線を描いて、好きな場所に文字や絵を描き、その画面と同じように印刷をしたいのです。
画面がピクセルで印刷がミリだと、線と文字の位置関係が画面と印刷とでずれてしまいます。
(例えばMicrosoftエクセルでも、画面と印刷ではずれる場合があります)

Picture1のScaleModeをミリに指定して、
Text1.Left=10
としたところ、
Text1のプロパティを見ると、自動的に
Text1.Left=10.001
となっているので、この少数が描画のずれを生じさせていると思うのですが、どうしたらいいか分かりません。

ミリ単位で描画した方眼と文字の位置関係をうまく画面で描画する方法はあるでしょうか?

編集 削除
やじゅ  2008-03-13 17:58:48  No: 100451  IP: 192.*.*.*

かなり難しいですね。
画面にピッタリ10cm×10cmの正方形を描く方法【Win32】
http://blogs.wankuma.com/shannon/archive/2007/04/25/73048.aspx

編集 削除
かんとく  2008-03-14 01:48:15  No: 100452  IP: 192.*.*.*

ありがとうございます。
難しそうですね。

「画面に定規を当てて長さを測ったら10cmの線を引く」と言うことまでは望みません。
印刷したときに10cmの長さの線と、その線と同じ長さの文字列が描かれていて、さらに、画面で同じ長さの線と文字列が描かれていたら、画面に定規をあててその線の長さが10cmでなくてもかまいません。
「画面はプレビュー表示」という程度でいいです。

ピクチャーボックスに描くだけだったらできそうなんですけど、ピクチャーボックスの上にテキストボックスを置いて、その配置もぴったり合わせたいので、その部分が難しいと思います。

イメージ的に、Microsoftエクセルでミリメートル単位でセルの幅を指定できる、ようなものを作りたいです。

質問の仕方があいまいな感じですみません。

編集 削除
やじゅ  2008-03-14 10:37:44  No: 100453  IP: 192.*.*.*

私ばかりで申し訳ないです。最後にて
画面の最小単位は1ドット(1ピクセル)です。
位置をミリの値でもっていても、最終的にはドット単位に
なります。小数部が出て、例1.5だとすると、画面上は
小数部を切捨て(または切上げ)されて、1.0で描画されて
しまいます。すると画面上の線はずれて表示されます。

画面上できっちり合わせたいならScaleMode=3にします。

ミリ←→ピクセルに変換する処理を記述し、画面上で
きっちり位置を合わせるように補正するしかないです。

編集 削除
かんとく  2008-03-15 12:14:45  No: 100454  IP: 192.*.*.*

ありがとうございました。

画面の最小単位が1ピクセルだったら、画面の描画はScaleModeをピクセルにしなければ、ずれの解消はどうしても無理そうですね。

解決法としては、画面のスケールモードをミリにするかピクセルにするかをユーザに選択させるようにしようと思います。
Adobeイラストレーターのように、環境設定としてユーザが選択できるようにしたいと思います。

ありがとうございました。

編集 削除