[リストへもどる]
一括表示

投稿時間:2003/07/13(Sun) 01:19
投稿者名:tea
Eメール:
URL :
タイトル:
MSFlexGridの印刷の質問
MSFlexGridの印刷の質問なんですが、下記コードで実行すると
氏名の1段下に記録項目が表示されてしまいます。
また、各記録項目のデータも各項目の下には表示されません。
どうか教えてください。
よろしくお願いします。

'MSFlexGrid2(0)の記録項目'
            Printer.FontSize = 12: Printer.FontBold = False
            Printer.CurrentX = Lyohaku '左余白'
            Printer.CurrentY = Uyohaku   '上余白'
            Printer.Print "氏    名" & Space$(4) & "  Shoot  " & Space$(1) & "    3Point " & Space$(1) & _
            "  2Point " & Space$(1) & "   F T   " & Space$(1) & " 総得点 " & Space$(1) & _
            " Rebound " & Space$(1) & "  Assist " & Space$(1) & "  Steel  " & Space$(1) & _
            "BlockShot" & Space$(1) & "   Foul  "
            Printer.CurrentY = Printer.CurrentY + 0.5
                        
            '各個人データの印字'
            For i = 1 To Ken
                MSFlexGrid2(0).Row = i
                    For j = 1 To Koumoku
                        MSFlexGrid2(0).Col = j
                        Printer.Print Tab((j - 1) * 11) _
                        ; Right$("    " & Format(MSFlexGrid2(0).Text, _
                        "########"), 8);
                     Next j
                
                '改行幅を1.5倍に設定'
                Printer.CurrentY = Printer.CurrentY + 0.5
                Printer.CurrentX = Lyohaku + 1   '左余白'
                
            Next i

投稿時間:2003/07/13(Sun) 04:35
投稿者名:Say
Eメール:
URL :
タイトル:
Re: MSFlexGridの印刷の質問
んー。一連の流れ見たら、
●MS AccessかMS Excel持ってるなら、そちらで作ったほうがはるかに楽です。
●VBでやるにしても、mdbファイル、DataGridコントロール、DataReportの
  組み合わせのほうが簡単でしょう。
●市販のocxの中には、GridやSheetを直接印刷する機能を持ったものもあります。
  予算に余裕があるなら、それを利用するのも手です。

それはさておき・・・

> 氏名の1段下に記録項目が表示されてしまいます。
多分、現状なら氏名データが全角4文字以内なら改行しません。
氏名データの文字列長がそれ以上になるのなら、
印刷位置を考え直しましょう。

> また、各記録項目のデータも各項目の下には表示されません。
  ◆位置あわせをきちんとやる。
  ◆等幅系フォントをつかう(プロポーショナルフォントを使わない)
  ◆フォントサイズは3の倍数にする
が原則です。
表示位置をTabやSpaceなどに頼らず、項目ごとにTextWidthで文字列幅とって
CurrentX,CurrentYを設定するようにすれば、Fontのことは気にしなくても大丈夫ですが・・・。

余談ながら、
ScaleModeをvbPointsにして、印刷部分をプロシージャ化して
Sub flexPrint(obj As Object)
    obj.Font.Size = 12
    obj.Font.Bold = False
    ....
みたいな書き方しておけば、

Call flexPrint(Printer)で印刷
Call flexPrint(Picture1)でプレビューできます。

紙代やインク代もバカにならないし。

投稿時間:2003/07/13(Sun) 14:53
投稿者名:tea
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの印刷の質問
Sayさん、ありがとうございます。

>   ◆位置あわせをきちんとやる。
>   ◆等幅系フォントをつかう(プロポーショナルフォントを使わない)
>   ◆フォントサイズは3の倍数にする
> が原則です。
> 表示位置をTabやSpaceなどに頼らず、項目ごとにTextWidthで文字列幅とって
> CurrentX,CurrentYを設定するようにすれば、Fontのことは気にしなくても大丈夫ですが・・・。

ご指導いただいた上記のことを何とかやってみたいと思います。
また、下記についても大変参考になります。
ありがとうございました。

> 余談ながら、
> ScaleModeをvbPointsにして、印刷部分をプロシージャ化して
> Sub flexPrint(obj As Object)
>     obj.Font.Size = 12
>     obj.Font.Bold = False
>     ....
> みたいな書き方しておけば、
>
> Call flexPrint(Printer)で印刷
> Call flexPrint(Picture1)でプレビューできます。

投稿時間:2003/07/13(Sun) 12:33
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MSFlexGridの印刷の質問
前回にも書きましたが、まずここのサンプルそのままを使用してMSFlexGrid関係の動作確認の
サンプルを完成させて下さい。(できれば自分で手打ちで)
その上で、1行づつ変更しながらどのように変化するなどプログラムの動作を理解して下さい。
その時に解らない、プロパティやメソッドがでてきたらヘルプで調べて下さい。

せっかく、コメントをつけたサンプルを利用しながら理解しないまま書き直しても
余計になにが、なんだか解らなくばかりかと思います。
このまま、いくら教えてもらっても身に付きませんよ!(プログラムを書いてもらっているのと同じ)
過去に質問された内容を思いおこして見て下さい。

印刷関係のところにも色々あります。まず、罫線を自由に引けるようになるとか、自分の希望の位置に
文字を印刷するとか、基本的な事から進んで下さい。
Sayさんも書いておられますが、基本的に印刷するのも表示するのも同じです。
PictureBoxに印刷したいイメージを表示する等して、勉強して下さい。
罫線を指定の位置に引けるようにと文字を指定の位置に印刷(表示)できるように勉強して下さい。それが
できれば、あとは、それらの繰り返しだけです。
その過程で解らない事等ありましたらお手伝いさせて頂きます。
こういった掲示板では、質問には回答して頂けますが、プログラムを書いて下さい・直して下さいには、
それ相当の努力の後が見られないと回答して頂けませんよ!

投稿時間:2003/07/13(Sun) 14:13
投稿者名:tea
Eメール:
URL :
タイトル:
Re^2: MSFlexGridの印刷の質問
サンプルは私の手元に4月23日付けで保存印刷しています。
また既に手打ちでコードも試しました。
ただ自分の作っているものにサンプルコードを自身でうまく
応用が出来ないがゆえに質問をしています。

投稿時間:2003/07/13(Sun) 17:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: MSFlexGridの印刷の質問
> ただ自分の作っているものにサンプルコードを自身でうまく
> 応用が出来ないがゆえに質問をしています。

ですから、1行、1行どういう動作をしているのかコメントを見ながら確認して下さいといっているのです。
たとえば
"  Shoot  " & Space$(1) & "    3Point " & この場合のSpace$(1)は何を意味しているのかを
調べて下さい

上記は下記と同じ事ですよ
"  Shoot       3Point " &   又は Shoot" & Space$(7) & "3Point " &

理解しておられたら " Shoot  " に空白を1文字入れるのに Space$(1) を使用しないでしょう。

又、Printer.Print Tab((j - 1) * 11) は何をしているのか?

元々は Printer.Print Tab(11 + (j - 1) * 8 + 1) こうだったはずですが
サンプルを試したのなら実際のサンプルでどう違うのか試して見て下さい。
Printer.CurrentX や Printer.CurrentY = Printer.CurrentY + 0.5 がどういう意味合いの
ものかを理解(ヘルプ等で調べて)してから使用して下さい。

ここの印刷関係を参考にして
 3行目の10桁目に "あいうえお" と印刷してみて下さい。
それができたら、その周りに罫線を引いて見て下さい。
それができたら、後はその指定の繰り返しだけですよ。
それを簡単に書くために For Next を使ったり、計算式を使ったりしているだけです。

所詮、印刷処理はどこに(どの位置)何を(罫線・文字列・画像)印刷するかだけです。
従って、応用するとか、できないとかいう問題ではないかと思いますよ。

>また、各記録項目のデータも各項目の下には表示されません。
その辺が理解されていたら、質問の内容も変わっているかと思います。
印刷位置の指定の仕方がわかりませんとかに。 
現状の質問内容ではここのサンプルを使ったがうまく印字できませんといった、丸投げとしか
受け取れません。
ご自分の質問内容をもう一度読み返して見てください。私には下記のプログラムを修正して
下さいとしか読み取れませんでした。

投稿時間:2003/07/13(Sun) 22:11
投稿者名:tea
Eメール:
URL :
タイトル:
Re^4: MSFlexGridの印刷の質問
確認しましたが、確かにおかしいコードがありました。
今後は十分確認して質問します。
失礼しました。

投稿時間:2003/07/14(Mon) 19:39
投稿者名:tea
Eメール:
URL :
タイトル:
再度、印刷の質問
花ちゃんさんのご指摘通りに・・・
>3行目の10桁目に "あいうえお" と印刷してみて下さい。
>それができたら、その周りに罫線を引いて見て下さい。
を下記コードにて試してみました。
結果は確かに出来ましたが、罫線の枠に文字がうまく収まらない
というか文字の上部にはぴったりと罫線が引かさるのに対して、
文字の下部と罫線の間には「隙間」が出来てしまいます。
FontSizeを変えてみても変化がないようなんですが、この「隙間」
はどうにもならないものなのでしょうか?
教えてください。

Printer.ScaleMode = 4
CharX = Printer.TextWidth("あ")
CharY = Printer.TextHeight("あ")
            
Printer.CurrentX = 10: Printer.CurrentY = 3
Printer.FontName = "MS明朝": Printer.FontBold = True
Printer.FontSize = 16
Printer.Print "あいうえお"
Printer.Line (10, 3)-(22, 3)
Printer.Line (10, 5)-(22, 5)
Printer.Line (10, 3)-(10, 5)
Printer.Line (22, 3)-(22, 5)

投稿時間:2003/07/14(Mon) 20:20
投稿者名:匿名
Eメール:
URL :
タイトル:
Re: 再度、印刷の質問
> 結果は確かに出来ましたが、罫線の枠に文字がうまく収まらない
> というか文字の上部にはぴったりと罫線が引かさるのに対して、
> 文字の下部と罫線の間には「隙間」が出来てしまいます。
> FontSizeを変えてみても変化がないようなんですが、この「隙間」
> はどうにもならないものなのでしょうか?

