Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Optimizing the width of text grid controls
Message
General information
Forum:
Visual FoxPro
Category:
Forms & Form designer
Miscellaneous
Thread ID:
00564807
Message ID:
00564818
Views:
17
>Is it possible to optimize the width of text grid controls in a program?
>
>The scenario is that I have a grid where there is just enough room on the screen to display each row using the existing maximum length of data contained in each field. For example, when displaying a product's data, I found the item with the longest description and manually sized the control accordingly. I followed the same procedure for other read only controls. As mentioned above, when completed, the row just fits on the screen without scrolling.
>However, the data is not static and I would like the controls to automatically resize themselves everytime the form is run.
>Is this practical? possible?
>TIA.

You can borrow some ideas from this code:
********************************************************************
*  Description.......: NNwgGrid.FormatAndSetCaption - format all grid columns and set caption to be in Proper format
*  Calling Samples...:
*  Parameter List....:
*  Created by........: Nadya Nosonovsky 03/09/2000 02:03:22 PM
*  Modified by.......: Nadya Nosonovsky 09/19/2001 12:31:13 PM
********************************************************************
local loColumn, loControl, lnWidthTotal, lnSel,  ;
     lnFWidth, lnCWidth, lcFieldName, lcFieldType, lcCaption, lcTestName, lcDBC
lnSel=select() && save current area
with this
     if .recordsourcetype = 1 or .recordsourcetype = 0 && Alias or table
          select (.recordsource)
          lnWidthTotal= iif(.recordmark, 10,0)+ iif(.scrollbars>1,sysmetric(5),0) ;
               + 2 * .gridlinewidth + iif(.deletemark, 10,0)+10 && record marker & vertical scroll bar+deletion mark
          for each loColumn in .columns
* -- For each column determine the width and use the correct caption.
* -- Display the caption via the proper() function.
               lcFieldName=justext(loColumn.controlsource)
               lcTestName=lower(juststem(dbf(alias()))+"."+m.lcFieldName)
               lcFieldType=type(m.lcFieldName)
               lnFWidth=iif(m.lcFieldType='D',13,iif(m.lcFieldType='T',28,fsize(m.lcFieldName)+3)) && Field size
               lcDBC = set('database')
               if !empty(m.lcDBC) and juststem(cursorgetprop('Database',.recordsource)) = m.lcDBC
                    lcCaption=dbgetprop(m.lcTestName,'field','caption')               
                   if empty(m.lcCaption)  && There is no DBC caption, Just use the Field name
                        lcCaption=proper(m.lcFieldName)
                   endif
              else
                   lcCaption=proper(m.lcFieldName)
              endif
               loColumn.removeobject('Header1')
               loColumn.newobject('Header1','MyHeader','MyHeader.prg',,m.lcCaption) && custom header
               lnCWidth=(txtwidth(loColumn.Header1.caption,loColumn.Header1.fontname,loColumn.Header1.fontsize)+2) * ;
                    fontmetric(6,loColumn.Header1.fontname,loColumn.Header1.fontsize)+3 && Width of caption
               loColumn.width=round(max(m.lnFWidth*fontmetric(6,loColumn.fontname,loColumn.fontsize),m.lnCWidth),0)
               lnWidthTotal=m.lnWidthTotal+loColumn.width

** Nadya Nosonovsky 03/29/2000 01:35:47 PM added Incremental Search (could be added for ReadOnly grid)

               if .lIncremental and m.lcFieldType='C' && We would use this feature only for char fields
                    if lower(loColumn.currentcontrol)='text1' && standard text1 control
                         loColumn.removeobject('text1')
                         if lower(m.lcFieldName)='code' and ;
                             (candidate(tagno('code')) or primary(tagno('code'))) && should be unique
                              loColumn.newobject('text1','nnIngrid','fields_controls.vcx') && Incremental search textbox
                              thisform.lCheck=.t. && Code value should be unique
                              loColumn.text1.pcFields='code'
                              loColumn.text1.pcValidTag='code'
                              loColumn.text1.cSeekTag='code'
                         else
                              loColumn.newobject('text1','ingrid','wgcontrols.vcx') && Incremental search textbox
                              loColumn.text1.cLocateExpression='upper('+m.lcFieldName+')'
                         endif
                         loColumn.text1.visible=.t.
                    endif
               endif

*  Nadya Nosonovsky 03/29/2000 01:36:17 PM added Show Memo
               if .lShowMemo and m.lcFieldType='M' && We want to show Memo field
                    if lower(loColumn.currentcontrol)='text1' && standard text1 control
                         loColumn.removeobject('text1')
                         loColumn.newobject('text1','edtexpand','wgcontrols.vcx') && expandable editbox
                         loColumn.text1.visible=.t.
                         loColumn.sparse=.f.
                    endif
               endif
          endfor
          .width=min(.width,m.lnWidthTotal)
     endif
endwith
select (m.lnSel) && return to previous area
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform