Announcement

Collapse
No announcement yet.

Print an envelope using bare minimum xprint statements

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Print an envelope using bare minimum xprint statements

    this program will capture text from the clipboard, meaning an name and address.
    It will do a little cleaning of the name and zip code line
    The printout goes to a predetermined printer, we are using a printer named "XXenvelope". If you do not like that one you can patch the envprint.exe and put your own printer name in it.
    This is the first time i have programmed using a windows printer driver, so that is why it is so simple, but is going to work for me.
    An ini file will be used if it exist with the next version.
    We have OKIDATA 320 printers and i wanted this program to work with those and it does, but there has been little testing but it should work fine.
    The program ask you to confirm the print job before it prints.
    A nice little ini file to help this program along would be nice.
    If you do not have a printer named XXenvelope this program will still run, just not print. Some people might use this program to clean up an address then copy it back to the clipboard for another program to use.
    You can code the function cleansetextbox to do your dirty cleaning of the address for your special reasons.



    Code:
    'envprint.bas
    'compiled with powerbasic
    'pbwin ver 9.01
    'program is designed to copy and paste an address
    'then print it out to a predetermined designated printer
    '
    'i am not good with printing in a windows enviroment
    'i leave that headache for you
    'see the XPRINT statments for adjusting print spacing and
    'see FONT NEW for creating a font
    
    
    
    #PBFORMS CREATED V1.51
    '------------------------------------------------------------------------------
    ' 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
    #INCLUDE "PBForms.INC"
    #PBFORMS END INCLUDES
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Constants **
    '------------------------------------------------------------------------------
    #PBFORMS BEGIN CONSTANTS
    %IDD_DIALOG1  =  101
    %IDC_TEXTBOX1 = 999
    %IDC_BUTTON1  = 1001
    %IDC_BUTTON2  = 1002
    %IDC_BUTTON3  = 1003
    %IDC_BUTTON4  = 1004
    %IDC_BUTTON5  = 1005
    %IDC_BUTTON6  = 1006
    
    #PBFORMS END CONSTANTS
    
    GLOBAL gstextbox AS STRING
    GLOBAL gstextboxold AS STRING
    GLOBAL gstemp AS STRING
    GLOBAL gltemp AS LONG
    GLOBAL gltemp2 AS LONG
    GLOBAL hDlg   AS DWORD
    
    
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Declarations **
    '------------------------------------------------------------------------------
    DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
    DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
    
    FUNCTION printenvelope() AS LONG
       LOCAL I AS LONG
       LOCAL J AS LONG
       LOCAL atemp AS STRING
       LOCAL sfonttemp AS STRING
       LOCAL ifonttemp AS LONG
       LOCAL sprintername AS STRING
       sprintername="XXenvelope                                           "
       sprintername=TRIM$(sprintername)
       j=PARSECOUNT(gstextbox,$CRLF)
       DIM  a(1 TO j) AS STRING
       PARSE gstextbox,a(),$CRLF
    
       XPRINT ATTACH sprintername,"Envelope using envprint.exe"
       IF XPRINT$="" THEN
         MSGBOX ("There has to exist a windows printer named "+$CRLF+sprintername+$CRLF+" for this program to print to.")
       EXIT FUNCTION
       END IF
    
       FONT NEW sfonttemp,12,0,1,1,0 TO ifonttemp  'this is a fixed font, see FONT NEW for details
    
       REM below starting on the 11 line using the above font
       REM then spacing over 33 spaces before printing
       XPRINT SET FONT ifonttemp
       FOR i=1 TO 10
           XPRINT
       NEXT i
          FOR i=1 TO j
         gstemp= SPACE$(33)+A(i)
         XPRINT  gstemp
       NEXT i
       XPRINT FORMFEED
       XPRINT CLOSE
    
       CONTROL SET TEXT HDLG,%IDC_TEXTBOX1, ""
       gstextboxold=gstextbox
       END FUNCTION
    
    FUNCTION cleansetextbox() AS LONG
        gstextboxold=gstextbox
        gstextbox=TRIM$(gstextbox)
        gstextbox=UCASE$(gstextbox):    REM convert the text to uppercase if desired in the cleanse process
        gltemp=INSTR(UCASE$(gstextbox)," ZIP ")
        IF gltemp THEN
           gstextbox=LEFT$(gstextbox,gltemp)+RIGHT$(gstextbox,LEN(gstextbox)-gltemp-4)
        END IF
        REM remove extra blank lines and any spaces prior and after any CRLF
        WHILE INSTR(gstextbox, " "+$CRLF)
        REPLACE " "+$CRLF WITH $CRLF IN gstextbox
        WEND
        WHILE INSTR(gstextbox, $CRLF+" ")
        REPLACE $CRLF+" " WITH $CRLF IN gstextbox
        WEND
        WHILE INSTR(gstextbox, $CRLF+$CRLF)
        REPLACE $CRLF+$CRLF WITH $CRLF IN gstextbox
        WEND
        IF gstextbox=$CRLF THEN gstextbox=""
        REM CRLF from the beginning of the textbox if it exist
        IF LEN(gstextbox)>1 THEN
          IF LEFT$(gstextbox,2)=$CRLF THEN
             gstextbox=RIGHT$(gstextbox,LEN(gstextbox)-2)
          END IF
        END IF
        gltemp=INSTR(gstextbox,$CRLF)
        IF gltemp AND INSTR(LEFT$(gstextbox,gltemp-1),",") THEN
            gstemp=LEFT$(gstextbox,gltemp-1)
            gltemp=INSTR(-1,gstemp,",")
            gstemp=RIGHT$(gstemp,LEN(gstemp)-gltemp)+" "+LEFT$(gstemp,gltemp-1)
            gltemp=INSTR(gstextbox,$CRLF)
            gstextbox=TRIM$(gstemp)+RIGHT$(gstextbox,LEN(gstextbox)-gltemp+1)
        END IF
    
    END FUNCTION
    
    #PBFORMS DECLARATIONS
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Main Application Entry Point **
    '------------------------------------------------------------------------------
    FUNCTION PBMAIN()
        gstextbox=""
        ShowDIALOG1 %HWND_DESKTOP
    END FUNCTION
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** CallBacks **
    '------------------------------------------------------------------------------
    CALLBACK FUNCTION ShowDIALOG1Proc()
    
        SELECT CASE AS LONG CBMSG
            CASE %WM_INITDIALOG
                ' Initialization handler
                DIALOG SEND CBHNDL, %WM_CHANGEUISTATE, MAKLNG(%UIS_CLEAR, %UISF_HIDEACCEL), 0
                CONTROL SET FOCUS hDlg, %IDC_TEXTBOX1
    
              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
                    CASE %IDC_TEXTBOX1
    
                    CASE %IDC_BUTTON1
                    REM  print the text from textbox1
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                             CONTROL GET TEXT HDLG,%IDC_TEXTBOX1 TO gstextbox
                             gstextbox=TRIM$(gstextbox)
                             gstextbox=UCASE$(gstextbox):    REM convert the text to uppercase if desired in the printing process
    
                             REM remove the word " zip " if it exist on any line
                             gltemp=INSTR(UCASE$(gstextbox)," ZIP ")
                             IF gltemp THEN
                                 gstextbox=LEFT$(gstextbox,gltemp)+RIGHT$(gstextbox,LEN(gstextbox)-gltemp-4)
                             END IF
                             REM remove extra blank lines and any spaces prior and after any CRLF
                             WHILE INSTR(gstextbox, " "+$CRLF)
                             REPLACE " "+$CRLF WITH $CRLF IN gstextbox
                             WEND
                             WHILE INSTR(gstextbox, $CRLF+" ")
                             REPLACE $CRLF+" " WITH $CRLF IN gstextbox
                             WEND
                             WHILE INSTR(gstextbox, $CRLF+$CRLF)
                             REPLACE $CRLF+$CRLF WITH $CRLF IN gstextbox
                             WEND
                             IF gstextbox=$CRLF THEN gstextbox=""
                             REM CRLF from the beginning of the textbox if it exist
                              IF LEN(gstextbox)>1 THEN
                                 IF LEFT$(gstextbox,2)=$CRLF THEN
                                     gstextbox=RIGHT$(gstextbox,LEN(gstextbox)-2)
                                 END IF
                             END IF
                             IF gstextbox<>"" THEN
                                gltemp=MSGBOX (gstextbox, %MB_YESNO OR %MB_DEFBUTTON2,"Confirm print")
                                IF gltemp=6 THEN printenvelope()
                             END IF
                        END IF
                        CONTROL SET FOCUS hDlg, %IDC_TEXTBOX1
    
                     CASE %IDC_BUTTON2
                     REM clear the text in textbox1
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                             CONTROL GET TEXT HDLG,%IDC_TEXTBOX1 TO gstextbox
                             WHILE INSTR(gstextbox, " "+$CRLF)
                               REPLACE " "+$CRLF WITH $CRLF IN gstextbox
                               REPLACE $CRLF+$CRLF WITH $CRLF IN gstextbox
                             WEND
                             WHILE INSTR(gstextbox, $CRLF+$CRLF)
                               REPLACE $CRLF+$CRLF WITH $CRLF IN gstextbox
                             WEND
                             IF gstextbox=$CRLF THEN gstextbox=""
                             IF gstextbox<>"" THEN gstextboxold=gstextbox
                             CONTROL SET TEXT HDLG,%IDC_TEXTBOX1, ""
                        END IF
                        CONTROL SET FOCUS hDlg, %IDC_TEXTBOX1
    
                      CASE %IDC_BUTTON3
                      REM cleanse the text in textbox1
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                             CONTROL GET TEXT HDLG,%IDC_TEXTBOX1 TO gstextbox
                             IF TRIM$(gstextbox)<>"" THEN cleansetextbox()
                             CONTROL SET TEXT HDLG,%IDC_TEXTBOX1,gstextbox
                        END IF
                        CONTROL SET FOCUS hDlg, %IDC_TEXTBOX1
    
                      CASE %IDC_BUTTON4
                      REM undo
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                            CONTROL GET TEXT HDLG,%IDC_TEXTBOX1 TO gstemp
                            gstextbox=gstextboxold
                            gstextboxold=gstemp
                            CONTROL SET TEXT HDLG,%IDC_TEXTBOX1, gstextbox
                            CONTROL SET FOCUS hDlg, %IDC_TEXTBOX1
                        END IF
    
                       CASE %IDC_BUTTON5
                       REM send text to clipboard
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        CONTROL GET TEXT HDLG,%IDC_TEXTBOX1 TO gstemp
                        IF gstemp<>"" THEN
                          FOR gltemp=1& TO 100&
                            CLIPBOARD RESET, gltemp2
                            IF gltemp2 THEN EXIT FOR
                            SLEEP 20
                          NEXT gltemp
                          FOR gltemp=1 TO 100&
                            CLIPBOARD SET TEXT gstemp,gltemp2
                            IF gltemp2 THEN EXIT FOR
                           SLEEP 30
                          NEXT gltemp
                          CONTROL SET FOCUS hDlg, %IDC_TEXTBOX1
                        END IF
                        END IF
    
                       CASE %IDC_BUTTON6
                       REM get text from clipboard
                        IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                        FOR gltemp=1 TO 100&
                          CLIPBOARD GET TEXT gstemp,gltemp2
                          IF gltemp2 THEN EXIT FOR
                          SLEEP 30
                        NEXT gltemp
                        IF gltemp2 THEN
                          CONTROL GET TEXT HDLG,%IDC_TEXTBOX1 TO gstextboxold
                          gstextbox=gstemp
                          cleansetextbox()
                          CONTROL SET TEXT HDLG,%IDC_TEXTBOX1, gstextbox
                          CONTROL SET FOCUS hDlg, %IDC_TEXTBOX1
                        END IF
                        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
        LOCAL hFont1 AS DWORD
    
        DIALOG NEW hParent, "Envelope print", 70, 70, 331, 88, %WS_POPUP OR _
            %WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR _
            %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _
            %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT _
             OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
        CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX1, "", 0, 3, 330, 60, %WS_CHILD OR _
            %WS_VISIBLE OR %WS_TABSTOP OR %ES_LEFT OR %ES_MULTILINE OR _
            %ES_WANTRETURN, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR _
            %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR
        CONTROL ADD BUTTON,  hDlg, %IDC_BUTTON1, "&Print", 112, 65, 100, 22, _
            %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER _
            OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
        CONTROL ADD BUTTON,  hDlg, %IDC_BUTTON2, "&Clear", 304, 70, 26, 15, _
            %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
        CONTROL ADD BUTTON,  hDlg, %IDC_BUTTON3, "Cleanse", 62, 70, 35, 15,_
             %WS_CHILD OR %WS_VISIBLE OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
        CONTROL ADD BUTTON,  hDlg, %IDC_BUTTON4, "Undo", 274, 70, 26, 15,_
              %WS_CHILD OR %WS_VISIBLE OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
        CONTROL ADD BUTTON,  hDlg, %IDC_BUTTON5, "To clipboard", 224, 70, 44, 15,_
               %WS_CHILD OR %WS_VISIBLE OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
        CONTROL ADD BUTTON,  hDlg, %IDC_BUTTON6, "&Import clipboard", 2, 70, 55, 15,_
                %WS_CHILD OR %WS_VISIBLE OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING
    
    
        hFont1 = PBFormsMakeFont("Courier", 10, 400, %FALSE, %FALSE, %FALSE, _
            %ANSI_CHARSET)
    
        CONTROL SEND hDlg, %IDC_TEXTBOX1, %WM_SETFONT, hFont1, 0
    
    #PBFORMS END DIALOG
        DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt
    
    #PBFORMS BEGIN CLEANUP %IDD_DIALOG1
        DeleteObject hFont1
    #PBFORMS END CLEANUP
    
        FUNCTION = lRslt
    END FUNCTION
    '------------------------------------------------------------------------------
    Attached Files
    Last edited by Paul Purvis; 8 Oct 2009, 10:10 PM.
    p purvis

  • #2
    This is just some brainstorming.
    I wish there were premade business forms using XPRINT.

    Code:
    TYPE AddressType
      TheName        AS ASCIIZ * 61
      Addr1          AS ASCIIZ * 31
      Addr2          AS ASCIIZ * 31
      City           AS ASCIIZ * 31
      STATE          AS ASCIIZ * 3
      ZIP            AS ASCIIZ* 11
      DefaultPrinter AS LONG
      ChoosePrinter  AS LONG
      PrinterName    AS ASCIIZ * 31
      TopMargin      AS LONG
      LeftMargin     AS LONG
    END TYPE
     
    FUNCTION PBMAIN () AS LONG
     
      LOCAL a AS AddressType
     
      a.TheName   = "Heidi Klume"
      a.addr1     = "12345 Eastmont Drive"
      a.addr2     = "Suite 44"
      a.city      = "Beverly Hills"
      a.state     = "CA"
      a.zip       = "12345-6789"
      a.DefaultPrinter = 0
      a.ChoosePrinter = 1
      a.TopMargin =  10
      a.LeftMargin = 33
     
      PrintEnvelope A
     
    END FUNCTION
     
    FUNCTION PrintEnvelope(AddressInfo AS AddressType) AS LONG
     
      LOCAL LineNumber AS LONG
      LOCAL sfonttemp AS STRING
      LOCAL ifonttemp AS LONG
      IF AddressInfo.DefaultPrinter THEN
           XPRINT ATTACH DEFAULT
      ELSEIF AddressInfo.ChoosePrinter THEN
        XPRINT ATTACH CHOOSE
      ELSEIF LEN(AddressInfo.PrinterName) THEN
        XPRINT ATTACH AddressInfo.PrinterName
      ELSE
        ? "Destination was not specified"
        EXIT FUNCTION
      END IF
      IF ERR <> 0 OR LEN(XPRINT$) <1 THEN ? "Unable to allocate printer":EXIT FUNCTION
      FONT NEW sfonttemp,11,0,1,1,0 TO ifonttemp
      IF ifonttemp THEN XPRINT SET FONT ifonttemp ELSE ? "font unknown":EXIT FUNCTION
      FOR LineNumber = 1 TO AddressInfo.TopMargin:XPRINT :NEXT
      XPRINT SPACE$(AddressInfo.LeftMargin) + AddressInfo.TheName
      XPRINT SPACE$(AddressInfo.LeftMargin) + AddressInfo.Addr1
      IF LEN(AddressInfo.Addr2) THEN 
        XPRINT SPACE$(AddressInfo.LeftMargin) + AddressInfo.Addr2
      END IF
      XPRINT SPACE$(AddressInfo.LeftMargin)                + _
                    AddressInfo.City               + ", " + _
                    AddressInfo.State              + "  " + _
                    AddressInfo.Zip
      XPRINT FORMFEED
      XPRINT CLOSE
     
    END FUNCTION
    Last edited by Mike Doty; 8 Oct 2009, 08:01 AM. Reason: .First .Last replaced with .TheName
    The world is full of apathy, but who cares?

    Comment


    • #3
      Source Code belongs in Source Code Forum?

      Sure, I'm just a country bumpkin from flyover country, but when I look for source code I look in the Source Code Forum.
      Michael Mattias
      Tal Systems (retired)
      Port Washington WI USA
      [email protected]
      http://www.talsystems.com

      Comment


      • #4
        Perhaps he wanted suggestions or this is not the final copy.
        The world is full of apathy, but who cares?

        Comment


        • #5
          Exactly Mike, and i found a few small things not doing exactly as i would of liked it to.
          I wish that program i had created on logging proxy+ would of never been put in the source code section first to allow for some discussion, even if it where only me.

          I have seen several discussions on envelope printing but nothing that appears to satisfy all needs. You would think with using windows drivers only you could, or it might just be me not knowing the how to. I have put off printing with windows drivers as long as i could, time to bite the bullet.

          I am starting to believe the word standard is about as practical as the phrase "common sense". I do not believe in the phrase "common sense".

          On envelope printing, i do not see how you can get by without having the user make adjustments to perfect printing locations on paper for different printers.

          Mike, adjustable settings is probably the only way to go for each printer, which means an ini file to me.

          And Mike, FYI, in the USA, the US Postal Office wants all capital letters on addresses and they only want to see the addressing on the last two lines with no periods or special characters

          1. the delivery point
          2 the city state zip

          And years ago they wanted to force everybody(businesses) to have the zip+4 and postnet bar codes printed on the envelope. Maybe they should understand that is why we pay first class mail, for them to do some work.
          p purvis

          Comment


          • #6
            Well, Ok, suggestions...

            Since you have graphic capability, why not print a postnet bar code while you are at it (optional of course)?
            Michael Mattias
            Tal Systems (retired)
            Port Washington WI USA
            [email protected]
            http://www.talsystems.com

            Comment


            • #7
              Michael,

              If the printing was not for first class mail and few envelopes per day , i would think about it. I would probably mess that up and have bigger problems with the Post Office. We do a lot of in house mailing about 30,000 per month on another system that does the postnet bar codes automatically. Yes that printer cost some big bucks too, i think 5 or 10 thousand, and it does help reduce the cost of mailing with a discount at the post office.
              We had problems with the ink smearing on that printer at one time and yes the POST OFFICE was not too happy about that.
              The OKIDATA dot matrix printers rarely even get the ribbon changed, if you know what i mean, i ask them to change them twice a month! Plus seeing some cheap envelopes used, the print is not high quality because of the overlapping of paper on the back of the envelope is dead center of the envelope, making the paper not to smooth where the address is printed on the front.

              Thanks Michael for pointing that out, i did see some code on that on the forum.

              Ok a few changes where made, but no INI file yet, just perfecting what i have to get the ball rolling on using the program.

              I convert all text to uppercase, because the post office wants that and i do not want any mistakes with users type mixed characters. A mixed case is coming and i am glad to see PB put in a MCASE$ function to do that, so i do not have to use my home brewed function.

              I increased the font by 1 size, because, MY POSTMAN CANNOT READ and they are all getting older.
              ps, nobody can ready my hand writting either.

              i added under
              Code:
              CASE %WM_INITDIALOG
                   ' Initialization handler
              this
              Code:
               DIALOG SEND CBHNDL, %WM_CHANGEUISTATE, MAKLNG(%UIS_CLEAR, %UISF_HIDEACCEL), 0
              because i could not see the few shortcuts until i pressed the ALT key.
              did not even know show shortcuts where not showing on program startup until today on our computers.

              Changed "From Clipboard" to "Import Clipboard" so user can hold down the ALT key and press I P Y to print envelope quickly with hands.
              give me a few seconds because i just thought of that and put it in and i have to update the files and listing above.

              ok all done now updating.
              i will not change that posting again unless i find a mistake.
              Last edited by Paul Purvis; 8 Oct 2009, 10:01 PM.
              p purvis

              Comment

              Working...
              X