Since I just found my way around xprint stuff, it occurred to me that since the xprint commands were a lot like the graphic print commands, there might be a way to make a "print preview". After getting the xprint to paper correct, why not copy that routine to a new preview routine, do a find and replace xprint for graphic, then add the word, print, where necessary for the output, and you have yourself a preview showing in a graphic window.
It works fine for one "page" (one window's worth), but I am at a loss as to how to pageinate the data in either a graphic window or a "blank" graphic.
Also, when calling the sub using a graphic window, text is only printed once, unless I exit the program and view again. It will not print the text the second time, if I stay in the program.
I cobbled together some sample code to demonstrate.
It works fine for one "page" (one window's worth), but I am at a loss as to how to pageinate the data in either a graphic window or a "blank" graphic.
Also, when calling the sub using a graphic window, text is only printed once, unless I exit the program and view again. It will not print the text the second time, if I stay in the program.
I cobbled together some sample code to demonstrate.
Code:
#PBFORMS CREATED V1.50 '------------------------------------------------------------------------------ ' The first line in this file is a PB/Forms metastatement. ' It should ALWAYS be the first line of the file. Other ' PB/Forms metastatements are placed at the beginning and ' end of "Named Blocks" of code that should be edited ' with PBForms only. Do not manually edit or delete these ' metastatements or PB/Forms will not be able to reread ' the file correctly. See the PB/Forms documentation for ' more information. ' Named blocks begin like this: #PBFORMS BEGIN ... ' Named blocks end like this: #PBFORMS END ... ' Other PB/Forms metastatements such as: ' #PBFORMS DECLARATIONS ' are used by PB/Forms to insert additional code. ' Feel free to make changes anywhere else in the file. '------------------------------------------------------------------------------ #COMPILE EXE #DIM ALL '------------------------------------------------------------------------------ ' ** Includes ** '------------------------------------------------------------------------------ #PBFORMS BEGIN INCLUDES #IF NOT %DEF(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF #PBFORMS END INCLUDES '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Constants ** '------------------------------------------------------------------------------ #PBFORMS BEGIN CONSTANTS %IDD_DIALOG1 = 101 %IDC_BUTTON1 = 1001 %IDCANCEL = 2 %IDD_DIALOG2 = 102 %idc_graphic1 = 1002 %IDC_PREVIEW = 1003 %IDC_BUTTON2 = 1004 %IDC_BUTTON3 = 1005 %IDC_SCROLLBAR1 = 1006 #PBFORMS END CONSTANTS '------------------------------------------------------------------------------ GLOBAL gInvoicenum AS LONG '------------------------------------------------------------------------------ ' ** Declarations ** '------------------------------------------------------------------------------ DECLARE CALLBACK FUNCTION ShowDIALOG1Proc() DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG DECLARE CALLBACK FUNCTION ShowDIALOG2Proc() DECLARE FUNCTION ShowDIALOG2(BYVAL hDlg AS DWORD) AS LONG #PBFORMS DECLARATIONS '------------------------------------------------------------------------------ DECLARE SUB COMPANYLOGO DECLARE SUB previewprint DECLARE SUB previewprint2 '------------------------------------------------------------------------------ ' ** Main Application Entry Point ** '------------------------------------------------------------------------------ FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** CallBacks ** '------------------------------------------------------------------------------ CALLBACK FUNCTION ShowDIALOG1Proc() LOCAL hGrwin AS LONG SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG ' Initialization handler CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD IF ISFALSE CBWPARAM THEN ' Save control focus hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN ' Restore control focus SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF CASE %WM_COMMAND ' Process control notifications SELECT CASE AS LONG CBCTL ' /* Inserted by PB/Forms 04-27-2008 19:19:10 CASE %IDC_BUTTON3 'graphic print to graphic window IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN previewprint2 END IF ' */ ' /* Inserted by PB/Forms 04-26-2008 21:42:00 CASE %IDC_PREVIEW 'graphic print to blank graphic IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN showdialog2(CBHNDL) END IF ' */ CASE %IDC_BUTTON1 'xprint to paper IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN COMPANYLOGO END IF CASE %IDCANCEL IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN DIALOG END CBHNDL, 0 END IF END SELECT END SELECT END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ ' ** Dialogs ** '------------------------------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_DIALOG1->-> LOCAL hDlg AS DWORD DIALOG NEW hParent, "Dialog1", 70, 70, 265, 121, TO hDlg CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "print", 20, 65, 50, 15 CONTROL ADD BUTTON, hDlg, %IDCANCEL, "exit", 100, 100, 50, 15 CONTROL ADD BUTTON, hDlg, %IDC_PREVIEW, "PREVIEW", 100, 65, 50, 15 CONTROL ADD BUTTON, hDlg, %IDC_BUTTON3, "GRAPHWINDOW", 175, 65, 75, 15 #PBFORMS END DIALOG DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_DIALOG1 #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION '------------------------------------------------------------------ '---------------------------------------- SUB COMPANYLOGO LOCAL LOGO AS STRING,L1 AS STRING,L2 AS STRING,L3 AS STRING, L4 AS STRING LOCAL TB1 AS SINGLE,tb2 AS SINGLE,TB3 AS SINGLE, TB4 AS SINGLE,TB5 AS SINGLE LOCAL x,y AS SINGLE XPRINT ATTACH DEFAULT XPRINT SCALE (1,1)-(80,66) LOGO$="TOM SMITHSON NURSERY INC" L1$="8485 S.E. 282ND" L2$="GRANDVIEW, OREGON 97080" L3$="(503) 619-0860" L4$="FAX (503) 619-0861" TB1= (INT((88/2)-LEN(LOGO$)/2)/2) tb2 = INT((85/2)-LEN(L1$)/2) tb3 = INT((85/2)-LEN(L2$)/2) tb4 = INT((85/2)-LEN(L3$)/2) tb5 = INT((85/2)-LEN(L4$)/2) 'tb1= 7 XPRINT:XPRINT XPRINT GET POS TO x,y XPRINT SET POS (tb1+3,y) XPRINT FONT "courier new",24,1 XPRINT LOGO$ XPRINT FONT "courier new",11,1 XPRINT GET POS TO x,y XPRINT SET POS (tb2,y) XPRINT L1$ XPRINT GET POS TO x,y XPRINT SET POS (tb3,y) XPRINT L2$ XPRINT GET POS TO x,y XPRINT SET POS (tb4,y) XPRINT L3$ XPRINT GET POS TO x,y XPRINT SET POS (tb5,y) XPRINT L4$ XPRINT CLOSE END SUB ' 10 lines used here '------------------------------------------------------------------------------ CALLBACK FUNCTION ShowDIALOG2Proc() SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG ' Initialization handler GRAPHIC ATTACH CBHNDL, %idc_graphic1 previewprint CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD IF ISFALSE CBWPARAM THEN ' Save control focus hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN ' Restore control focus SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF CASE %WM_COMMAND ' Process control notifications SELECT CASE AS LONG CBCTL ' /* Inserted by PB/Forms 04-27-2008 19:44:12 CASE %IDC_SCROLLBAR1 ' */ ' /* Inserted by PB/Forms 04-27-2008 17:40:34 CASE %IDC_BUTTON2 IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN END IF ' */ ' /* Inserted by PB/Forms 04-26-2008 21:42:00 CASE %idc_graphic1 ' */ ' /* Inserted by PB/Forms 04-26-2008 21:37:32 CASE %IDCANCEL IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN DIALOG END CBHNDL, 0 END IF ' */ END SELECT END SELECT END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ FUNCTION ShowDIALOG2(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_DIALOG2->-> LOCAL hDlg AS DWORD DIALOG NEW hParent, "Dialog2", 4, 47, 672, 386, %WS_POPUP OR %WS_BORDER _ OR %WS_DLGFRAME OR %WS_CLIPSIBLINGS OR %WS_VSCROLL OR %WS_VISIBLE OR _ %DS_MODALFRAME OR %DS_CENTER OR %DS_3DLOOK OR %DS_NOFAILCREATE OR _ %DS_SETFONT, %WS_EX_WINDOWEDGE OR %WS_EX_CONTROLPARENT OR _ %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD GRAPHIC, hDlg, %idc_graphic1, "print preview", 10, 15, 500, 350, _ %WS_CHILD OR %WS_VISIBLE, %WS_EX_LEFT OR %WS_EX_LTRREADING OR _ %WS_EX_RIGHTSCROLLBAR CONTROL ADD BUTTON, hDlg, %IDCANCEL, "exit", 470, 365, 50, 15 CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "next page", 340, 365, 55, 15 #PBFORMS END DIALOG DIALOG SHOW MODAL hDlg, CALL ShowDIALOG2Proc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_DIALOG2 #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION '------------------------------------------------------------------------------ SUB previewprint 'using control add graphic LOCAL hGrWin AS LONG LOCAL LOGO AS STRING,L1 AS STRING,L2 AS STRING,L3 AS STRING, L4 AS STRING LOCAL TB1 AS SINGLE,tb2 AS SINGLE,TB3 AS SINGLE, TB4 AS SINGLE,TB5 AS SINGLE LOCAL x,y ,ncWidth,ncHeight AS SINGLE LOCAL I AS LONG GRAPHIC SCALE (1,1)-(80,66) LOGO$="TOM SMITHSON NURSERY INC" L1$="8485 S.E. 282ND" L2$="GRANDVIEW, OREGON 97080" L3$="(503) 619-0860" L4$="FAX (503) 619-0861" TB1= (INT((88/2)-LEN(LOGO$)/2)/2) tb2 = INT((85/2)-LEN(L1$)/2) tb3 = INT((85/2)-LEN(L2$)/2) tb4 = INT((85/2)-LEN(L3$)/2) tb5 = INT((85/2)-LEN(L4$)/2) TB1= INT((79 -LEN(LOGO$))/2.4) tb2 = INT((79-LEN(L1$))/2) tb3 = INT((79-LEN(L2$))/2) tb4 = INT((79-LEN(L3$))/2) tb5 = INT((79-LEN(L4$))/2) FOR I = 1 TO 10 GRAPHIC PRINT :GRAPHIC PRINT GRAPHIC FONT "courier new",24,1 GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB1,y) GRAPHIC PRINT LOGO$ GRAPHIC FONT "Courier New",11,1 GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB2,y) GRAPHIC PRINT L1$ GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB3,y) GRAPHIC PRINT L2$ GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB4,y) GRAPHIC PRINT L3$ GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB5,y) GRAPHIC PRINT L4 NEXT END SUB '------------------------------------------ SUB previewprint2 'using graphic window LOCAL hGrWin AS LONG LOCAL LOGO AS STRING,L1 AS STRING,L2 AS STRING,L3 AS STRING, L4 AS STRING LOCAL TB1 AS SINGLE,tb2 AS SINGLE,TB3 AS SINGLE, TB4 AS SINGLE,TB5 AS SINGLE LOCAL x,y ,ncWidth,ncHeight AS SINGLE LOCAL I AS LONG GRAPHIC WINDOW "print preview",5,5,900,500 TO hGrWin GRAPHIC ATTACH hGrWin,0,REDRAW GRAPHIC SCALE (1,1)-(80,66) LOGO$="TOM SMITHSON NURSERY INC" L1$="8485 S.E. 282ND" L2$="GRANDVIEW, OREGON 97080" L3$="(503) 619-0860" L4$="FAX (503) 619-0861" TB1= (INT((88/2)-LEN(LOGO$)/2)/2) tb2 = INT((85/2)-LEN(L1$)/2) tb3 = INT((85/2)-LEN(L2$)/2) tb4 = INT((85/2)-LEN(L3$)/2) tb5 = INT((85/2)-LEN(L4$)/2) TB1= INT((79 -LEN(LOGO$))/2.4) tb2 = INT((79-LEN(L1$))/2) tb3 = INT((79-LEN(L2$))/2) tb4 = INT((79-LEN(L3$))/2) tb5 = INT((79-LEN(L4$))/2) FOR I = 1 TO 10 GRAPHIC PRINT :GRAPHIC PRINT GRAPHIC FONT "courier new",24,1 GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB1,y) GRAPHIC PRINT LOGO$ GRAPHIC FONT "Courier New",11,1 GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB2,y) GRAPHIC PRINT L1$ GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB3,y) GRAPHIC PRINT L2$ GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB4,y) GRAPHIC PRINT L3$ GRAPHIC GET POS TO x,y GRAPHIC SET POS (TB5,y) GRAPHIC PRINT L4 NEXT END SUB
Comment