I´ve posted my problem in german forum too. But no answer.
Now, i hope here to get help.
My problem:
I´ve got a form with an image and some printer-settings.
The image can be resized to fit in page. But nothing occurs - my printed pages (Fineprint and epson-preview) keep blank.
Why?
Here´s my complet code:
Code: Select all
Enumeration
#BClose
#drucker
#BDrucker
#DruckKopie
#DruckSize
#L105
#L106
#Vorschau
EndEnumeration
Dim DevIn.DEVMODE(0)
Dim DevOut.DEVMODE(0)
Procedure DruckerEinstellung()
OpenPrinter_(GetGadgetText(#drucker),@PrinterHandle.l,0)
r=DocumentProperties_(0,PrinterHandle,GetGadgetText(#drucker),DevIn(0),DevOut(0),8|2|4)
ClosePrinter_(PrinterHandle)
If r=1: CopyMemory(DevOut(0),DevIn(0), SizeOf(DEVMODE)): EndIf
EndProcedure
Procedure Drucken()
; the image-dimensions 320*440 is only an example
OpenPrinter_(GetGadgetText(#drucker),@PrinterHandle.l,0)
DocumentProperties_(0,PrinterHandle,GetGadgetText(#drucker),DevIn(0),DevOut(0),8|2)
ClosePrinter_(PrinterHandle)
PrinterDC.l = CreateDC_("WINSPOOL",GetGadgetText(#drucker),0,DevIn(0))
DocInf.DOCINFO
DocInf\cbSize = SizeOf(DOCINFO)
DocInf\lpszDocName = @"Ausdruck"
DocInf\lpszOutput = #Null
DruckBreite= GetDeviceCaps_(PrinterDC, 4)
DruckHoehe= GetDeviceCaps_(PrinterDC, 6)
If GetGadgetState(#DruckSize)
If DruckBreite>DruckHoehe ; zoomfactor
ZoomFaktor.f=DruckBreite/320
Else
ZoomFaktor.f=DruckHoehe/440
EndIf
Else
ZoomFaktor.f=1
EndIf
MessageRequester("","Zoomfaktor: "+StrF(ZoomFaktor))
RandLinks = (DruckBreite-(ZoomFaktor*320))/2 ; center image
RandOben = (DruckHoehe-(ZoomFaktor*440))/2
StartDoc_(PrinterDC,@DocInf)
For t=1 To Val(GetGadgetText(#DruckKopie)) ;copies
StartPage_(PrinterDC)
imgDC = UseImage(0)
hdc = CreateCompatibleDC_(PrinterDC)
SelectObject_(hdc,imgDC)
StretchBlt_(PrinterDC,RandLinks,RandOben,320*ZoomFaktor,440*ZoomFaktor,hdc,0,0,319,439,#SRCCOPY)
DeleteDC_(hdc)
EndPage_(PrinterDC)
Next t
EndDoc_(PrinterDC)
DeleteDC_(PrinterDC)
EndProcedure
NewList DruckerListe.s()
Procedure GetPrinters()
ClearList(DruckerListe())
Buffersize.l = 8192
*Buffer = GlobalAlloc_(#GMEM_FIXED | #GMEM_ZEROINIT, Buffersize)
If GetProfileString_("devices", 0, "", *Buffer, Buffersize)
TempString.s = PeekS(*Buffer)
Length.l = Len(TempString)
While TempString <> ""
AddElement(DruckerListe())
DruckerListe()= TempString
TempString = PeekS(*Buffer + Length + 1)
Length = Length + Len(TempString) + 1
Wend
EndIf
GlobalFree_(*Buffer)
EndProcedure
Procedure.s GetDefaultPrinter()
DruckerSTD$ = Space(260)
If GetPrivateProfileString_("WINDOWS","DEVICE","", @DruckerSTD$, 260, "Win.Ini")
DruckerDefault.s = StringField(DruckerSTD$, 1,",")
EndIf
ProcedureReturn DruckerDefault
EndProcedure
;MAIN
OpenWindow(0, 131, 225, 646, 490, #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Test")
If CreateGadgetList(WindowID())
ButtonGadget(#BClose, 435, 455, 100, 20, "Print / Close")
ComboBoxGadget(#drucker, 405, 170, 165, 90)
ButtonGadget(#BDrucker, 570, 170, 60, 20, "Settings")
StringGadget(#DruckKopie, 405, 195, 35, 20, "1", #PB_String_Numeric)
CheckBoxGadget(#DruckSize, 500, 195, 130, 20, "Fit image to page", #PB_CheckBox_Right)
TextGadget(#L105, 335, 175, 65, 15, "Printer:", #PB_Text_Right)
TextGadget(#L106, 335, 200, 65, 15, "Copies:", #PB_Text_Right)
CreateImage(0,320,440)
ImageGadget(#Vorschau, 5, 5, 320, 440, UseImage(0))
EndIf
GetPrinters()
ResetList(DruckerListe())
While NextElement(DruckerListe()) ;all printers into combo
AddGadgetItem(#drucker,-1, DruckerListe())
Wend
For t=0 To CountGadgetItems(#drucker); select defaultprinter
If GetGadgetItemText(#drucker,t,1)=GetDefaultPrinter()
SetGadgetState(#drucker,t)
EndIf
Next t
Repeat
EventID=WaitWindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case #BClose: Ende=1
Case #BDrucker: DruckerEinstellung()
EndSelect
EndSelect
Until Ende=1
If MessageRequester("","Print Image?",#PB_MessageRequester_YesNo)=6
Drucken()
EndIf
Regards.
Frank