VB6による宛名封筒印刷の縦書き仕様を横書きにするには?


ペンネーム  2009-01-30 21:35:19  No: 101532

封筒印刷の全コードを記します。
Option Explicit
    Dim AdoRs9 As ADODB.Recordset
'***************************************************************************
' 印刷処理
' 戻り値 =0:該当データ無し  =-1:プログラム・エラー  >1:正常終了
'***************************************************************************
Public Function RPT封筒小_Print(P_PRINT As ZC010_Print) As Long
'
    Dim ADRS_FNT As Long, NAME_FNT As Long, I As Long
    Dim HH As Single, BAR As String
    Dim YUBIN As String
    
    On Error Resume Next
    
    RPT封筒小_Print = -1
    
'   印刷編集を初期化
'   P_PRINT.E_StartEdit 0 : MonoCro Print
'   P_PRINT.E_StartEdit 1 : Color Print
'
    P_PRINT.E_StartEdit 0, 1, 1, 9999
    P_PRINT.E_Pitch 15, 5
    ' 自社データを検索
    Set AdoRs9 = New ADODB.Recordset
    AdoRs9.Open "ユーザー", Cn, adOpenStatic, adLockOptimistic
    ' 明細データを検索
    SQL_TXT = "SELECT DISTINCTROW [顧客-基本].顧客コード, [顧客-基本].郵便番号, [顧客-基本].住所1, " & _
              "[顧客-基本].住所2, [顧客-基本].氏名, [顧客-基本].敬称 " & _
              "From [顧客-基本] " & _
              "Where ([顧客-基本].氏名 = '" & 封筒印刷.顧客.Text & "') WITH OWNERACCESS OPTION;"
    Set AdoRs = New ADODB.Recordset
    AdoRs.Open SQL_TXT, Cn, adOpenStatic, adLockOptimistic
'   該当データが0件の時、処理終了
    If AdoRs.RecordCount > 0 Then
       If (Len(AdoRs![住所1]) < 17) Then
          ADRS_FNT = 18
       End If
       If (Len(AdoRs![住所1]) = 17) Then
          ADRS_FNT = 17
       End If
       If (Len(AdoRs![住所1]) = 18) Then
          ADRS_FNT = 16
       End If
       If (Len(AdoRs![住所1]) = 19) Then
          ADRS_FNT = 15
       End If
       If (Len(AdoRs![住所1]) = 20) Then
          ADRS_FNT = 14
       End If
       If AdoRs![敬称] <> "御中" Then
          If (Len(AdoRs![氏名]) < 6) Then
             NAME_FNT = 34
          End If
          If (Len(AdoRs![氏名]) = 6) Then
             NAME_FNT = 32
          End If
          If (Len(AdoRs![氏名]) = 7) Then
             NAME_FNT = 30
          End If
          If (Len(AdoRs![氏名]) = 8) Then
             NAME_FNT = 28
          End If
          If (Len(AdoRs![氏名]) = 9) Then
             NAME_FNT = 26
          End If
          If (Len(AdoRs![氏名]) = 10) Then
             NAME_FNT = 24
          End If
          If (Len(AdoRs![氏名]) > 10) Then
             NAME_FNT = 20
          End If
       Else
          If (Len(AdoRs![氏名]) <= 7) Then
             NAME_FNT = 28
          End If
          If (Len(AdoRs![氏名]) = 8) Then
             NAME_FNT = 26
          End If
          If (Len(AdoRs![氏名]) = 9) Then
             NAME_FNT = 24
          End If
          If (Len(AdoRs![氏名]) = 10) Then
             NAME_FNT = 22
          End If
          If (Len(AdoRs![氏名]) = 11) Then
             NAME_FNT = 20
          End If
          If (Len(AdoRs![氏名]) = 12) Then
             NAME_FNT = 18
          End If
          If (Len(AdoRs![氏名]) > 13) Then
             NAME_FNT = 15
          End If
       End If
       '郵便番号の印字
       P_PRINT.E_Font "MS ゴシック", 16, True, 0
       YUBIN = ""
       For I = 1 To 8
           If Mid$(AdoRs![郵便番号], I, 1) <> "-" Then
              YUBIN = YUBIN & Mid$(AdoRs![郵便番号], I, 1)
           End If
       Next
       For I = 1 To 7
           P_PRINT.E_String 21 + (I - 1) * 7, 1, Mid$(YUBIN, I, 1), RGB(0, 0, 0)
       Next
       '住所1の印字
       P_PRINT.E_Font "FC行楷書体", ADRS_FNT, True, 0
       HH = ADRS_FNT / 2.835 + 1
       If Not IsNull(AdoRs![住所1]) Then
          For I = 1 To Len(AdoRs![住所1])
             BAR = Mid$(AdoRs![住所1], I, 1)