> Printer.ScaleMode = 4
> CharX = Printer.TextWidth("あ")
> CharY = Printer.TextHeight("あ")
>            
> Printer.CurrentX = 10: Printer.CurrentY = 3    <== この意味は分かっていますか? (1)
> Printer.FontName = "MS明朝": Printer.FontBold = True
> Printer.FontSize = 16
> Printer.Print "あいうえお"
> Printer.Line (10, 3)-(22, 3)            <== この意味は分かっていますか? (2)
> Printer.Line (10, 5)-(22, 5)
> Printer.Line (10, 3)-(10, 5)
> Printer.Line (22, 3)-(22, 5)

文字と罫線を同じ10,3で書いたら重なって当然ではありませんか?
文字のFontサイズとは無関係なのでは?

個々の命令の意味と動作を、まだ理解出来ていないようですね。
fontを変えても...と言うなら

Printer.CurrentX = 10: Printer.CurrentY = 3 とか
Printer.Line (10, 3)-(22, 3) や他の行等も変えて見れば
その結果から、どの命令がどんな動作をさせるコードかが分かるはずですが。

例え話で、
透明なガラス板AとBがあります。
Aには文字「あ」が書かれています。
Bには長方形が書かれています。(罫線)
このAとBを重ね合わせたら「あ」の文字と罫線が重なって見えます。
重ならないようにするにはどうしますか?
1.A、Bの位置をずらして重ならないようにする。
これでは解決出来ないなら
2.文字を小さくする。
3.長方形を大きくする。
...等と考えて目的が達せられるようにするでしょう。
プログラムでも思考は同じです。

今回「あ」の上側の隙間と下側の隙間が均一で無いなら
上記の1〜3を試せば良いのではありませんか?

以前の書き込みで
ファイルAとBを合わせてCにしたい時などでも
同じように考えれば出来るはずです。
Aだけになってしまうとか、Bだけになってしまうのは
なぜかを考えましょう。
机の上にAとBとCと言う箱があったとして
Cの中にAとBを入れる時に
1.AをCに入れて   (OutPut)
2.このAの上に重ねてBを入れれば上から見たらBしか見えません。(上書きされる)
3.Aを入れたらAと重ならないように位置をずれしてBを置けば
  Cの箱の中にはAとBが入ります。(結合、マージ処理)

プログラムを考える時には日常生活に置き換えて思考して見ると
以外と分かり易い(理解しやすい)事も多々有るものです。
特にVBの基本的な処理段階では特に言えると思います。

投稿時間:2003/07/14(Mon) 23:39
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 再度、印刷の質問
こういった場合数値を色々変更して試して見れば一目瞭然かと思います。
まず、色々試して見る事です。

Private Sub Command1_Click()
    With Form1
        .ScaleMode = 4
        .CurrentX = 10: .CurrentY = 3
        .FontName = "MS 明朝"     '注意 "MS明朝" これではだめです。
        .FontSize = 12   'フォントサイズは3の倍数と教えてもらったのでは
    End With
    Me.Print "あいうえお"
    Me.Line (9.5, 2.5)-(20.5, 2.5)
    Me.Line (9.5, 4.5)-(20.5, 4.5)
    Me.Line (9.5, 2.5)-(9.5, 4.5)
    Me.Line (20.5, 2.5)-(20.5, 4.5)
    
    '又は
    
    Me.Line (9.75, 2.75)-(20.25, 2.75)
    Me.Line (9.75, 4.25)-(20.25, 4.25)
    Me.Line (9.75, 2.75)-(9.75, 4.25)
    Me.Line (20.25, 2.75)-(20.25, 4.25)
End Sub

投稿時間:2003/07/15(Tue) 12:59
投稿者名:tea
Eメール:
URL :
タイトル:
Re^2: 再度、印刷の質問
> こういった場合数値を色々変更して試して見れば一目瞭然かと思います。
> まず、色々試して見る事です。

Lineの数字は0.25などは使えないと思いこんでいました。
早速試してみます。
ありがとうございました。

投稿時間:2003/07/15(Tue) 13:37
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 再度、印刷の質問
> サンプルは私の手元に4月23日付けで保存印刷しています。
> また既に手打ちでコードも試しました。

> Lineの数字は0.25などは使えないと思いこんでいました。

そのサンプルでも下記のように使っていますよ!

  Ken = MSFlexGrid1.Rows - 1
  KaigyoH = 1.5      '改行高さを1.5倍に設定
  Tyousei = 0.25     '微調整分を1/4行
  Uyohaku = 3       '上余白を2行分
  Lyohaku = 7       '左余白を7桁分


ですから、1行、1行どういう動作をしているのかコメントを見ながら
確認して下さいといっているのです。

投稿時間:2003/07/15(Tue) 16:38
投稿者名:tea
Eメール:
URL :
タイトル:
Re^4: 再度、印刷の質問
> ですから、1行、1行どういう動作をしているのかコメントを見ながら
> 確認して下さいといっているのです。

失礼しました。