昨日に引き続き、ソースを見ていたらキャラセット問題は解決したので、「記事を書こうかなー」と思っていたところ、前回の記事のコメント欄で匿名さんからまさに同じ結論がくだされていて笑いました。本日私が修正したソースとあまりに同じ結果でしたので。…行番号まで(w)
匿名さんのおっしゃる通り、標準モジュール([Common])の[modGeneral2]-[SetFrame]を下記のように書き換えれば(13、14行目を追加すればOK。フォントサイズも変更したければ、匿名さんのコメントどおり、11行目を「50070 ctl.Font.Name = Options.ProgramFont」に変更)、日本語表示はどーにかなります。とゆーか、キャラセット問題は全面解決しそうな予感…。未確認ですが、現状だと欧文以外は多分全部文字化けしていると思うんですよね。
Public Sub SetFrame(ByRef ctl As Control, Optional TempOptionsDesign = -1) '---ErrPtnr-OnError-START--- DO NOT MODIFY ! --- On Error GoTo ErrPtnr_OnError '---ErrPtnr-OnError-END--- DO NOT MODIFY ! --- 50010 Dim tOD As Long 50020 If TempOptionsDesign > -1 Then 50030 tOD = TempOptionsDesign 50040 Else 50050 tOD = Options.OptionsDesign 50060 End If 50070 ctl.Font.Size = 10 '-----------------// 追加ここから //------------------------ 50071 ctl.Font.Name = Options.ProgramFont 50072 ctl.Font.Charset = Options.ProgramFontCharset '-----------------// ここまで //------------------------ 50080 ctl.TextShaddowColor = &HC00000 50090 If ComputerScreenResolution <= 8 Or tOD = 1 Then 50100 ctl.UseGradient = False: ctl.Caption3D = [Flat Caption] 50110 If UCase$(ctl.Name) = "DMFRADESCRIPTION" Then 50120 ctl.BarColorFrom = vbRed 50130 Else 50140 ctl.BarColorFrom = vbBlue 50150 End If 50160 Else 50170 ctl.UseGradient = True: ctl.Caption3D = [Raised Caption] 50180 If UCase$(ctl.Name) = "DMFRADESCRIPTION" Then 50190 ctl.BarColorFrom = &HB0BED '&HA0A0FF ' &HFB& 50200 ctl.BarColorTo = &H20564 '&HE0& ' &HDDFF& 50210 Else 50220 ctl.BarColorFrom = &HED0B0B '&HFFA0A0 50230 ctl.BarColorTo = &H640502 '&H600000 50240 End If 50250 End If '---ErrPtnr-OnError-START--- DO NOT MODIFY ! --- Exit Sub ErrPtnr_OnError: Select Case ErrPtnr.OnError("modGeneral2", "SetFrame") Case 0: Resume Case 1: Resume Next Case 2: Exit Sub Case 3: End End Select '---ErrPtnr-OnError-END--- DO NOT MODIFY ! --- End Sub
これをコンパイルして、exeファイルを上書きしたら、ちゃんと日本語表示されました(色々訳アリで、setup.exeを作ってないので、exeの上書き)。
SourceForge.netだとこの辺のソース。
本家で直してもらわないと、バージョンアップの度にこの作業をしなくちゃならないのでフィードバックしたいなぁ、と思っているわけですが。なにせSourceForgeみたいなものを使ったことがないので(スタンドアローン、バッチ処理、ほぼ単独での開発が身の上)、参加の仕方がわからない。(;´Д`)
Trackerの辺りで発言するのが手っ取り早そうだけれども、気後れ状態…。あーでも頑張りますー(たぶんね)。
追記→5/9、Trackerで投稿してみました。
…これからどうなるんでしょう。ヽ(。_°)ノ?
1 件のコメント:
じょに さん、こんにちは。先日の匿名の者(改め やす)です。
Tracker投稿、ご苦労様です。
PDFCreatorでは印刷時のPDF情報を設定する時に日本語が含まれると正しく反映されません。
そこで修正をして、それなりに動いてはいるのですが、良い(綺麗な)方法はありませんか?特に(1)の修正。
(1) PSHeaderから取得した日本語文字列が正しく変換できません。
日本語の場合は<xxxx....>(xxxxはSJISコード)となるので、SJIS(16進文字列)->Unicodeの変換が必要なのですが、良い方法がわかりませんでした。
[modPDF]-[ReplaceEncodingChars]
----ここから----
50010 Dim i As Integer, tStr As String
>50011 Dim bStr() As Byte
50020 tStr = ""
~中略~
50080 ' Second we look for hex encoding chars
50090 If Len(Str1) >= 4 Then
50100 If Mid$(Str1, 1, 1) = "<" And Mid$(Str1, Len(Str1), 1) = ">" Then
50110 If Len(Str1) Mod 2 = 0 Then
>50111 ReDim bStr((Len(Str1) - 2) / 2)
50120 For i = 2 To Len(Str1) - 1 Step 2
50130 If IsNumeric("&H" & Mid$(Str1, i, 2)) = True Then
50140 If CByte("&H" & Mid$(Str1, i, 2)) > 255 Then
50150 Exit Function
50160 Else
>'50170 tStr = tStr & Chr$(CByte("&H" & Mid$(Str1, i, 2)))
>50170 bStr((i - 2) / 2) = CByte("&H" & Mid$(Str1, i, 2))
50180 End If
50190 Else
50200 Exit Function
50210 End If
50220 Next i
>50221 tStr = StrConv(bStr, vbUnicode)
50230 End If
50240 End If
50250 End If
50260 If Len(tStr) > 0 Then
50270 ReplaceEncodingChars = tStr
50280 End If
-----ここまで
(2) (1)の修正後、UTF16(16進文字列)作成時にAscW()が負の値の時に落ちる。こちらは問題ないかも。
[modPDF]-[EncodeChars]
----ここから----
50540 Case eCodePage.CP_UTF16
50550 For i = 1 To Len(Str1)
50560 c = AscW(Mid$(Str1, i, 1))
>'50570 tStr = tStr & String(4 - Len(Hex(c)), "0") & Hex(c)
>50570 tStr = tStr & Right("0000" & Hex(c), 4)
50580 Next i
50590 EncodeChars = "<FEFF" & tStr & ">"
-----ここまで
コメントを投稿