Page 1 of 1

define columncontrols runtime

Posted: Tue Jan 16, 2018 12:42 pm
by mlnr
Hi,

I would like to solve the following.

There are products in a grid. (name, quantity)
These products have a certain feature that specifies, that only integers or even fractions can be given as an amount.

e.g.
item1 3.6 (kg)
item2 5 (pieces-only integer)
item3 7 (pieces-only integer)
item4 0.2 (kg)
...
etc.

Code: Select all

//if kg
COLUMNCONTROLS { { 'TEXTBOX', 'CHARACTER'}, { 'TEXTBOX','NUMERIC','99999.99','E'}}                   
//if pcs
COLUMNCONTROLS { { 'TEXTBOX', 'CHARACTER'}, { 'TEXTBOX','NUMERIC','99999'}}                   
How can i define this line by line?

Thank you in advance.

Re: define columncontrols runtime

Posted: Tue Jan 16, 2018 12:55 pm
by mol
It's impossible in my opinion.
You can use virtual grid in which you can mix everything.

Re: define columncontrols runtime

Posted: Tue Jan 16, 2018 2:03 pm
by Rathinagiri
Yes, it is possible I think.

It is done somewhere else in the forum. I will also search.

Re: define columncontrols runtime

Posted: Tue Jan 16, 2018 2:12 pm
by edk
I can do it, for example, in this way:

Code: Select all

#include "hmg.ch"
Function Main()

select 1
Use ptvartic Alias Articulos

aCtrl_1 := {'TEXTBOX','CHARACTER'}
aCtrl_2 := {'TEXTBOX','CHARACTER'}
aCtrl_3 := {'TEXTBOX','CHARACTER'}
aCtrl_4 := {'TEXTBOX','NUMERIC','9999999999'}

DEFINE WINDOW Form_1 ;
	AT 0,0 ;
	WIDTH 522 HEIGHT 540 ;
	TITLE "Products in the Stock" ;
	FONT "Segoe UI" SIZE 09 ;
	MAIN NOSIZE ;
	ON RELEASE DbCloseAll()
					
	@ 10, 10 GRID Grid_1	;
		WIDTH 495	;
		HEIGHT 490 	;	
		HEADERS { "Code", "Description", "Unit", "In Stock" } ;
		WIDTHS { 55, 290, 50, 90 }	;
		EDIT ;
		VALUE {9,2} ;
		COLUMNCONTROLS { aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 } ;
		FONT "Segoe UI" SIZE 09 ;
		BACKCOLOR { 244,244,244 } ;
		ROWSOURCE "Articulos" ;
		COLUMNFIELDS { "Articulos->f_cve_art", "Articulos->f_nomb_art", "Articulos->UNIT", "Articulos->Q" } ;
		COLUMNWHEN { { || .T. } ,  { || .T. } , { || .T. } ,  { || chkkg() }  } ;
		NOLINES ;
		JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_RIGHT }
		
END WINDOW
Form_1.Grid_1.SETFOCUS
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return Nil


FUNCTION chkkg()
Local idx:=_HMG_SYSDATA [ 203 ]
Local aCtrl_1 := {'TEXTBOX','CHARACTER'}
Local aCtrl_2 := {'TEXTBOX','CHARACTER'}
Local aCtrl_3 := {'TEXTBOX','CHARACTER'}
Local aCtrl_4, aControls

IF Form_1.Grid_1.CellEx( Form_1.Grid_1.CellRowFocused , 3 )#'kg'
	aCtrl_4 := {'TEXTBOX','NUMERIC','9999999999'}
ELSE
	aCtrl_4 := {'TEXTBOX','NUMERIC','999999.999','E'}
ENDIF
aControls:={ aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 } 
_HMG_SYSDATA [ 40 ] [idx] [ 2 ] := aControls
RETURN .T.


Re: define columncontrols runtime

Posted: Tue Jan 16, 2018 2:32 pm
by mlnr
Thank you guys for your answers.

Edward, your code is perfect for me. :)

Thanks again

Re: define columncontrols runtime

Posted: Tue Jan 16, 2018 2:48 pm
by mol
Wow!
Nice sample!
I don't like to modify _HMG_SYSDATA.

What does letter E in {'TEXTBOX','NUMERIC','999999.999','E'}

Re: define columncontrols runtime

Posted: Tue Jan 16, 2018 2:58 pm
by edk
mol wrote: Tue Jan 16, 2018 2:48 pm What does letter E in {'TEXTBOX','NUMERIC','999999.999','E'}
TextBox control
Format String (Allowed in Numeric Textbox Only):
C : Displays CR after positive numbers
X : Displays DB after negative numbers
( : Encloses negative numbers in parentheses
E : Displays numbers in British format

http://www.hmgforum.com/hmgdoc/data/format.htm