tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル白抜き文字を印刷したい
記事No11220
投稿日: 2008/01/23(Wed) 15:20
投稿者どり
VB6.0SP6,XPsp2です

Printで白抜き文字を印字したいのです(黒い四角形の中に白い文字を印字)

以前の環境(VB5.0,NT4.0,モノクロプリンタ)では以下のようにできたのです
が、プリンタの機種が変わったからなのかできなくなりました。
(文字の色は黒のまま反転してくれません)

with printer
.ColorMode = vbPRCMColor
.drawmode=13
.Print "あ";
.DrawMode = vbXorPen    'XORで反転させる
.FillColor = vbBlack
.Line -Step(-.TextWidth("あ"), .TextHeight("あ")), vbBlack, BF
end with

Colormodeをモノクロにしてもdrawmodeを変えても駄目でした。いい方法ないでしょうか
よろしくお願いします

Microsoft XPS Document Writer、某カラープリンタ共に同じ結果でした

[ツリー表示へ]
タイトルRe: 白抜き文字を印刷したい
記事No11223
投稿日: 2008/01/23(Wed) 16:27
投稿者花ちゃん
> with printer
> .ColorMode = vbPRCMColor
> .drawmode=13
> .Print "あ";
> .DrawMode = vbXorPen    'XORで反転させる
> .FillColor = vbBlack
> .Line -Step(-.TextWidth("あ"), .TextHeight("あ")), vbBlack, BF
> end with

文字を先に描いてから黒い四角形を描けば、中の文字も
塗りつぶさるのでは。

[ツリー表示へ]
タイトルRe: 白抜き文字を印刷したい
記事No11224
投稿日: 2008/01/23(Wed) 16:39
投稿者大吉末吉
> .Line -Step(-.TextWidth("あ"), .TextHeight("あ")), vbBlack, BF
ここって、「vbBlack」ではなく、「vbWhite」なのでは・・・
白(1)地に黒(0)で描かれているところに、黒(0)でXORをしても、
白(1)は白(1)のままですし、黒(0)は黒(0)のままでは・・・

[ツリー表示へ]
タイトルRe^2: 白抜き文字を印刷したい
記事No11229
投稿日: 2008/01/23(Wed) 20:16
投稿者どり
大吉末吉さん、花ちゃんさん、ありがとうございます

> > .Line -Step(-.TextWidth("あ"), .TextHeight("あ")), vbBlack, BF
> ここって、「vbBlack」ではなく、「vbWhite」なのでは・・・
vbwhiteにしたところ、文字も四角形も白く見えなくなってしまいました。

通常の.Drawmodeで黒四角形の上に白い文字をprintできれば良いのですが、
文字の周りの色が消えてしまい文字も四角も白くなり見えません。

前のプリンタでは.Colormodeはモノクロ指定でしたが、問題なく白抜き文字の黒四角形になっていました

当方のプリンタ特有の問題では、という気もしてきました。
黒文字印刷後、白四角形でXORするのが一般的な方法なのでしょうか、
他の手法ご存知の方、よろしければ教えてください

[ツリー表示へ]
タイトルRe^3: 白抜き文字を印刷したい
記事No11234
投稿日: 2008/01/24(Thu) 11:11
投稿者大吉末吉
実際に使用しているコードはどういうコードなんでしょう?


> vbwhiteにしたところ、文字も四角形も白く見えなくなってしまいました。
> (文字の色は黒のまま反転してくれません)

黒文字(0)に黒(0)で処理すると黒(0)のまま
白地(1)に黒(0)で処理すると白(1)のまま
黒文字(0)に白(1)で処理すると白(1)になる
白地(1)に白(1)で処理すると白(1)のまま

・・・コレって、「XOR」では無く「OR」の動作ですよね・・・


> 黒文字印刷後、白四角形でXORするのが一般的な方法なのでしょうか、

まさか、「そのプリンタがXORをサポートしていない」なんて事は無いですよね・・・