'             If BAR = "−" Then BAR = "ー"
'             P_PRINT.E_String_Tate 60, 14 + (I - 1) * HH, BAR, RGB(0, 0, 0)  '縦書き
             If BAR = "ー" Or BAR = "−" Then BAR = "|"
             P_PRINT.E_String 60, 14 + (I - 1) * HH, BAR, RGB(0, 0, 0)
          Next
       End If
       '住所2の印字
       P_PRINT.E_Font "FC行楷書体", ADRS_FNT, True, 0
       If Not IsNull(AdoRs![住所2]) Then
          For I = 1 To Len(AdoRs![住所2])
             BAR = Mid$(AdoRs![住所2], I, 1)
'             If BAR = "−" Then BAR = "ー"
'             P_PRINT.E_String_Tate 48, 28 + (I - 1) * HH, BAR, RGB(0, 0, 0)  '縦書き
             If BAR = "ー" Or BAR = "−" Then BAR = "|"
             P_PRINT.E_String 48, 28 + (I - 1) * HH, BAR, RGB(0, 0, 0)
          Next
       End If
       '氏名の印字
       P_PRINT.E_Font "FC行楷書体", NAME_FNT, True, 0
       HH = NAME_FNT / 2.835 + 1
       If Not IsNull(AdoRs![氏名]) Then
          For I = 1 To Len(AdoRs![氏名] & "  " & AdoRs![敬称])
             BAR = Mid$(AdoRs![氏名] & AdoRs![敬称], I, 1)
'             If BAR = "−" Then BAR = "ー"
'             P_PRINT.E_String_Tate 20, 20 + (I - 1) * HH, BAR, RGB(0, 0, 0)  '縦書き
             If BAR = "ー" Or BAR = "−" Then BAR = "|"
             P_PRINT.E_String 20, 20 + (I - 1) * HH, BAR, RGB(0, 0, 0)
           Next
       End If
       '横線をひく
       If PrintS = 2 Then
          P_PRINT.E_DrawStyle vbSolid, 4 ' 10
          P_PRINT.E_Line 0, 140, 65, 140, RGB(0, 0, 0)
          P_PRINT.E_Line 0, 168, 65, 168, RGB(0, 0, 0)
          P_PRINT.E_DrawStyle vbSolid, 1
          P_PRINT.E_Line 5, 142, 60, 142, RGB(0, 0, 0)
          P_PRINT.E_Line 5, 166, 60, 166, RGB(0, 0, 0)
          P_PRINT.E_Font "MS P明朝", 10, False, 0
          P_PRINT.E_String 4.8, 144, "〒 " & AdoRs9![〒], RGB(0, 0, 0)
          P_PRINT.E_String 4.8, 148, AdoRs9![住所], RGB(0, 0, 0)
          P_PRINT.E_String 4.8, 160, "℡ " & AdoRs9![電話番号], RGB(0, 0, 0)
          P_PRINT.E_Font "MS Pゴシック", 14, True, 0
          P_PRINT.E_String 4.8, 153, AdoRs9![会社名], RGB(0, 0, 0)
       End If
       AdoRs.MoveNext
    End If
'   レコードセットを閉じる
    AdoRs.Close
    AdoRs9.Close
    
    ' 終了処理
    If P_PRINT.P_CheckData = False Then    ' 該当する印刷データ無し ?
        RPT封筒小_Print = 0
    Else
        RPT封筒小_Print = 1
    End If
    P_PRINT.E_EndEdit
    
End Function

一体何から手をつければよいのか苦しんでいます。
散々検索しましたが、知りたい事を教えてくれるものが見つかりませんでした。
どなたかよろしくお願いします。


K.J.K.  2009-01-30 22:46:58  No: 101533

その ZC010_Print というものが何であるのかがわからないと有意義な
意見は出にくいでしょう。

で、検索したところ、
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1321988523
という、貴方の質問と思われるものしか見つかりませんでした。


ペンネーム  2009-01-30 23:12:13  No: 101534

レスありがとうございます。
知恵袋は確かに私の質問です。

ZC010_Print
というのは、皆様でもよくわからないものですか??


魔界の仮面弁士  2009-01-31 02:47:13  No: 101535

> 縦書き仕様を横書きにするには?
ZC010_Print ではなく、VB6 の Printer オブジェクトであれば、
    .Orientation = VbPRORPortrait  '用紙の狭い側を上にする
    .Orientation = VbPRORLandscape '用紙の広い側を上にする
のように書けるのですけれどね。

> ZC010_Print
> というのは、皆様でもよくわからないものですか??

少なくとも、VB6 付属のコンポーネントでは無い事は確かです。
また市販製品においても、そのような名前の物は聞いたことがありません。

もし ZC010_Print が、ペンネームさんの所で作成された自作クラス(例えばPrinter オブジェクトをクラスとしてカプセル化した物とか…)だとしたら、掲示板を見ている第三者には答えようが無いと思います。

一応、メソッド名があまりに特徴的だったので、メソッド名(E_String_Tate など)で google 検索してみたのですが、これもやはり、掲示板への質問投稿しか拾えませんでした…。

> '   P_PRINT.E_StartEdit 0 : MonoCro Print
> '   P_PRINT.E_StartEdit 1 : Color Print
「モノクロ印刷」の意味だとしたら、スペルは "monochrome print" かと。


ペンネーム  2009-02-02 20:32:45  No: 101536

魔界の仮面弁士さん、貴重なご意見、ありがとうございます。
スペルも違うみたいですが、問題なく封筒印刷はできています。

結局のところ、作った人にしかわからないのでしょうか。。。


魔界の仮面弁士  2009-02-02 22:41:50  No: 101537

> 問題なく封筒印刷はできています。
今問題になっているのは、印刷できているかどうかでは無く、
ZC010_Print が何者であるかと言う点です。

ZC010_Print に関する仕様書・マニュアル等は存在しないのでしょうか?

ZC010_Print が、参照設定(またはコンポーネントの追加)にて使用する
ActiveX コンポーネントだとしたら、「オブジェクト ブラウザ」を
使って、それらしいプロパティ/メソッドが無いか探してみてください。

そうではなく、プロジェクト内にソースコードとして存在しているのなら、
それを見て、縦横切り替えの機能の有無を探し、無ければ作りこむという
作業が必要になるかと。

> 結局のところ、作った人にしかわからないのでしょうか。。。
というよりも、質問の仕方の問題かと。

ペンネームさんが現在編集している、そのソース自体を持っていない/見たた事が無い人にも分かるよう、問題点を切り出してみてください。

ペンネームさん自身が、ZC010_Print が何であるのか分かっていないのであれば、それは掲示板で聞いて答えが出るはずも無いので、そのソースを提供した人(もしくはソースを修正するように依頼した人)に、ZC010_Print の意味を問い合わせねばならないでしょう。


ペンネーム  2009-02-03 01:56:09  No: 101538

魔界の仮面弁士さん、丁寧なアドバイス、誠にありがとうございます!
また調べなおし、改めてレスします!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加