Subject Re: Problems with duflp.custlabl form generator
From Ken Mayer <dbase@nospam.goldenstag.net>
Date Sun, 24 May 2015 10:37:52 -0700
Newsgroups dbase.getting-started
Attachment(s) CustLabl.wfm

On 5/24/2015 7:06 AM, Randy Waldman wrote:
> Hi, need help with the custom label generator:form code)
> 2.  In 64-bit, labe0009 is read-only.  Program says so.
> 3.  In 32-bit, does not record info on my new label nor do the vcr buttons work.

It is possible the issue has to do with the fact that versions of dBASE
Plus from 2.8 and later store the writable version table in a different
location than earlier versions.

I have just done a simple test with this ... try the attached, it worked
when I tested it, but I can't guarantee anything ... save it in the
dUFLP folder where the rest of the code is.

Ken


--
*Ken Mayer*
Ken's dBASE Page: http://www.goldenstag.net/dbase
The dUFLP: http://www.goldenstag.net/dbase/index.htm#dUFLP
dBASE Books: http://www.goldenstag.net/dbase/dBASEBooks.htm



/*
   CUSTLABL.WFM -- a quick'n'dirty form designed to allow the
   developer to add label definitions to those already in the
   table ...

   NOTE: If you bring this into the designer, the following is
   what the query should look like -- if the path gets changed
   you may get an error:

   this.LABE00091 = new QUERY()
   this.LABE00091.parent = this
   with (this.LABE00091)
      left = 46.5714
      top = 0.2273
      sql = 'select * from "'+LABELTABLE+'"'
      active = true
   endwith

   Note the SQL statement specifically ...

   The only changes you should have to make are noted directly
   below these comments ...

   ** This form uses the :classes: source alias generated
   ** by dB2K when installed to reference the location
   ** of the databuttons.cc file.

   // special note -- in dBASE Plus, the :classes: source
   // alias is redefined as :formcontrols:  the following
   // code has been added to the constructor code of the
   // form, but if you load this in the form designer and change
   // anything, saving the form will probably cause the following
   // code to be stripped out. You may want to check and see.
   // In addition, running using or compiling this custom form in
   // dB2K or in dBASE Plus, you will want to re-compile it in the
   // other or it won't run ...
   #if __version__ < 2
      set procedure to :classes:DataButtons.cc additive
   #else
      set procedure to :formcontrols:DataButtons.cc additive
   #endif
        
        May, 2015
           Updated to deal with the fact that dBASE Plus 2.8 and later
                puts the modifiable version of the table used for this
                in the users folder ...

*/

// Check the path ... _dbwinhome on a default installation
// will be:  C:\PROGRAM FILES\DBASE\DB2K 01\
#IF __version__ < 2.80
   #define TABLEPATH  _dbwinhome+"DESIGNER\LABEL\"
#ELSE
   #DEFINE TABLEPATH left(_app.currentUserPath, len( _app.currentUserPath ) - 4 )+ "\Designer\label\"
#ENDIF
// If using a language other than American English, check
// to see if this is the correct table name ...:
#define TABLENAME  "labe0009.db"
#define LABELTABLE TABLEPATH+TABLENAME
local fMyFile, t, bFound, i
fMyFile = new File()
if not fMyFile.exists( LABELTABLE )
   msgbox( "File: '"+TABLENAME+"' doesn't exist! "+;
           " Check your installation for the location "+;
           "of the '"+TABLEPATH+"' directory and the table '"+;
           TABLENAME+"'","Error!", 16 )

else
   local f
   f = new custlablForm()
   f.open()
endif  

RETURN
** END HEADER -- do not remove this line
//
// Generated on 02/13/2007
//
parameter bModal
local f
f = new custlablForm()
if (bModal)
   f.mdi = false // ensure not MDI
   f.readModal()
else
   f.open()
endif