[ツリー表示へ]
タイトルRe^4: 白抜き文字を印刷したい
記事No11237
投稿日: 2008/01/24(Thu) 13:43
投稿者どり
> 実際に使用しているコードはどういうコードなんでしょう?
簡単に書き直します。
    Printer.DrawMode = vbCopyPen
    Printer.CurrentX = 0
    Printer.CurrentY = 0
    Printer.ForeColor = vbBlack
    Printer.Print "あ"
    Printer.DrawMode = vbXorPen
    Printer.Line (0, 0)-(100, 100), vbWhite, BF

結果は白四角形で文字が塗りつぶされて何も見えなくなりました。
.Colormodeはモノクロでもカラーでも同じでした。



最初に投稿したコードでは、構文誤りがありましたが、プリンタによって
黒四角形に白文字 だったり グレー四角形に黒文字 だったりしていました。
プリンタドライバによるのではと今は勝手に考えております

[ツリー表示へ]
タイトルRe: 白抜き文字を印刷したい
記事No11231
投稿日: 2008/01/23(Wed) 21:20
投稿者魔界の仮面弁士
実際のコードは、これとは異なりますよね。
Print メソッドは、With ステートメントを利用できなかったはずですし…。

どこかで、単純なミスをしているような気がします。


> .drawmode=13
> .DrawMode = vbXorPen    'XORで反転させる
定数だったり、マジックナンバーだったりしているのは何故? (^^;


> 以前の環境(VB5.0,NT4.0,モノクロプリンタ)では以下のようにできたのですが、
プリンタの問題ではなく、元のコードが間違っているような気がします。

提示されたプログラムでは、プリンタどころか画面描画でさえ、
白抜き(黒背景に白文字)にはなりませんでしたし。


Option Explicit

'元のコード(Xor描画)を活かした例
Private Sub Command1_Click()
    Cls
    BackColor = vbWhite

    DrawMode = vbCopyPen  '13
    Print "あ";
    DrawMode = vbXorPen
    FillColor = vbBlack

    'こっちだとNG(どりさん自身のコード)
    Line -Step(-TextWidth("あ"), TextHeight("あ")), vbBlack, BF

    'こっちならOK(大吉末吉さんの修正案)
    'Line -Step(-TextWidth("あ"), TextHeight("あ")), vbWhite, BF
End Sub

'花ちゃんさんの修正案(文字を後描き)
Private Sub Command2_Click()
    Cls

    DrawMode = vbCopyPen
    Line (TextWidth("あ"), TextHeight("あ"))-(0, 0), vbBlack, BF
    FontTransparent = True
    ForeColor = vbWhite
    Print "あ";
End Sub

[ツリー表示へ]
タイトルRe^2: 白抜き文字を印刷したい
記事No11235
投稿日: 2008/01/24(Thu) 11:44
投稿者どり
魔界の仮面弁士さん、ありがとうございます

        Printer.ColorMode = vbPRCMColor
        Printer.DrawMode = vbCopyPen
        Printer.Line (0, 0)-(100, 100), vbBlack, BF

        Printer.CurrentX = 0
        Printer.CurrentY = 0
        Printer.ForeColor = vbWhite
        Printer.FontTransparent = True
        Printer.Print "あ"
        Printer.EndDoc

このコードではうまくいきませんでした(文字部分が四角く抜けてしまう)
が、.Colormodeの行をコメントにするとうまくいきました。
カラー印刷でないと困るのですが、別案考えてみます。

恥ずかしながら.FontTransparentは知りませんでした。とても参考になりました

[ツリー表示へ]
タイトルRe^3: 白抜き文字を印刷したい
記事No11236
投稿日: 2008/01/24(Thu) 12:39
投稿者魔界の仮面弁士
> 恥ずかしながら.FontTransparentは知りませんでした。

プリンタで FontTransparent を有効にする場合は、下記を参照してください。
http://support.microsoft.com/kb/412851/ja

[ツリー表示へ]