封筒印刷の全コードを記します。
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
一体何から手をつければよいのか苦しんでいます。
散々検索しましたが、知りたい事を教えてくれるものが見つかりませんでした。
どなたかよろしくお願いします。
その ZC010_Print というものが何であるのかがわからないと有意義な
意見は出にくいでしょう。
で、検索したところ、
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1321988523
という、貴方の質問と思われるものしか見つかりませんでした。
レスありがとうございます。
知恵袋は確かに私の質問です。
ZC010_Print
というのは、皆様でもよくわからないものですか??
> 縦書き仕様を横書きにするには?
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" かと。
魔界の仮面弁士さん、貴重なご意見、ありがとうございます。
スペルも違うみたいですが、問題なく封筒印刷はできています。
結局のところ、作った人にしかわからないのでしょうか。。。
> 問題なく封筒印刷はできています。
今問題になっているのは、印刷できているかどうかでは無く、
ZC010_Print が何者であるかと言う点です。
ZC010_Print に関する仕様書・マニュアル等は存在しないのでしょうか?
ZC010_Print が、参照設定(またはコンポーネントの追加)にて使用する
ActiveX コンポーネントだとしたら、「オブジェクト ブラウザ」を
使って、それらしいプロパティ/メソッドが無いか探してみてください。
そうではなく、プロジェクト内にソースコードとして存在しているのなら、
それを見て、縦横切り替えの機能の有無を探し、無ければ作りこむという
作業が必要になるかと。
> 結局のところ、作った人にしかわからないのでしょうか。。。
というよりも、質問の仕方の問題かと。
ペンネームさんが現在編集している、そのソース自体を持っていない/見たた事が無い人にも分かるよう、問題点を切り出してみてください。
ペンネームさん自身が、ZC010_Print が何であるのか分かっていないのであれば、それは掲示板で聞いて答えが出るはずも無いので、そのソースを提供した人(もしくはソースを修正するように依頼した人)に、ZC010_Print の意味を問い合わせねばならないでしょう。
魔界の仮面弁士さん、丁寧なアドバイス、誠にありがとうございます!
また調べなおし、改めてレスします!
ツイート | ![]() |