Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
How To Programmatically set column widths in dynamic gri
Message
De
14/08/2002 10:37:26
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00689312
Message ID:
00689563
Vues:
21
Thanks Nadya,

I had it working using ideas from Jayesh, but your example laid it all out perfectly so I could see it clearly. I used a modified version of it in my app (with credit to you of course) since I do not have the same classes you use in it.

Tracy

>Too bad, my Browser didn't refresh earlier:
>
>********************************************************************
>*  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 06/12/2002 12:39:18 PM
>********************************************************************
>local loColumn, loControl, lnWidthTotal, lnSel,  ;
>	lnFWidth, lnCWidth, lcFieldName, lcFieldType, lcCaption, lcTestName, ;
>	lcDBC, lcHdrFontStyle, lcFontStyle
>lnSel=select() && save current area
>store "" to lcHdrFontStyle, lcFontStyle
>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
>			with loColumn
>				.removeobject('Header1')
>				.newobject('Header1','MyHeader','MyHeader.prg',,m.lcCaption) && custom header
>				lcHdrFontStyle = iif(.Header1.fontbold,"B","") + ;
>					iif(.Header1.fontitalic,"I","")+ ;
>					iif(.Header1.fontstrikethru,"-","")+ ;
>					iif(.Header1.fontunderline,"U","")
>				lcFontStyle = iif(.fontbold,"B","") + ;
>					iif(.fontitalic,"I","")+ ;
>					iif(.fontstrikethru,"-","")+ ;
>					iif(.fontunderline,"U","")
>				lnCWidth=(txtwidth(.Header1.caption,.Header1.fontname,.Header1.fontsize, m.lcHdrFontStyle)+2) * ;
>					fontmetric(6,.Header1.fontname,.Header1.fontsize, m.lcHdrFontStyle)+3 && Width of caption
>
>				.width=round(max(m.lnFWidth*fontmetric(6,.fontname,.fontsize, m.lcFontStyle),m.lnCWidth),0)
>				lnWidthTotal=m.lnWidthTotal+loColumn.width
>
>				if m.lcFieldType='L' && Logical field
>					if lower(.currentcontrol)='text1' && standard text1 control
>						.removeobject('text1')
>						.newobject('check1','wgcheckbox','wgcontrols.vcx') && CheckBox
>						.check1.caption = ''
>						.sparse = .t.
>						.check1.visible=.t.
>					endif
>				endif
>
>** Nadya Nosonovsky 03/29/2000 01:35:47 PM added Incremental Search (could be added for ReadOnly grid)
>				if this.lIncremental and m.lcFieldType='C' && We would use this feature only for charStyle fields
>					if lower(.currentcontrol)='text1' && standard text1 control
>						.removeobject('text1')
>						if lower(m.lcFieldName)='code' and tagno('code')> 0 and ;
>								(candidate(tagno('code')) or primary(tagno('code'))) && should be unique
>							.newobject('text1','nnIngrid','fields_controls.vcx') && Incremental search textbox, which is also unique
>							thisform.lCheck=.t. && Code value should be unique
>							.text1.pcFields='code'
>							.text1.pcValidTag='code'
>							.text1.cSeekTag='code'
>						else
>							.newobject('text1','ingrid','wgcontrols.vcx') && Incremental search textbox
>							.text1.cLocateExpression='upper('+m.lcFieldName+')'
>						endif
>						.text1.visible=.t.
>					endif
>				endif
>
>*  Nadya Nosonovsky 03/29/2000 01:36:17 PM added Show Memo
>				if this.lShowMemo and m.lcFieldType='M' && We want to show Memo field
>					if lower(.currentcontrol)='text1' && standard text1 control
>						.removeobject('text1')
>						.newobject('text1','edtexpand','wgcontrols.vcx') && expandable editbox
>						.text1.visible=.t.
>						.sparse=.f.
>					endif
>				endif
>			endwith
>		endfor
>		.width=min(.width,m.lnWidthTotal)
>	endif
>endwith
>select (m.lnSel) && return to previous area
>
>>I have a form that has grid on it that is hidden until the user selects a table to view. The grid needs to be dynamic. When the user clicks on the command button to open a table, it creates a cursor from the selected table that is viewed in the grid. Everything works fine except that I want to be able to determine if the columns in the grid are not as wide as column's captions to adjust the column width at least to that width if not wider. Any ideas? I know I need to step through the properties of the grid and check the current column width against the len of the caption, but how to do that? In general, how to create a better looking dynamic grid?
>>
>>TIA,
>>Tracy
.·*´¨)
.·`TCH
(..·*

010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform