Printer, будь он неладен

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Printer, будь он неладен

Сообщение alibek » 24.12.2003 (Ср) 16:01

Привет, камрады.
Кто знает, в чем может быть причина такой штуки?

Печатаю в Immediate:
Printer.Line (10,10)-(100,100),RGB(128,128,128),BF
Printer.CurrentX=20:Printer.CurrentY=20:Printer.Print "Test"
Получаю серый фон, на нем текст.

Имеется довольно большой класс, который реализует печать бланков. Когда печатаю, получается серый прямоугольник, а на нем текст на белом фоне. FontTransparent=True, это проверялось.

Печать в классе реализована примерно так:
...
Disp.Line (X1 - X0, Y1 - Y0)-(X2 - X0, Y2 - Y0), Color, BF
...
Call WrapText(Disp, Text, WT(), X2 - X1)
H = Disp.TextHeight(vbNullString) * UBound(WT)
Disp.CurrentY = ...
For I = 1 To UBound(WT)
W = Disp.TextWidth(WT(I))
Disp.CurrentX = ...
Disp.Print WT(I)
Next I
...

здесь Disp - это объект Printer.


Вначале печатал через API, увидел что получается непрозрачный фон под текстом и решил, что лучше буду печатать вручную, а тут такая же ерунда.


З.Ы. Дело не в коде класса. Сейчас проверил таким образом:
Код: Выделить всё
Dim P As PrintJob
Set P = New PrintJob
P.AddBox vbNullString, 20, 20, 80, 80, , , RGB(128, 128, 128)
P.AddTextBox vbNullString, 30, 30, 50, 50, "test text test text test text"
P.OriginX = 10
P.OriginY = 10
P.PrintCurrentJob Printer
Printer.EndDoc
Set P = Nothing


Все печатает как надо, т.е. фонт прозрачный. Но в реальной работе, когда объекты добавляются из БД, текст печатается, как непрозрачный.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.12.2003 (Чт) 9:27

Может, создать временный битмап, нарисовать прямоугольник, создать другой временный, написать туда текст, потом TransparentBlt, потом на принтер?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.12.2003 (Чт) 10:59

Requires Windows 2000 or later; Requires Windows 98 or later

А делать через BitBlt - страшно представить :)

К тому же это какой-то глюк, потому что если вместо Printer подставить PictureBox, то результат получается правильный.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.12.2003 (Пт) 10:05

А если тогда всё печатать в пикчербокс, а потом всё сразу на принтер одним махом?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 2

    TopList