Hai, Google is your friend, I posted some code a while ago...
http://groups.google.nl/group/comp.lang.clipper.visual-objects/browse_thread/thread/65601d0d4593db58/7822578618d57c7c?hl=nl&lnk=st&q=marc+verkade#7822578618d57c7c
Here my adjusted MC_PrintingDevice
I adjusted the method Setup() to Setup(lExtended,nCopies) of the
PrintingDevice
class.
CLASS MC_PrintingDevice INHERIT PrintingDevice
HIDDEN _PrintDialog AS TPrintDlg PTR
HIDDEN _ComDlgLoaded AS LOGIC
METHOD INit(uName) CLASS MC_PrintingDevice
SUPER:INit(uName)
// Load the print dialog from the common controls
SELF:_ComDlgLoaded:=FALSE
SELF:LoadComDlgDLL()
RETURN SELF
METHOD SetUp(lExtended,nCopies) CLASS MC_PrintingDevice
LOCAL pd IS _WinPrintDlg
LOCAL struDevN AS _windevNames
LOCAL lRetVal AS LOGIC
LOCAL ptrHandle AS PTR
LOCAL ptrString AS PTR
LOCAL hDevMode AS PTR
LOCAL pTemp AS PTR
LOCAL pDVTemp AS _winDEVMODE
// Default 1 copie
Default(@[EMAIL PROTECTED]
)
Default(@[EMAIL PROTECTED]
)
// Get thge active window
ptrHandle := GetActiveWindow()
lRetVal := TRUE
pd.lStructSize := _SIZEOF(_WINPRINTDLG)
// Check if we have an owner
IF (ptrHandle != NULL_PTR)
pd.hwndOwner := ptrHandle
ELSE
pd.hwndOwner := NULL_PTR
ENDIF
// Get the devmode
hDevMode := GlobalAlloc(GHND, DWORD(iSize))
IF (hDevMode != NULL_PTR) .AND. (pDevMode != NULL_PTR)
pTemp := GlobalLock(hDevMode)
MemCopy(pTemp, pDevMode, DWORD(iSize))
GlobalUnlock(hDevMode)
ENDIF
// Set Dialog stuff
pd.hDevMode := hDevMode
pd.hDevNames := NULL_PTR
pd.nFromPage := 0
pd.nToPage := 0
pd.nMinPage := 0
pd.nMaxPage := 0
pd.nCopies := nCopies
pd.hInstance := _GetInst()
IF lExtended
// MLV 20080311 Remove PD_PrinterSetup for default printing dialog
pd.Flags := _OR(PD_USEDEVMODECOPIES, PD_COLLATE, PD_SELECTION)
ELSE
pd.Flags := _OR(PD_USEDEVMODECOPIES, PD_COLLATE, PD_SELECTION,
PD_PRINTSETUP)
END
pd.lpfnSetupHook := NULL_PTR
pd.lpSetupTemplateName := NULL_PTR
pd.lpfnPrintHook := NULL_PTR
pd.lpPrintTemplateName := NULL_PTR
// Open the dialog
IF !PCALL(SELF:_PrintDialog, @[EMAIL PROTECTED]
)
lValid := FALSE
lRetVal := FALSE
ELSE
lValid := TRUE
// Get device info
struDevN := GlobalLock(pd.hDevNames)
ptrString := PTR(_CAST,(DWORD(_CAST,struDevN) + struDevN.wDriverOffset
))
SELF:cDriver:= Psz2String(ptrString)
ptrString := PTR(_CAST,(DWORD(_CAST,struDevN) + struDevN.wDeviceOffset
))
SELF:cDevice:= Psz2String(ptrString)
ptrString := PTR(_CAST,(DWORD(_CAST,struDevN) + struDevN.wOutPutOffset
))
SELF:c****t := Psz2String(ptrString)
GlobalUnlock(pd.hDevNames)
GlobalFree(pd.hDevNames)
// Create room for the DevMode struct
pDVTemp := GlobalLock(pd.hDevMode)
iSize := pDVTemp.dmSize + pDVTemp.dmDriverExtra
IF (pDevMode == NULL_PTR)
pDevMode := MemAlloc(DWORD(iSize))
ELSE
pDevMode := MemRealloc(pDevMode, DWORD(iSize))
ENDIF
// Set the new devmode
MemCopy(pDevMode, pDVTemp, DWORD(iSize))
GlobalUnlock(pd.hDevMode)
GlobalFree(pd.hDevMode)
// Set the copies from the dialog
SELF:Copies:=pd.nCopies
ENDIF
RETURN lRetVal
METHOD LoadComDlgDLL() CLASS MC_PrintingDevice
LOCAL hDll AS PTR
LOCAL rsFormat AS ResourceString
// Is it already loaded?
IF !SELF:_ComDlgLoaded
_ComDlgLoaded:=TRUE
hDll:=LoadLibrary(PSZ(_CAST, "COMDLG32.DLL"))
IF (hDll == NULL_PTR)
rsFormat := ResourceString{__WCSLoadLibraryError}
WCError{#__LoadComDlgDLL, #StandardDialog, VO_SPrintF(rsFormat:value,
"COMDLG32.DLL"),,,FALSE}:@[EMAIL PROTECTED]
()
RETURN FALSE
ENDIF
SELF:_PrintDialog:=GetProcAddress(hDll, PSZ(_CAST, "PrintDlgA"))
END
RETURN TRUE
--
Grtz, Marc
<brian@[EMAIL PROTECTED]
> schreef in bericht
news:07e79e83-e3fd-4fe5-8d50-906fe656d47c@[EMAIL PROTECTED]
> Hello All,
>
> Could somebody please tell me how to enable number of copies when I
> call a print dialog.
>
> Cannot find any reference to this in help file.
>
> Also how to clear the copies afterwards.
>
> Many many thanks in advance.
>
> Brian.
>


|