|
■No72228 (くも さん) に返信
> そういう人はそのまま印刷してしまい…見づらいものとなってしまいます
「データの出力」のためのテキストデータと、
「データの表示/印刷」のためのリッチテキストデータとを
分けて考えましょう。
> FileOpen(1, FLT, OpenMode.Output)
これは、旧BASIC互換のファイル出力命令ですね。
今回のような表データの場合、各列を何桁目から出力するかの調整が必要ですが、
FileSystem.Print メソッド(VB.NET) / Print ステートメント(BASIC) にて固定幅出力を行う場合には、
FileSystem.FileWidth メソッド(VB.NET) / Width ステートメント(BASIC) で指定すると便利かも。
'各列を、何桁目から書き始めるかの定義
Dim cols() As TabInfo = {TAB(1), TAB(12), TAB(27), TAB(40)}
'まとめて一行分ずつ出力しても良いし…
Print(1, cols(0), "1", cols(1), "0.0", cols(2), "1.0", cols(3), "-1.2712")
Print(1, cols(0), "", cols(1), "1.0", cols(2), "1.0", cols(3), "-1.2712")
'一行分を複数に分けて出力しても良い
Print(1, cols(0), "2")
Print(1, cols(1), "0.0")
Print(1, cols(2), "12.3")
Print(1, cols(3), "-0.8753")
Print(1, cols(0), "3", cols(1), "1.1")
Print(1, cols(2), "0.0", cols(3), "-1.2712")
'複数行分をまとめることもできる
Print(1, cols(0), "4", cols(1), "0.0", cols(2), "1.0", cols(3), "-1.2712", cols(0), "5", cols(1), "1.0", cols(2), "1.0", cols(3), "-1.2712")
> ゴシックでは列がズレます。
ゴシック体か否かは、直接の原因では無いと思います。
指定したフォントとサイズが原因でズレが生じたのでしょう。
(3の倍数ポイントのサイズを選択すると、ズレにくいとされています)
ちなみに、「MS ゴシック」や「MS 明朝」は固定幅フォント、
「MS Pゴシック」や「MS P明朝」はプロポーショナルフォントですが、
固定幅であっても、下記のような理由でズレが生じることがあります。
http://msdn.microsoft.com/ja-jp/library/cc979401.aspx
なお、表形式のデータの「表示」だけが問題な場合には、そのテキストファイルに
出力する内容を、DataGridView 等に表示させた方が読みやすいかと思います。
今回の場合、タブ区切りテキストとして出力する手法もあるかと思います。
RichTextBox であれば、「SelectionTabs プロパティ」を指定することで
各列の出力位置を調整できるので、表形式のデータを綺麗に纏められるでしょう。
ちなみにリッチテキストでは、「表」形式のデータもサポートしてます。
今回は出番が無いかもしれませんけれどね。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.RichTextBox1.Rtf = "{\rtf1\ansi\deff0" & vbCrLf _
& "\trowd \cellx1000 \cellx2000 \cellx3000" & vbCrLf _
& "cell 1\intbl\cell cell 2\intbl\cell cell 3\intbl\cell" & vbCrLf _
& "\row}"
End Sub
> よってフォントを("MS 明朝", 8)にしたいです
> またNoは1000近くいくこともありデータが膨大になることもあるので軽くしたいです
表示だけならば、HTML という選択肢もありますね。
Imports System.IO
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim sampleFile As String = Path.Combine( _
My.Computer.FileSystem.SpecialDirectories.Desktop, _
"RESULT.HTML")
Using sw As New System.IO.StreamWriter(sampleFile, False)
sw.WriteLine("<html><head><meta http-equiv='content-type' content='text/html;charset=utf-8'>")
sw.WriteLine("<style>pre{font-family:'MS 明朝'; font-size:9pt; color:navy;}</style>")
sw.WriteLine("</head><body><pre>")
sw.WriteLine("No x座標 λ fx σx σy σz fb σ/f")
For dummy As Integer = 1 To 1000
sw.WriteLine("1 0.0 1.0 1.5999 -1.2712 0.6993 -0.0598 1.6 1.2689 ×")
sw.WriteLine(" 1.0 1.0 1.5999 -1.2712 0.2667 -0.5316 1.6 1.2935 ×")
sw.WriteLine("2 0.0 1.0 1.5999 -0.8753 0.2512 -0.5259 1.6 1.0328 ×")
Next
sw.WriteLine("</pre></body></html>")
End Using
Process.Start(sampleFile)
End Sub
End Class
> ワードパッドを立ち上げてフォントを変更すればいいこと
> …といわれればそうなんですけど
> このソフトは業務で使ったりします…そしてあまり分かってない人もいます
業務での利用であるならば、表示や印刷を汎用のワードパッドに頼るのではなく、
読みやすく表示するためのビューワー(あるいは編集用のビューワー)を作成するのも手かと思います。
|