Page 1 of 1
VALID in ADD COLUMN don't work.
Posted: Mon Nov 20, 2006 5:12 pm
by biro2000
Hi,
I'm using Fivewin 2.7 for Harbour - April 2006 release + xHarbour Builder - October 2006 release + WinXP.
The problem is:
I got this code on Fivewin Samples Folder and changed last line.
ADD COLUMN TO BROWSE oBrw ;
DATA FieldWBlock("BAKIYE", Select("Stok")) ;
HEADER "Bakiye" ;
PICTURE "###,###.##" ;
EDITABLE ;
WIDTH 70 PIXELS ;
VALID {|o| MyFunction( o:varGet() ) }
When MyFunction() returns FALSE, the browse advances to the next field or get and it should stay in the same get.
The same code, when compiled in Clipper 5.2e + Fivewin 2.4 works fine!
I tried this way too:
VALID IF MyFunction( o )
But the problem persist!
Thank's
Luciano
Posted: Mon Nov 20, 2006 5:23 pm
by Armando
Luciano:
pls try this way
oBrw:aColumns[ 1 ]:bValid := { | uVar | MyFunction(uVar) }
Best regards, Armando
VALID in ADD COLUMN don't work.
Posted: Mon Nov 20, 2006 5:42 pm
by biro2000
Armando,
Thank you for your help.
I tried your sugestion
oBrw:aColumns[ 1 ]:bValid := { | uVar | MyFunction(uVar) }
But the problem happened again.
Have you any other idea?
Thank's
Posted: Mon Nov 20, 2006 6:41 pm
by Armando
Luciano:
it woks fine to me, perhaps the problem is in your valid FUNCTION
Pls, show a little part of you code. (Column code and valid function)
Regards
Posted: Wed Nov 22, 2006 12:10 pm
by biro2000
Armando,
I am using a piece of \FWH\Samples\TestTcBr.prg as example. I just changed:
ADD COLUMN TO BROWSE oBrw ;
DATA FieldWBlock("BAKIYE", Select("Stok")) ;
HEADER "Bakiye" ;
PICTURE "###,###.##" ;
EDITABLE ;
WIDTH 70 PIXELS ;
VALID {|o| MyFunction( o:varGet() ) }
My code is:
#include "fivewin.ch"
#include "TCBrowse.ch"
// always put TCBrowse.ch AFTER filewin.ch
Static MainWnd
Function Main()
Local hBWCC
Set Date Format "dd/mm/yyyy"
SET _3DLOOK ON
hBWCC := LoadLibrary( "BWCC32.DLL" )
SET RESOURCES TO "TCBR32.DLL" // Our stored screens
BWCCRegister( GetResources() )
DEFINE WINDOW MainWnd FROM 1, 1 TO 22, 75 ;
TITLE "Test SAMPLE TESTCBR.PRG 08/11/2006" ;
MENU BuildMenu()
SET MESSAGE OF MainWnd TO "Great idea by Salim Anter" CENTERED
USE Stok
IF ! ( File("StokName.NTX") .and. File("MaliYet.NTX") )
INDEX ON Stok->MaliYet TO MaliYet
INDEX ON Stok->StokName TO StokName
ELSE
SET INDEX TO StokName, MaliYet
ENDIF
ACTIVATE WINDOW MainWnd MAXIMIZED
SET RESOURCES TO
Return( NIL )
Function BuildMenu
local oMenu
MENU oMenu
MENUITEM OemToAnsi( "&Create" ) ;
ACTION NewBrowse( )
ENDMENU
Return( oMenu )
#define OBM_CLOSE 32754
#define OBM_UPARROW 32753
#define OBM_DNARROW 32752
#define OBM_CHECKBOXES 32759
#define OBM_CHECK 32760
#define OCR_NORMAL 32512
#define OCR_CROSS 32515
Function NewBrowse( )
Static aX
Local oDlg, oBrw, oCol, oFont, oSay
Local _hOn := LoadBitMap(0, OBM_CHECK) // Use OEM system resources
Local _hOff := Chr(160) // This will be treated as if it were bitmap
if aX == nil
aX := Array(3)
aX[1] := LoadBitMap( GetResources(), "Z_Green_X")
aX[2] := LoadBitMap( GetResources(), "Z_Red_X")
aX[3] := LoadBitMap( GetResources(), "Z_Blank")
endif
DEFINE FONT oFont NAME "System" SIZE 8, 16 BOLD // 6, 15
DEFINE DIALOG oDlg of MainWnd NAME "Aktivite"
REDEFINE BROWSE oBrw ID 999 OF oDlg ;
MESSAGE "You may open multi-copies, DblCkick to edit, "+ ;
"1st column frozen" FONT oFont ;
ON RIGHT CLICK MsgInfo( "RightClick" ) ;
ON CHANGE MsgBeep()
oBrw:lLogicDrop := .t. // use crazy logic dropbox
oBrw:lNoHScroll := .t. // don't use that pesky horiz scroll bar
oBrw:nAdjColumn := 3 // expand this column to flush table right
oBrw:nFreeze := 3 // 0 disables freezing 1 is leftmost
oBrw:hBmpCursor := LoadBitmap( GetResources(), "Z_Triangle" )
oBrw:bLDblClick := { | nRow, nCol | EditCell( oBrw, nRow, nCol ) }
ADD COLUMN TO oBrw DATA "" SIZE 15 // blank cursor colm
//ADD COLUMN TO oBrw NOBAR ;
// BITMAP DATA If ( Stok->FATURA > Stok->BAKIYE , aX[1] , ;
// If ( Stok -> FATURA < Stok->BAKIYE , aX[2], aX[3] ) )
//ADD COLUMN TO BROWSE oBrw ;
// DATA OemToAnsi( Stok ->STOKNAME ) TAG StokName ;
// HEADER "Stok" SIZE 100
ADD COLUMN TO BROWSE oBrw ;
DATA FieldWBlock("BAKIYE", Select("Stok")) ; // we can edit it
HEADER "Bakiye" OEM ALIGN RIGHT ;
PICTURE "###,###.##" EDITABLE WIDTH 70 PIXELS ;
COLOR If( Stok->BAKIYE < 0, CLR_RED, CLR_BLACK), {||CLR_GREEN } ;
MESSAGE "Enter a negative number" ;
VALID {|o| MyFunction( o:varGet() ) }
ERROR MESSAGE "Value must be"+CRLF+"positive or 0"
ADD COLUMN TO BROWSE oBrw ;
DATA FieldWBlock("BAKIYE", Select("Stok")) ; // we can edit it
HEADER "Bakiye" OEM ALIGN RIGHT ;
PICTURE "###,###.##" EDITABLE WIDTH 70 PIXELS ;
COLOR If( Stok->BAKIYE < 0, CLR_RED, CLR_BLACK), {||CLR_GREEN } ;
MESSAGE "Enter a negative number" ;
VALID IF ValCampo( x ) ;
ERROR MESSAGE "Value must be"+CRLF+"positive or 0"
oBrw:AddColumn( TCColumn( ):New( OemToAnsi( "Fatura" ) , ;
FieldWBlock("Fatura", Select("Stok")), ;
"###,###.##" , nil, nil, DT_RIGHT, 90 , nil, .t.) )
DEFINE COLUMN oCol ;
DATA If ( Stok->FATURA > Stok->BAKIYE , _hOn , _hOff) BITMAP;
NOHILITE SIZE 15 COLOR "N/R" CENTER
oBrw:AddColumn( oCol )
//ADD COLUMN TO oBrw ALIGN RIGHT TAG "MaliYet" SIZE 100 ;
// DATA Stok -> MALIYET PICTURE "##,###,###" ;
// HEAD "Maliyet"
//ADD COLUMN TO oBrw ALIGN RIGHT ;
// HEAD "Ciro" DATA FieldBlock("CIRO") ;
// PICT "@Z #,###,###.##" SIZE 90 ;
// EDIT VALID {|o| o:varGet() < 0} ;
// MESSAGE "Current data causes lots of errors" ;
// ERROR MESSAGE "Value Must be"+CRLF+"Less than 0"
// ADD COLUMN TO BROWSE oBrw ;
// HEADER "Devirtarih" ALIGN CENTER ;
// DATA FieldBlock("Devirtarih") PICTURE "@D" EDIT
// ADD COLUMN TO oBrw TITLE "L" PICT "Y" SIZE 15 ;
// DATA Stok->FATURA > Stok->BAKIYE EDITABLE // but not savable
REDEFINE BUTTON ID IDOK OF oDlg ACTION oDlg:End( ) ;
MESSAGE "Get outta here"
REDEFINE SAY oSay VAR oBrw:cSeek ID 211 OF oDlg ;
COLORS CLR_WHITE, CLR_CYAN
oBrw:bSeekChange := {|| oSay:Refresh() }
REDEFINE BUTTON ID 101 OF oDlg ;
ACTION oBrw:SwitchCols(5, 9):Exchange(3, 6) ;
MESSAGE "Switch columns 5 and 9, exchange columns 3 and 6"
REDEFINE BUTTON ID 102 OF oDlg ;
ACTION ( If(oBrw:oCtx != Nil, oBrw:oCtx:Display(), nil ), ;
oBrw:SetFocus() ) MESSAGE "Display Context"
REDEFINE BUTTON ID 103 OF oDlg ;
ACTION oBrw:Report() ;
MESSAGE "Print a Report"
ACTIVATE DIALOG oDlg CENTERED NOWAIT
Return( NIL )
DLL FUNCTION BWCCRegister( hInst AS LONG ) AS LONG PASCAL ;
LIB "BWCC32.DLL"
procedure AppSys // XBase++ requirement
return
////////////////////////////////////////////////////////////////////////////////////
function MyFunction( valnum )
local retorno := .t.
if valnum >= 500
retorno := .t.
else
retorno := .f.
? "return: FALSE"
endif
return( retorno )
Thank you,
Luciano