>>>>>>*Courtesy of Simon Clark, Universal Thread, July 2003 >>>>>>*put a DEFAULTSOURCE=<bin number> in the EXPR column >>>>>>*of the FRX row with OBJTYPE=53 after selection >>>>>> >>>>>>oform=CREATEOBJECT('papertrayform') >>>>>>oform.show() >>>>>>READ EVENTS >>>>>>RETURN >>>>>> >>>>>>DEFINE CLASS papertrayform AS form >>>>>> >>>>>> >>>>>> Top = 0 >>>>>> Left = 1 >>>>>> Height = 365 >>>>>> Width = 631 >>>>>> DoCreate = .T. >>>>>> Caption = "Paper Tray Selection Form" >>>>>> Name = "PAPERTRAYS" >>>>>> DIMENSION paperbins[1,4] >>>>>> >>>>>> >>>>>> ADD OBJECT list1 AS listbox WITH ; >>>>>> FontName = "Courier New", ; >>>>>> FontSize = 9, ; >>>>>> BoundColumn = 1, ; >>>>>> RowSourceType = 6, ; >>>>>> RowSource = 'LEFT(trays.pname,45)+" "+left(trays.pbin,20)+" "+LEFT(trays.pbinno,20)+" "+LEFT(trays.pport,10)', ; >>>>>> ControlSource = "m.selection", ; >>>>>> Height = 300, ; >>>>>> ColumnLines = .T., ; >>>>>> Left = 8, ; >>>>>> MultiSelect = .F., ; >>>>>> TabIndex = 10, ; >>>>>> Top = 39, ; >>>>>> Width = 612, ; >>>>>> Name = "List1" >>>>>> >>>>>> >>>>>> ADD OBJECT label1 AS label WITH ; >>>>>> Caption = "Press <ENTER> to select a paper tray or Double-Click on any item to select it", ; >>>>>> Height = 17, ; >>>>>> Left = 8, ; >>>>>> Top = 11, ; >>>>>> Width = 580, ; >>>>>> Name = "Label1" >>>>>> >>>>>> >>>>>> PROCEDURE buf2word >>>>>> *PROCEDURE SYLSTLEN_buf2word && Convert BUF to WORD >>>>>> PARAMETERS QQbuffer >>>>>> * ---INTERFACE--- >>>>>> PRIVATE ALL LIKE QQ* >>>>>> * IMPORTS: >>>>>> * A buffer/pointer >>>>>> * >>>>>> * EXPORTS: >>>>>> * The passed in buffer converted to a word format >>>>>> * >>>>>> >>>>>> * ---INITIALISE--- >>>>>> QQudfRet = ASC(SUBSTR(QQbuffer, 1,1)) + ASC(SUBSTR(QQbuffer, 2,1)) * 256 >>>>>> >>>>>> RETURN QQudfRet >>>>>> ENDPROC >>>>>> >>>>>> >>>>>> PROCEDURE Init >>>>>> IF USED('trays') >>>>>> USE IN trays >>>>>> ENDIF >>>>>> IF FILE('trays.dbf') >>>>>> DELETE FILE trays.dbf >>>>>> ENDIF >>>>>> CLEAR >>>>>> DODEFAULT() >>>>>> SET SAFETY OFF >>>>>> *For the FRX's it easy, you just put a DEFAULTSOURCE=<bin number> in the EXPR column >>>>>> *of the FRX row with OBJTYPE=53 (same for DUPLEX= by the way...). >>>>>> >>>>>> #DEFINE GMEM_FIXED 0 >>>>>> #DEFINE DC_PAPERS 2 >>>>>> #DEFINE DC_BINS 6 >>>>>> #DEFINE DC_SIZE 8 >>>>>> #DEFINE DC_VERSION 10 >>>>>> #DEFINE DC_BINNAMES 12 >>>>>> #DEFINE DC_PAPERNAMES 16 >>>>>> #DEFINE DEFAULT_VALUES 0 >>>>>> >>>>>> * Needed to interrogate the printer driver for paper bins/trays >>>>>> DECLARE INTEGER DeviceCapabilities IN winspool.drv; >>>>>> STRING pDevice, STRING pPort, INTEGER fwCapability,; >>>>>> STRING @pOutput, INTEGER pDevMode >>>>>> >>>>>> =APRINTERS(pPrinters) >>>>>> FOR ip = 1 TO ALEN(pPrinters,1) >>>>>> *QQprintername=SET("PRINTER",2) && windows own default printer >>>>>> QQprintername=pPrinters(ip,1) >>>>>> pPort=ALLTRIM(pPrinters(ip,2)) >>>>>> * Windows API declarations >>>>>> * Hook in here to determine the paper trays and their bin numbers >>>>>> * Update the GVoPrintJob object with the results >>>>>> QQbinBfr = REPLICATE(CHR(0), 16384) >>>>>> QQbinBf2 = REPLICATE(CHR(0), 1024) >>>>>> * provide valid printer and port names >>>>>> * pPort="HPJD1" >>>>>> QQnCount = DeviceCapabilities(QQprintername, pPort, DC_BINNAMES, @QQbinBfr, 0) >>>>>> QQnCnt2 = DeviceCapabilities(QQprintername, pPort, DC_BINS, @QQbinBf2, 0) >>>>>> * QQnCount = DeviceCapabilities(QQprintername, "LPT1", DC_BINNAMES, @QQbinBfr, 0) >>>>>> * QQnCnt2 = DeviceCapabilities(QQprintername, "LPT1", DC_BINS, @QQbinBf2, 0) >>>>>> * Set the number of bins available on this printer property >>>>>> p_bin_count=IIF(QQnCount<0, 0, QQnCount) >>>>>> *GVoPrintJob.p_bin_count = iif(QQnCount<0, 0, QQnCount) >>>>>> * if GVoPrintJob.p_Bin_Count > 0 >>>>>> IF p_bin_count>0 >>>>>> * each string buffer is 24 characters long, terminated with a NULL / chr(0) >>>>>> * and contains the name of a paper bin >>>>>> *dimension GVoPrintJob.p_bin_names[QQnCount], GVoPrintJob.p_bin_labels[QQnCount] >>>>>> DIMENSION p_bin_names[QQnCount], p_bin_labels[QQnCount] >>>>>> FOR QQindex=1 TO QQnCount >>>>>> QQbinName = SUBSTR(QQbinBfr, (QQindex-1)*24+1, 24) + CHR(0) >>>>>> QQbinName = SUBSTR(QQbinName, 1, AT(CHR(0), QQbinName)-1) >>>>>> *GVoPrintJob. >>>>>> p_bin_names[QQindex] = QQbinName >>>>>> ENDFOR >>>>>> QQptr = 1 >>>>>> FOR QQindex=1 TO QQnCnt2*2 STEP 2 >>>>>> QQbinNum = THISFORM.buf2word(SUBSTR(QQbinBf2, QQindex, 2)) >>>>>> >>>>>> * GVoPrintJob.p_bin_labels[QQptr] = QQbinNum >>>>>> p_bin_labels[QQptr] = QQbinNum >>>>>> QQptr = QQptr + 1 >>>>>> ENDFOR >>>>>> ENDIF >>>>>> IF ALEN(p_bin_names,1)=ALEN(p_bin_labels,1) >>>>>> FOR i = 1 TO ALEN(p_bin_names,1) >>>>>> IF TYPE('thisform.paperbins')="U" >>>>>> DIMENSION THISFORM.paperbins(i,4) >>>>>> ELSE >>>>>> DIMENSION THISFORM.paperbins(ALEN(THISFORM.paperbins,1)+1,4) >>>>>> ENDIF >>>>>> THISFORM.paperbins(ALEN(THISFORM.paperbins,1),1)=QQprintername >>>>>> THISFORM.paperbins(ALEN(THISFORM.paperbins,1),2)=p_bin_names(i) >>>>>> THISFORM.paperbins(ALEN(THISFORM.paperbins,1),3)=p_bin_labels(i) >>>>>> THISFORM.paperbins(ALEN(THISFORM.paperbins,1),4)=pPort >>>>>> ENDFOR >>>>>> ENDIF >>>>>> ENDFOR >>>>>> *SET STEP ON >>>>>> * LIST MEMORY LIKE p_bin_names >>>>>> * LIST MEMORY LIKE p_bin_labels >>>>>> * LIST MEMORY LIKE thisform.paperbins >>>>>> nlen1=0 >>>>>> nlen2=0 >>>>>> nlen3=4 >>>>>> nlen4=0 >>>>>> =ACOPY(THISFORM.paperbins,paperbins) >>>>>> FOR i = 1 TO ALEN(paperbins,1) >>>>>> IF TYPE('paperbins(i,1)')<>"L" >>>>>> IF LEN(ALLTRIM(paperbins(i,1)))>nlen1 >>>>>> nlen1=LEN(ALLTRIM(paperbins(i,1))) >>>>>> ENDIF >>>>>> ENDIF >>>>>> IF TYPE('paperbins(i,2)')<>"L" >>>>>> IF LEN(ALLTRIM(paperbins(i,2)))>nlen2 >>>>>> nlen2=LEN(ALLTRIM(paperbins(i,2))) >>>>>> ENDIF >>>>>> ENDIF >>>>>> *!* IF TYPE('paperbins(i,3)')<>"L" >>>>>> *!* IF LEN(ALLTRIM(paperbins(i,3)))>nlen3 >>>>>> *!* nlen3=LEN(ALLTRIM(paperbins(i,3))) >>>>>> *!* ENDIF >>>>>> *!* ENDIF >>>>>> IF TYPE('paperbins(i,4)')<>"L" >>>>>> IF LEN(ALLTRIM(paperbins(i,4)))>nlen4 >>>>>> nlen4=LEN(ALLTRIM(paperbins(i,4))) >>>>>> ENDIF >>>>>> ENDIF >>>>>> ENDFOR >>>>>> IF nlen1=0 >>>>>> nlen1=1 >>>>>> ENDIF >>>>>> IF nlen2=0 >>>>>> nlen2=1 >>>>>> ENDIF >>>>>> IF nlen4=0 >>>>>> nlen4=1 >>>>>> ENDIF >>>>>> CREATE CURSOR trays (pname c(nlen1), pbin c(nlen2), pbinno c(nlen3), pPort c(nlen4)) >>>>>> SELE trays >>>>>> FOR i = 1 TO ALEN(paperbins,1) >>>>>> IF TYPE('paperbins(i,1)')<>"L" >>>>>> SELE trays >>>>>> APPEND BLANK >>>>>> *!* IF i > 1 >>>>>> *!* ta=i-1 >>>>>> *!* IF TYPE('paperbins(i,1)')=TYPE('paperbins(ta,1)') .and. paperbins(i,1) <> paperbins(ta,1) >>>>>> *!* REPLACE trays.pname WITH ALLTRIM(paperbins(i,1)) >>>>>> *!* ELSE >>>>>> *!* IF TYPE('paperbins(i,1)')!=TYPE('paperbins(ta,1)') >>>>>> *!* REPLACE trays.pname WITH ALLTRIM(paperbins(i,1)) >>>>>> *!* ENDIF >>>>>> *!* ENDIF >>>>>> *!* ENDIF >>>>>> REPLACE trays.pname WITH ALLTRIM(paperbins(i,1)) >>>>>> IF TYPE('paperbins(i,2)')<>"L" >>>>>> REPLACE trays.pbin WITH ALLTRIM(paperbins(i,2)) >>>>>> ENDIF >>>>>> IF TYPE('paperbins(i,3)')<>"L" >>>>>> REPLACE trays.pbinno WITH ALLTRIM(STR(paperbins(i,3))) >>>>>> ENDIF >>>>>> IF TYPE('paperbins(i,4)')<>"L" >>>>>> REPLACE trays.pPort WITH ALLTRIM(paperbins(i,4)) >>>>>> ENDIF >>>>>> ENDIF >>>>>> ENDFOR >>>>>> GO TOP >>>>>> THISFORM.List1.REFRESH >>>>>> ENDPROC >>>>>> >>>>>> PROCEDURE UNLOAD >>>>>> CLEAR EVENTS >>>>>> ENDPROC >>>>>> >>>>>> PROCEDURE list1.DblClick >>>>>> IF USED('TRAYS') .AND. RECCOUNT('TRAYS')>0 .AND. !EOF('TRAYS') >>>>>> mchoice=trays.pbinno >>>>>> ENDIF >>>>>> MESSAGEBOX('You chose: '+CHR(13)+CHR(13); >>>>>> +"Printer: "+ALLTRIM(trays.pname)+ CHR(13); >>>>>> +"Tray: "+trays.pbin+CHR(13); >>>>>> +"Bin No: "+trays.pbinno+CHR(13),0,'Paper Tray Selectioin') >>>>>> NODEFAULT >>>>>> THISFORM.RELEASE() >>>>>> ENDPROC >>>>>> >>>>>> >>>>>> PROCEDURE list1.KeyPress >>>>>> LPARAMETERS nKeyCode, nShiftAltCtrl >>>>>> >>>>>> IF LASTKEY() = 13 .or. LASTKEY() = -9 >>>>>> nKeyCode = 13 >>>>>> nShiftAltCtrl = 0 >>>>>> ENDIF >>>>>> >>>>>> mchoice="" >>>>>> DO CASE >>>>>> >>>>>> CASE nKeyCode = 13 .or. nkeyCode = -9 >>>>>> >>>>>> IF USED('TRAYS') .AND. RECCOUNT('TRAYS')>0 .AND. !EOF('TRAYS') >>>>>> mchoice=trays.pbinno >>>>>> ENDIF >>>>>> MESSAGEBOX('You chose: '+CHR(13)+CHR(13); >>>>>> +"Printer: "+ALLTRIM(trays.pname)+ CHR(13); >>>>>> +"Tray: "+trays.pbin+CHR(13); >>>>>> +"Bin No: "+trays.pbinno+CHR(13),0,'Paper Tray Selectioin') >>>>>> NODEFAULT >>>>>> THISFORM.RELEASE() >>>>>> >>>>>> OTHERWISE >>>>>> >>>>>> mchoice="" >>>>>> DODEFAULT() >>>>>> >>>>>> ENDCASE >>>>>> ENDPROC >>>>>> >>>>>> >>>>>> PROCEDURE list1.Refresh >>>>>> IF !USED('trays') .OR. RECCOUNT('trays')=0 >>>>>> THIS.ENABLED=.F. >>>>>> ELSE >>>>>> THIS.ENABLED=.T. >>>>>> ENDIF >>>>>> DODEFAULT() >>>>>> ENDPROC >>>>>> >>>>>> >>>>>>ENDDEFINE >>>>>>