class custlablForm of FORM
   set procedure to :FormControls:DATABUTTONS.CC additive
   with (this)
      onNavigate = class::UPDATECOMBO
      onOpen = class::FORM_ONOPEN
      metric = 6        // Pixels
      height = 450.0
      left = 253.0
      top = 186.0
      width = 581.0
      text = "Label Definitions for Label Designer"
      autoCenter = true
      scrollBar = 2        // Auto
   endwith

   this.LABE00091 = new QUERY()
   this.LABE00091.parent = this
   with (this.LABE00091)
      left = 324.0
      top = -1.0
      sql = 'select * from "'+LABELTABLE+'"'
      active = true
   endwith

   with (this.LABE00091.rowset)
      autoEdit = false
   endwith

   this.TITLE1 = new TEXT(this)
   with (this.TITLE1)
      height = 29.0
      left = 71.0
      top = 9.0
      width = 176.0
      variableHeight = true
      colorNormal = "Highlight/BtnFace"
      fontSize = 18.0
      fontBold = true
      text = "Design Labels"
   endwith

   this.TEXTDESCRIPTION1 = new TEXT(this)
   with (this.TEXTDESCRIPTION1)
      height = 22.0
      left = 25.0
      top = 66.0
      width = 70.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Description:"
   endwith

   this.ENTRYFIELDDESCRIPTION1 = new ENTRYFIELD(this)
   with (this.ENTRYFIELDDESCRIPTION1)
      dataLink = form.labe00091.rowset.fields["description"]
      height = 22.0
      left = 98.0
      top = 66.0
      width = 380.0
      borderStyle = 7        // Client
   endwith

   this.TEXTTOPMARGIN1 = new TEXT(this)
   with (this.TEXTTOPMARGIN1)
      height = 22.0
      left = 0.0
      top = 88.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Topmargin:"
   endwith

   this.SPINBOXTOPMARGIN1 = new SPINBOX(this)
   with (this.SPINBOXTOPMARGIN1)
      dataLink = form.labe00091.rowset.fields["topmargin"]
      height = 22.0
      left = 98.0
      top = 88.0
      width = 105.0
      picture = "9999.9999"
      rangeMax = 100
      rangeMin = 1
      borderStyle = 7        // Client
   endwith

   this.TEXTBOTTOMMARGIN1 = new TEXT(this)
   with (this.TEXTBOTTOMMARGIN1)
      height = 22.0
      left = 0.0
      top = 110.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Bottommargin:"
   endwith

   this.SPINBOXBOTTOMMARGIN1 = new SPINBOX(this)
   with (this.SPINBOXBOTTOMMARGIN1)
      dataLink = form.labe00091.rowset.fields["bottommargin"]
      height = 22.0
      left = 98.0
      top = 110.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTLEFTMARGIN1 = new TEXT(this)
   with (this.TEXTLEFTMARGIN1)
      height = 22.0
      left = 0.0
      top = 132.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Leftmargin:"
   endwith

   this.SPINBOXLEFTMARGIN1 = new SPINBOX(this)
   with (this.SPINBOXLEFTMARGIN1)
      dataLink = form.labe00091.rowset.fields["leftmargin"]
      height = 22.0
      left = 98.0
      top = 132.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTRIGHTMARGIN1 = new TEXT(this)
   with (this.TEXTRIGHTMARGIN1)
      height = 22.0
      left = 0.0
      top = 154.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Rightmargin:"
   endwith

   this.SPINBOXRIGHTMARGIN1 = new SPINBOX(this)
   with (this.SPINBOXRIGHTMARGIN1)
      dataLink = form.labe00091.rowset.fields["rightmargin"]
      height = 22.0
      left = 98.0
      top = 154.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTLABELWIDTH1 = new TEXT(this)
   with (this.TEXTLABELWIDTH1)
      height = 22.0
      left = 0.0
      top = 176.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Labelwidth:"
   endwith

   this.SPINBOXLABELWIDTH1 = new SPINBOX(this)
   with (this.SPINBOXLABELWIDTH1)
      dataLink = form.labe00091.rowset.fields["labelwidth"]
      height = 22.0
      left = 98.0
      top = 176.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTLABELHEIGHT1 = new TEXT(this)
   with (this.TEXTLABELHEIGHT1)
      height = 22.0
      left = 0.0
      top = 198.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Labelheight:"
   endwith

   this.SPINBOXLABELHEIGHT1 = new SPINBOX(this)
   with (this.SPINBOXLABELHEIGHT1)
      dataLink = form.labe00091.rowset.fields["labelheight"]
      height = 22.0
      left = 98.0
      top = 198.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTHORIZONTALGAP1 = new TEXT(this)
   with (this.TEXTHORIZONTALGAP1)
      height = 22.0
      left = 0.0
      top = 220.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Horizontalgap:"
   endwith

   this.SPINBOXHORIZONTALGAP1 = new SPINBOX(this)
   with (this.SPINBOXHORIZONTALGAP1)
      dataLink = form.labe00091.rowset.fields["horizontalgap"]
      height = 22.0
      left = 98.0
      top = 220.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTVERTICALGAP1 = new TEXT(this)
   with (this.TEXTVERTICALGAP1)
      height = 22.0
      left = 0.0
      top = 245.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Verticalgap:"
   endwith

   this.SPINBOXVERTICALGAP1 = new SPINBOX(this)
   with (this.SPINBOXVERTICALGAP1)
      dataLink = form.labe00091.rowset.fields["verticalgap"]
      height = 22.0
      left = 98.0
      top = 245.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTPAPERWIDTH1 = new TEXT(this)
   with (this.TEXTPAPERWIDTH1)
      height = 22.0
      left = 0.0
      top = 280.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Paperwidth:"
   endwith

   this.SPINBOXPAPERWIDTH1 = new SPINBOX(this)
   with (this.SPINBOXPAPERWIDTH1)
      dataLink = form.labe00091.rowset.fields["paperwidth"]
      height = 22.0
      left = 98.0
      top = 280.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTPAPERHEIGHT1 = new TEXT(this)
   with (this.TEXTPAPERHEIGHT1)
      height = 22.0
      left = 0.0
      top = 313.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Paperheight:"
   endwith

   this.SPINBOXPAPERHEIGHT1 = new SPINBOX(this)
   with (this.SPINBOXPAPERHEIGHT1)
      dataLink = form.labe00091.rowset.fields["paperheight"]
      height = 22.0
      left = 98.0
      top = 313.0
      width = 105.0
      picture = "9999.9999"
      colorHighLight = ""
      rangeMax = 100
   endwith

   this.TEXTMETRIC1 = new TEXT(this)
   with (this.TEXTMETRIC1)
      height = 22.0
      left = 0.0
      top = 337.0
      width = 98.0
      wrap = false
      alignVertical = 1        // Middle
      alignHorizontal = 2        // Right
      text = "Metric:"
   endwith

   this.METRICCOMBOBOX = new COMBOBOX(this)
   with (this.METRICCOMBOBOX)
      height = 24.0
      left = 98.0
      top = 337.0
      width = 159.0
      style = 2        // DropDownList
      dropDownHeight = 132.0
   endwith

   this.BUTTONFIRST1 = new BUTTONFIRST(this)
   with (this.BUTTONFIRST1)
      height = 26.0
      left = 494.0
      top = 74.0
      width = 70.0
   endwith

   this.BUTTONPREVIOUS1 = new BUTTONPREVIOUS(this)
   with (this.BUTTONPREVIOUS1)
      height = 26.0
      left = 494.0
      top = 100.0
      width = 70.0
   endwith

   this.BUTTONNEXT1 = new BUTTONNEXT(this)
   with (this.BUTTONNEXT1)
      height = 26.0
      left = 494.0
      top = 126.0
      width = 70.0
   endwith

   this.BUTTONLAST1 = new BUTTONLAST(this)
   with (this.BUTTONLAST1)
      height = 26.0
      left = 494.0
      top = 152.0
      width = 70.0
   endwith

   this.BUTTONAPPEND1 = new BUTTONAPPEND(this)
   with (this.BUTTONAPPEND1)
      height = 26.0
      left = 494.0
      top = 185.0
      width = 70.0
   endwith

   this.BUTTONDELETE1 = new BUTTONDELETE(this)
   with (this.BUTTONDELETE1)
      height = 26.0
      left = 494.0
      top = 237.0
      width = 70.0
   endwith

   this.BUTTONSAVE1 = new BUTTONSAVE(this)
   with (this.BUTTONSAVE1)
      onClick = class::SAVE_ONCLICK
      height = 26.0
      left = 494.0
      top = 263.0
      width = 70.0
   endwith

   this.BUTTONABANDON1 = new BUTTONABANDON(this)
   with (this.BUTTONABANDON1)
      height = 26.0
      left = 494.0
      top = 289.0
      width = 70.0
   endwith

   this.BUTTONEDIT1 = new BUTTONEDIT(this)
   with (this.BUTTONEDIT1)
      height = 26.0
      left = 494.0
      top = 211.0
      width = 70.0
   endwith

   this.PUSHBUTTON1 = new PUSHBUTTON(this)
   with (this.PUSHBUTTON1)
      onClick = {; form.close()}
      height = 26.0
      left = 494.0
      top = 332.0
      width = 70.0
      text = "Exit"
   endwith

   this.TEXT1 = new TEXT(this)
   with (this.TEXT1)
      height = 75.0
      left = 118.0
      top = 368.0
      width = 343.0
      border = true
      fontSize = 8.0
      fontItalic = true
      l0 = "This is a quick'n'dirty form aimed at allowing the developer to add new labels to the table used by dBASE (32-bit) to generate labels. The field names describe the details. If you are using a language other than English (US) you may wish to check the name "
      l0 += "of the table -- defined in the header."
      text = l0
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT2 = new TEXT(this)
   with (this.TEXT2)
      height = 19.0
      left = 208.0
      top = 89.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Distance from top of page to top of first label"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT3 = new TEXT(this)
   with (this.TEXT3)
      height = 19.0
      left = 208.0
      top = 111.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Distance from bottom of page to bottom of last label"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT4 = new TEXT(this)
   with (this.TEXT4)
      height = 19.0
      left = 208.0
      top = 134.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Distance from left of page to left of first column"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT5 = new TEXT(this)
   with (this.TEXT5)
      height = 19.0
      left = 208.0
      top = 155.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Distance from right of page to right of last column"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT6 = new TEXT(this)
   with (this.TEXT6)
      height = 19.0
      left = 208.0
      top = 178.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Width of label (left to right)"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT7 = new TEXT(this)
   with (this.TEXT7)
      height = 19.0
      left = 208.0
      top = 200.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Height of label (top to bottom)"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT8 = new TEXT(this)
   with (this.TEXT8)
      height = 19.0
      left = 208.0
      top = 222.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Distance (left to right) between two labels"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT9 = new TEXT(this)
   with (this.TEXT9)
      height = 34.0
      left = 208.0
      top = 243.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Distance (bottom of one label to top of next) between two labels"
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT10 = new TEXT(this)
   with (this.TEXT10)
      height = 32.0
      left = 208.0
      top = 280.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Width of page (left to right) -- if using tractor feed, distance after tear-off ..."
      borderStyle = 10        // Etched Out
   endwith

   this.TEXT11 = new TEXT(this)
   with (this.TEXT11)
      height = 19.0
      left = 208.0
      top = 315.0
      width = 279.0
      fontSize = 8.0
      fontItalic = true
      text = "Height of page (top to bottom)"
      borderStyle = 10        // Etched Out
   endwith

   this.FINDEF = new ENTRYFIELD(this)
   with (this.FINDEF)
      height = 22.0
      left = 98.0
      top = 40.0
      width = 194.0
      value = ""
   endwith

   this.TEXT12 = new TEXT(this)
   with (this.TEXT12)
      height = 16.0
      left = 60.0
      top = 42.0
      width = 31.0
      alignHorizontal = 2        // Right
      text = "Find: "
   endwith

   this.FINDBTN = new PUSHBUTTON(this)
   with (this.FINDBTN)
      onClick = class::FINDBTN_ONCLICK
      height = 30.0
      left = 293.0
      top = 36.0
      width = 107.0
      text = "Find Label"
      upBitmap = "RESOURCE #858"
   endwith

   this.rowset = this.labe00091.rowset

   function FINDBTN_onClick
      if empty( form.FindEF.value )
         form.FindEF.setFocus()
         return
      endif

      local cFind
      cFind = form.FindEF.value.rightTrim()
      form.rowset.locateOptions := 3 // ignore case/length
      if not form.rowset.applyLocate( [description=']+cFind+['] )
         msgbox( "Label not found!",;
                 "Not found!", 16 )
      endif
   return

   function Form_OnOpen
      form.MetricArray = new Array()
      form.MetricArray.add( "Twips" )
      form.MetricArray.add( "Points" )
      form.MetricArray.add( "Inches" )
      form.MetricArray.add( "Centimeters" )
      form.MetricArray.add( "Millimeters" )
      form.MetricArray.add( "Pixels" )
      form.MetricCombobox.dataSource = "ARRAY form.MetricArray"
      class::UpdateCombo()
      form.FINDEF.setFocus()
   return

   function UpdateCombo
      // make sure that the value in the rowset
      // is what's appearing in the combobox (morph!):
      n = form.rowset.fields["metric"].value
      form.MetricCombobox.value := form.metricArray[ n ]
   return

   function updateMetric
      // called from save
      // find it:
      n = form.MetricArray.scan( form.MetricCombobox.value )
      form.rowset.fields["metric"].value = n
   return

   function Save_OnClick
      CLASS::UpdateMetric()
      this.form.rowset.save()
   return

endclass