For Programmers: Free Programming Magazines  


Home > Archive > Clipper > January 2005 > unresolved externals









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author unresolved externals
happy

2005-01-17, 8:55 pm

#include "setcurs.ch"
#include "INKEY.CH"
#define ALIAS 1
#define BOXTOP 2
#define BOXLEFT 3
#define BOXBOTTOM 4
#define BOXRIGHT 5
#define BOXTYPE 6
#define BOXBORDER 7
#define BOXINCOLOR 8
STATIC nMaxCol // before MAIN




PROCEDURE MAIN
*---------------
Local aoBrowse:=3Darray(5)
LOCAL nBP

local OTB1,OTB2,OTB3,OTB4
local OCOL



DBUSEAREA(.T.,, "METER","METER" ,.T.)

INDEX ON (STR(Me_cu_acct,10)+STR(YEAR,4)) TO METERUNI unique
CLOSE INDEX

INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER1 FOR MONTH =3D 2
CLOSE INDEX

INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER2 FOR MONTH =3D 3
CLOSE INDEX

INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER3 FOR MONTH =3D 4
CLOSE INDEX

close all

// open database files
DBUSEAREA(.T.,, "METER","METER" ,.T.)
SET INDEX TO METERUNI,METER1,METER2,METER3
SET ORDER TO 1
DBUSEAREA(.T.,, "METER","METER1",.T.)
SET INDEX TO METERUNI,METER1,METER2,METER3
SET ORDER TO 2
DBUSEAREA(.T.,, "METER","METER2",.T.)
SET INDEX TO METERUNI,METER1,METER2,METER3
SET ORDER TO 3
DBUSEAREA(.T.,, "METER","METER3",.T.)
SET INDEX TO METERUNI,METER1,METER2,METER3
SET ORDER TO 4

SELECT METER

SET RELATION TO STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO
METER1,;
STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO METER2,;
STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO METER3

oBrowse :=3D TBrowseDB( 1, 2, 23, 39)
// define default column attributes
oBrowse:colSep :=3D " =B3 "
oBrowse:headSep :=3D "?A?"
oBrowse:footSep :=3D ""
oBrowse:colorSpec :=3D "W+/BG,N/W"
oBrowse:autoLite :=3D .F.
// store the work area in the cargo so we can do multiple browses
oBrowse:cargo :=3D {SELECT(), 0, 1, 24, 40, "???=B3U?A=B3", "W+/BG",
"W+/BG"}

OTB1 :=3D TBrowseDB( 1, 41, 10, 51)
OCOL:=3DTBCOLUMNNEW(' Charge all',fieldblock('meter->charge'))
OTB1:ADDCOLUMN(OCOL)

OTB2 :=3D TBrowseDB( 12, 41, 22, 51)
OCOL:=3DTBCOLUMNNEW(' Charge M#1',fieldblock('meter1->charge'))
OTB2:ADDCOLUMN(OCOL)

OTB3 :=3D TBrowseDB( 24, 41, 34, 51)
OCOL:=3DTBCOLUMNNEW(' Charge M#2',fieldblock('meter2->charge'))
OTB3:ADDCOLUMN(OCOL)

OTB4 :=3D TBrowseDB( 36, 41, 46, 51)
OCOL:=3DTBCOLUMNNEW(' Charge M#3',fieldblock('meter3->charge'))
OTB4:ADDCOLUMN(OCOL)



OTB2:skipBlock :=3D {|x| GoNext(x,
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
STR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
OTB2:goTopBlock :=3D {|| GoTop(
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
STR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
OTB2:goBottomBlock :=3D {|| GoBottom(
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
=3DSTR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }

OTB3:skipBlock :=3D {|x| GoNext(x,
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
STR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
OTB3:goTopBlock :=3D {|| GoTop(
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
STR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
OTB3:goBottomBlock :=3D {|| GoBottom(
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
=3DSTR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }

OTB4:skipBlock :=3D {|x| GoNext(x,
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
STR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
OTB4:goTopBlock :=3D {|| GoTop(
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
STR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
OTB4:goBottomBlock :=3D {|| GoBottom(
{||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
=3DSTR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }




DISPBEGIN()
CLEAR SCREEN



// set up browse and display it

aoBrowse[1] :=3D Obrowse
aoBrowse[1]:goTop()
DispBrowse(aoBrowse[1])

aoBrowse[2] :=3D OTB1
aoBrowse[2]:goTop()
DispBrowse(aoBrowse[2])


// set up browse and display it
aoBrowse[3] :=3D OTB2
aoBrowse[3]:goTop()
DispBrowse(aoBrowse[3])


// set up browse and display it
aoBrowse[4] :=3D OTB3
aoBrowse[4]:goTop()
DispBrowse(aoBrowse[4])


// set up browse and display it
aoBrowse[5] :=3D OTB4
aoBrowse[5]:goTop()
DispBrowse(aoBrowse[5])


DISPEND() // end display buffering
// turn cursor off while browsing
nCursSave :=3D SETCURSOR(SC_NONE)
// save into STATIC

nMaxCol :=3D LEN(aoBrowse)
// set browse pointer to first browse defined
nBP :=3D 1
DispBrowse(aoBrowse[nBP])
// main browse display loop
lMore :=3D .T.
DO WHILE lMore


nKey :=3D 0
// Stabilize the browse until it's stable or a key is pressed
DO WHILE (nKey :=3D INKEY()) =3D=3D 0 .AND. !aoBrowse[nBP]:stabilize()
ENDDO
IF aoBrowse[nBP]:stable
// alert if hit top or bottom of browse
IF aoBrowse[nBP]:hitTop .OR. aoBrowse[nBP]:hitBottom
TONE(125, 0)
ENDIF
// update other browse screens in case relations are set
DrawAll(aoBrowse, nBP)
aoBrowse[nBP]:hilite()
// Get a new keystroke
nKey :=3D INKEY(0)
ENDIF
// Apply the key to the browse
lMore :=3D ApplyKey(aoBrowse, nKey, @nBP)
ENDDO
// restore original cursor
SETCURSOR(nCursSave)
// restore original user screen
SETMODE(nSaveRow, 80)
RESTSCREEN(0, 0, MAXROW(), MAXCOL(), cSaveScr)
SETPOS(nSaveRow, 0)
RETURN (NIL)


**** eof ****


//to move cursor right/left :


**** snip ****
DO CASE
*CASE ....
CASE nKey =3D=3D K_F4 // left
nBP--
IF(nBP<1,nBP:=3DnMaxCol,NIL)


CASE nKey =3D=3D K_F5 // right
nBP++
IF(nBP>nMaxCol,nBP:=3D1,NIL)
ENDCASE


FUNCTION DrawAll(aoBrowse,nBP)
*---------------------------------
LOCAL n
SETCOLOR("W/N")
DISPBEGIN()
CLEAR SCREEN
FOR n :=3D 1 TO LEN(aoBrowse)
DispBrowse(aoBrowse[n])
NEXT
DispBrowse(aoBrowse[nBP])
DISPEND()
RETURN (NIL)


// Display the browse screen
FUNCTION DispBrowse(oBrowse)
*------------------------------
// select the database for this browse
SELECT (oBrowse:cargo[ALIAS])
DISPBEGIN()
// clear old screen area
@ oBrowse:cargo[BOXTOP], oBrowse:cargo[BOXLEFT] CLEAR TO;
oBrowse:cargo[BOXBOTTOM], oBrowse:cargo[BOXRIGHT]


// display the browse box
DISPBOX(oBrowse:cargo[BOXTOP], oBrowse:cargo[BOXLEFT],;
oBrowse:cargo[BOXBOTTOM], oBrowse:cargo[BOXRIGHT],;
oBrowse:cargo[BOXTYPE], oBrowse:cargo[BOXBORDER])


// refresh browse so all data is redisplayed in the box
oBrowse:refreshAll()
ForceStable(oBrowse)
DISPEND()
RETURN (NIL)



STATIC FUNCTION GoNext(nToSkip, bWhileCond )
*--------------------------------------
LOCAL nSkipped :=3D 0, nDirection
nDirection :=3D IIF(nToSkip > 0, 1, -1)
DO WHILE nSkipped !=3D nToSkip .AND. EVAL(bWhileCond) .AND. ;
!EOF() .AND. !BOF()
SKIP nDirection
nSkipped +=3D nDirection
ENDDO
IF EOF()
SKIP -1
nSkipped--
ELSEIF BOF()
GOTO RECNO()
nSkipped++
ELSEIF !EVAL(bWhileCond)
SKIP -nDirection
nSkipped +=3D -nDirection
ENDIF
RETURN nSkipped

STATIC FUNCTION GoTop( bWhileCond )
*--------------------------------------
WHILE EVAL( bWhileCond ) .AND. !BOF()
SKIP -1
IF !EVAL( bWhileCond )
SKIP
EXIT
ENDIF
END
RETURN (NIL)


STATIC FUNCTION GoBottom( bWhileCond )
*--------------------------------------
WHILE EVAL( bWhileCond ) .AND. !EOF()
SKIP
END
// We always skip 1 too far, so skip back
SKIP -1
RETURN (NIL)

Mike

2005-01-18, 3:55 am


happy wrote:
> #include "setcurs.ch"
> #include "INKEY.CH"
> #define ALIAS 1
> #define BOXTOP 2
> #define BOXLEFT 3
> #define BOXBOTTOM 4
> #define BOXRIGHT 5
> #define BOXTYPE 6
> #define BOXBORDER 7
> #define BOXINCOLOR 8
> STATIC nMaxCol // before MAIN
>
>
>
>
> PROCEDURE MAIN
> *---------------
> Local aoBrowse:=3Darray(5)
> LOCAL nBP
>
> local OTB1,OTB2,OTB3,OTB4
> local OCOL
>
>
>
> DBUSEAREA(.T.,, "METER","METER" ,.T.)
>
> INDEX ON (STR(Me_cu_acct,10)+STR(YEAR,4)) TO METERUNI unique
> CLOSE INDEX
>
> INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER1 FOR MONTH =3D 2
> CLOSE INDEX
>
> INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER2 FOR MONTH =3D 3
> CLOSE INDEX
>
> INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER3 FOR MONTH =3D 4
> CLOSE INDEX
>
> close all
>
> // open database files
> DBUSEAREA(.T.,, "METER","METER" ,.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 1
> DBUSEAREA(.T.,, "METER","METER1",.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 2
> DBUSEAREA(.T.,, "METER","METER2",.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 3
> DBUSEAREA(.T.,, "METER","METER3",.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 4
>
> SELECT METER
>
> SET RELATION TO STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO
> METER1,;
> STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO METER2,;
> STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO METER3
>
> oBrowse :=3D TBrowseDB( 1, 2, 23, 39)
> // define default column attributes
> oBrowse:colSep :=3D " =B3 "
> oBrowse:headSep :=3D "?A?"
> oBrowse:footSep :=3D ""
> oBrowse:colorSpec :=3D "W+/BG,N/W"
> oBrowse:autoLite :=3D .F.
> // store the work area in the cargo so we can do multiple browses
> oBrowse:cargo :=3D {SELECT(), 0, 1, 24, 40, "???=B3U?A=B3", "W+/BG",
> "W+/BG"}
>
> OTB1 :=3D TBrowseDB( 1, 41, 10, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge all',fieldblock('meter->charge'))
> OTB1:ADDCOLUMN(OCOL)
>
> OTB2 :=3D TBrowseDB( 12, 41, 22, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge M#1',fieldblock('meter1->charge'))
> OTB2:ADDCOLUMN(OCOL)
>
> OTB3 :=3D TBrowseDB( 24, 41, 34, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge M#2',fieldblock('meter2->charge'))
> OTB3:ADDCOLUMN(OCOL)
>
> OTB4 :=3D TBrowseDB( 36, 41, 46, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge M#3',fieldblock('meter3->charge'))
> OTB4:ADDCOLUMN(OCOL)
>
>
>
> OTB2:skipBlock :=3D {|x| GoNext(x,
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
> OTB2:goTopBlock :=3D {|| GoTop(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
> OTB2:goBottomBlock :=3D {|| GoBottom(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
> =3DSTR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
>
> OTB3:skipBlock :=3D {|x| GoNext(x,
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
> OTB3:goTopBlock :=3D {|| GoTop(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
> OTB3:goBottomBlock :=3D {|| GoBottom(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
> =3DSTR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
>
> OTB4:skipBlock :=3D {|x| GoNext(x,
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
> OTB4:goTopBlock :=3D {|| GoTop(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
> OTB4:goBottomBlock :=3D {|| GoBottom(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
> =3DSTR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
>
>
>
>
> DISPBEGIN()
> CLEAR SCREEN
>
>
>
> // set up browse and display it
>
> aoBrowse[1] :=3D Obrowse
> aoBrowse[1]:goTop()
> DispBrowse(aoBrowse[1])
>
> aoBrowse[2] :=3D OTB1
> aoBrowse[2]:goTop()
> DispBrowse(aoBrowse[2])
>
>
> // set up browse and display it
> aoBrowse[3] :=3D OTB2
> aoBrowse[3]:goTop()
> DispBrowse(aoBrowse[3])
>
>
> // set up browse and display it
> aoBrowse[4] :=3D OTB3
> aoBrowse[4]:goTop()
> DispBrowse(aoBrowse[4])
>
>
> // set up browse and display it
> aoBrowse[5] :=3D OTB4
> aoBrowse[5]:goTop()
> DispBrowse(aoBrowse[5])
>
>
> DISPEND() // end display buffering
> // turn cursor off while browsing
> nCursSave :=3D SETCURSOR(SC_NONE)
> // save into STATIC
>
> nMaxCol :=3D LEN(aoBrowse)
> // set browse pointer to first browse defined
> nBP :=3D 1
> DispBrowse(aoBrowse[nBP])
> // main browse display loop
> lMore :=3D .T.
> DO WHILE lMore
>
>
> nKey :=3D 0
> // Stabilize the browse until it's stable or a key is pressed
> DO WHILE (nKey :=3D INKEY()) =3D=3D 0 .AND. !aoBrowse[nBP]:stabilize()
> ENDDO
> IF aoBrowse[nBP]:stable
> // alert if hit top or bottom of browse
> IF aoBrowse[nBP]:hitTop .OR. aoBrowse[nBP]:hitBottom
> TONE(125, 0)
> ENDIF
> // update other browse screens in case relations are set
> DrawAll(aoBrowse, nBP)
> aoBrowse[nBP]:hilite()
> // Get a new keystroke
> nKey :=3D INKEY(0)
> ENDIF
> // Apply the key to the browse
> lMore :=3D ApplyKey(aoBrowse, nKey, @nBP)
> ENDDO
> // restore original cursor
> SETCURSOR(nCursSave)
> // restore original user screen
> SETMODE(nSaveRow, 80)
> RESTSCREEN(0, 0, MAXROW(), MAXCOL(), cSaveScr)
> SETPOS(nSaveRow, 0)
> RETURN (NIL)
>
>
> **** eof ****
>
>
> //to move cursor right/left :
>
>
> **** snip ****
> DO CASE
> *CASE ....
> CASE nKey =3D=3D K_F4 // left
> nBP--
> IF(nBP<1,nBP:=3DnMaxCol,NIL)
>
>
> CASE nKey =3D=3D K_F5 // right
> nBP++
> IF(nBP>nMaxCol,nBP:=3D1,NIL)
> ENDCASE
>
>
> FUNCTION DrawAll(aoBrowse,nBP)
> *---------------------------------
> LOCAL n
> SETCOLOR("W/N")
> DISPBEGIN()
> CLEAR SCREEN
> FOR n :=3D 1 TO LEN(aoBrowse)
> DispBrowse(aoBrowse[n])
> NEXT
> DispBrowse(aoBrowse[nBP])
> DISPEND()
> RETURN (NIL)
>
>
> // Display the browse screen
> FUNCTION DispBrowse(oBrowse)
> *------------------------------
> // select the database for this browse
> SELECT (oBrowse:cargo[ALIAS])
> DISPBEGIN()
> // clear old screen area
> @ oBrowse:cargo[BOXTOP], oBrowse:cargo[BOXLEFT] CLEAR TO;
> oBrowse:cargo[BOXBOTTOM], oBrowse:cargo[BOXRIGHT]
>
>
> // display the browse box
> DISPBOX(oBrowse:cargo[BOXTOP], oBrowse:cargo[BOXLEFT],;
> oBrowse:cargo[BOXBOTTOM], oBrowse:cargo[BOXRIGHT],;
> oBrowse:cargo[BOXTYPE], oBrowse:cargo[BOXBORDER])
>
>
> // refresh browse so all data is redisplayed in the box
> oBrowse:refreshAll()
> ForceStable(oBrowse)
> DISPEND()
> RETURN (NIL)
>
>
>
> STATIC FUNCTION GoNext(nToSkip, bWhileCond )
> *--------------------------------------
> LOCAL nSkipped :=3D 0, nDirection
> nDirection :=3D IIF(nToSkip > 0, 1, -1)
> DO WHILE nSkipped !=3D nToSkip .AND. EVAL(bWhileCond) .AND. ;
> !EOF() .AND. !BOF()
> SKIP nDirection
> nSkipped +=3D nDirection
> ENDDO
> IF EOF()
> SKIP -1
> nSkipped--
> ELSEIF BOF()
> GOTO RECNO()
> nSkipped++
> ELSEIF !EVAL(bWhileCond)
> SKIP -nDirection
> nSkipped +=3D -nDirection
> ENDIF
> RETURN nSkipped
>
> STATIC FUNCTION GoTop( bWhileCond )
> *--------------------------------------
> WHILE EVAL( bWhileCond ) .AND. !BOF()
> SKIP -1
> IF !EVAL( bWhileCond )
> SKIP
> EXIT
> ENDIF
> END
> RETURN (NIL)
>
>
> STATIC FUNCTION GoBottom( bWhileCond )
> *--------------------------------------
> WHILE EVAL( bWhileCond ) .AND. !EOF()
> SKIP
> END
> // We always skip 1 too far, so skip back
> SKIP -1
> RETURN (NIL)


Ross McKenzie

2005-01-18, 3:55 am

On 17 Jan 2005 21:06:14 -0800, "Mike" <mgmurch@yahoo.com> wrote:
Mike,

>happy wrote:


300 lines .... did you really have to quote it all?

Ross
AUGE_OHR

2005-01-18, 3:55 pm


why do you post all source but do not say what "unresolved externals" ?

>// Apply the key to the browse
>lMore := ApplyKey(aoBrowse, nKey, @nBP)


this is the "standart" keyboard handler. nBP use @ -> per reference !

>ForceStable(oBrowse)


this is the "standart" full stabilization of the TBrowse.
DO WHILE .NOT. oBrowse:stabilize()
ENDDO

BUT, your code will crash again while you have not support oTBx:Cargo to
all 4 (not 5) oTBx.

greetings by OHR
Jimmy


Mike

2005-01-18, 3:55 pm


> 300 lines .... did you really have to quote it all?


No, you can thank Google for that.

My post (that did not display) was that Happy should quit using that
free crappy Clipper compiler that people have been emailing around. It
is the one that causes a lot of errors. The good one is at grafxsoft!
Mike

Ross McKenzie

2005-01-18, 8:55 pm

On 18 Jan 2005 08:12:18 -0800, "Mike" <mgmurch@yahoo.com> wrote:

>
>
>No, you can thank Google for that.
>
>My post (that did not display) was that Happy should quit using that
>free crappy Clipper compiler that people have been emailing around. It
>is the one that causes a lot of errors. The good one is at grafxsoft!
>Mike
>


Mike, I think that he should take up lawn bowls...he WILL be more
successful and we can get on with something more enjoyable <g>.

clipperace

2005-01-19, 3:58 pm


"Ross McKenzie" <NoJunk_valusoft@optushome.com.au> wrote in message
news:41ed835e.2160750@news...
> On 18 Jan 2005 08:12:18 -0800, "Mike" <mgmurch@yahoo.com> wrote:
>
>
> Mike, I think that he should take up lawn bowls...he WILL be more
> successful and we can get on with something more enjoyable <g>.
>


Hey guys:

He did warn us, right? {smile}

Mike


Mike

2005-01-20, 3:55 am


happy wrote:
> #include "setcurs.ch"
> #include "INKEY.CH"
> #define ALIAS 1
> #define BOXTOP 2
> #define BOXLEFT 3
> #define BOXBOTTOM 4
> #define BOXRIGHT 5
> #define BOXTYPE 6
> #define BOXBORDER 7
> #define BOXINCOLOR 8
> STATIC nMaxCol // before MAIN
>
>
>
>
> PROCEDURE MAIN
> *---------------
> Local aoBrowse:=3Darray(5)
> LOCAL nBP
>
> local OTB1,OTB2,OTB3,OTB4
> local OCOL
>
>
>
> DBUSEAREA(.T.,, "METER","METER" ,.T.)
>
> INDEX ON (STR(Me_cu_acct,10)+STR(YEAR,4)) TO METERUNI unique
> CLOSE INDEX
>
> INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER1 FOR MONTH =3D 2
> CLOSE INDEX
>
> INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER2 FOR MONTH =3D 3
> CLOSE INDEX
>
> INDEX ON STR(Me_cu_acct,10)+STR(YEAR,4) TO METER3 FOR MONTH =3D 4
> CLOSE INDEX
>
> close all
>
> // open database files
> DBUSEAREA(.T.,, "METER","METER" ,.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 1
> DBUSEAREA(.T.,, "METER","METER1",.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 2
> DBUSEAREA(.T.,, "METER","METER2",.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 3
> DBUSEAREA(.T.,, "METER","METER3",.T.)
> SET INDEX TO METERUNI,METER1,METER2,METER3
> SET ORDER TO 4
>
> SELECT METER
>
> SET RELATION TO STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO
> METER1,;
> STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO METER2,;
> STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) INTO METER3
>
> oBrowse :=3D TBrowseDB( 1, 2, 23, 39)
> // define default column attributes
> oBrowse:colSep :=3D " =B3 "
> oBrowse:headSep :=3D "?A?"
> oBrowse:footSep :=3D ""
> oBrowse:colorSpec :=3D "W+/BG,N/W"
> oBrowse:autoLite :=3D .F.
> // store the work area in the cargo so we can do multiple browses
> oBrowse:cargo :=3D {SELECT(), 0, 1, 24, 40, "???=B3U?A=B3", "W+/BG",
> "W+/BG"}
>
> OTB1 :=3D TBrowseDB( 1, 41, 10, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge all',fieldblock('meter->charge'))
> OTB1:ADDCOLUMN(OCOL)
>
> OTB2 :=3D TBrowseDB( 12, 41, 22, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge M#1',fieldblock('meter1->charge'))
> OTB2:ADDCOLUMN(OCOL)
>
> OTB3 :=3D TBrowseDB( 24, 41, 34, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge M#2',fieldblock('meter2->charge'))
> OTB3:ADDCOLUMN(OCOL)
>
> OTB4 :=3D TBrowseDB( 36, 41, 46, 51)
> OCOL:=3DTBCOLUMNNEW(' Charge M#3',fieldblock('meter3->charge'))
> OTB4:ADDCOLUMN(OCOL)
>
>
>
> OTB2:skipBlock :=3D {|x| GoNext(x,
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
> OTB2:goTopBlock :=3D {|| GoTop(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
> OTB2:goBottomBlock :=3D {|| GoBottom(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
> =3DSTR(METER1->ME_CU_ACCT,10)+STR(METER1->YEAR,4) } ) }
>
> OTB3:skipBlock :=3D {|x| GoNext(x,
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
> OTB3:goTopBlock :=3D {|| GoTop(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
> OTB3:goBottomBlock :=3D {|| GoBottom(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
> =3DSTR(METER2->ME_CU_ACCT,10)+STR(METER2->YEAR,4) } ) }
>
> OTB4:skipBlock :=3D {|x| GoNext(x,
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
> OTB4:goTopBlock :=3D {|| GoTop(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4) =3D
> STR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
> OTB4:goBottomBlock :=3D {|| GoBottom(
> {||STR(METER->ME_CU_ACCT,10)+STR(METER->YEAR,4)
> =3DSTR(METER3->ME_CU_ACCT,10)+STR(METER3->YEAR,4) } ) }
>
>
>
>
> DISPBEGIN()
> CLEAR SCREEN
>
>
>
> // set up browse and display it
>
> aoBrowse[1] :=3D Obrowse
> aoBrowse[1]:goTop()
> DispBrowse(aoBrowse[1])
>
> aoBrowse[2] :=3D OTB1
> aoBrowse[2]:goTop()
> DispBrowse(aoBrowse[2])
>
>
> // set up browse and display it
> aoBrowse[3] :=3D OTB2
> aoBrowse[3]:goTop()
> DispBrowse(aoBrowse[3])
>
>
> // set up browse and display it
> aoBrowse[4] :=3D OTB3
> aoBrowse[4]:goTop()
> DispBrowse(aoBrowse[4])
>
>
> // set up browse and display it
> aoBrowse[5] :=3D OTB4
> aoBrowse[5]:goTop()
> DispBrowse(aoBrowse[5])
>
>
> DISPEND() // end display buffering
> // turn cursor off while browsing
> nCursSave :=3D SETCURSOR(SC_NONE)
> // save into STATIC
>
> nMaxCol :=3D LEN(aoBrowse)
> // set browse pointer to first browse defined
> nBP :=3D 1
> DispBrowse(aoBrowse[nBP])
> // main browse display loop
> lMore :=3D .T.
> DO WHILE lMore
>
>
> nKey :=3D 0
> // Stabilize the browse until it's stable or a key is pressed
> DO WHILE (nKey :=3D INKEY()) =3D=3D 0 .AND. !aoBrowse[nBP]:stabilize()
> ENDDO
> IF aoBrowse[nBP]:stable
> // alert if hit top or bottom of browse
> IF aoBrowse[nBP]:hitTop .OR. aoBrowse[nBP]:hitBottom
> TONE(125, 0)
> ENDIF
> // update other browse screens in case relations are set
> DrawAll(aoBrowse, nBP)
> aoBrowse[nBP]:hilite()
> // Get a new keystroke
> nKey :=3D INKEY(0)
> ENDIF
> // Apply the key to the browse
> lMore :=3D ApplyKey(aoBrowse, nKey, @nBP)
> ENDDO
> // restore original cursor
> SETCURSOR(nCursSave)
> // restore original user screen
> SETMODE(nSaveRow, 80)
> RESTSCREEN(0, 0, MAXROW(), MAXCOL(), cSaveScr)
> SETPOS(nSaveRow, 0)
> RETURN (NIL)
>
>
> **** eof ****
>
>
> //to move cursor right/left :
>
>
> **** snip ****
> DO CASE
> *CASE ....
> CASE nKey =3D=3D K_F4 // left
> nBP--
> IF(nBP<1,nBP:=3DnMaxCol,NIL)
>
>
> CASE nKey =3D=3D K_F5 // right
> nBP++
> IF(nBP>nMaxCol,nBP:=3D1,NIL)
> ENDCASE
>
>
> FUNCTION DrawAll(aoBrowse,nBP)
> *---------------------------------
> LOCAL n
> SETCOLOR("W/N")
> DISPBEGIN()
> CLEAR SCREEN
> FOR n :=3D 1 TO LEN(aoBrowse)
> DispBrowse(aoBrowse[n])
> NEXT
> DispBrowse(aoBrowse[nBP])
> DISPEND()
> RETURN (NIL)
>
>
> // Display the browse screen
> FUNCTION DispBrowse(oBrowse)
> *------------------------------
> // select the database for this browse
> SELECT (oBrowse:cargo[ALIAS])
> DISPBEGIN()
> // clear old screen area
> @ oBrowse:cargo[BOXTOP], oBrowse:cargo[BOXLEFT] CLEAR TO;
> oBrowse:cargo[BOXBOTTOM], oBrowse:cargo[BOXRIGHT]
>
>
> // display the browse box
> DISPBOX(oBrowse:cargo[BOXTOP], oBrowse:cargo[BOXLEFT],;
> oBrowse:cargo[BOXBOTTOM], oBrowse:cargo[BOXRIGHT],;
> oBrowse:cargo[BOXTYPE], oBrowse:cargo[BOXBORDER])
>
>
> // refresh browse so all data is redisplayed in the box
> oBrowse:refreshAll()
> ForceStable(oBrowse)
> DISPEND()
> RETURN (NIL)
>
>
>
> STATIC FUNCTION GoNext(nToSkip, bWhileCond )
> *--------------------------------------
> LOCAL nSkipped :=3D 0, nDirection
> nDirection :=3D IIF(nToSkip > 0, 1, -1)
> DO WHILE nSkipped !=3D nToSkip .AND. EVAL(bWhileCond) .AND. ;
> !EOF() .AND. !BOF()
> SKIP nDirection
> nSkipped +=3D nDirection
> ENDDO
> IF EOF()
> SKIP -1
> nSkipped--
> ELSEIF BOF()
> GOTO RECNO()
> nSkipped++
> ELSEIF !EVAL(bWhileCond)
> SKIP -nDirection
> nSkipped +=3D -nDirection
> ENDIF
> RETURN nSkipped
>
> STATIC FUNCTION GoTop( bWhileCond )
> *--------------------------------------
> WHILE EVAL( bWhileCond ) .AND. !BOF()
> SKIP -1
> IF !EVAL( bWhileCond )
> SKIP
> EXIT
> ENDIF
> END
> RETURN (NIL)
>
>
> STATIC FUNCTION GoBottom( bWhileCond )
> *--------------------------------------
> WHILE EVAL( bWhileCond ) .AND. !EOF()
> SKIP
> END
> // We always skip 1 too far, so skip back
> SKIP -1
> RETURN (NIL)


AUGE_OHR

2005-01-20, 3:55 am


why do you post all source but do not say what "unresolved externals" ?

>// Apply the key to the browse
>lMore := ApplyKey(aoBrowse, nKey, @nBP)


this is the "standart" keyboard handler. nBP use @ -> per reference !

>ForceStable(oBrowse)


this is the "standart" full stabilization of the TBrowse.
DO WHILE .NOT. oBrowse:stabilize()
ENDDO

BUT, your code will crash again while you have not support oTBx:Cargo to
all 4 (not 5) oTBx.

greetings by OHR
Jimmy


Mike

2005-01-20, 3:55 pm


> 300 lines .... did you really have to quote it all?


No, you can thank Google for that.

My post (that did not display) was that Happy should quit using that
free crappy Clipper compiler that people have been emailing around. It
is the one that causes a lot of errors. The good one is at grafxsoft!
Mike

Ross McKenzie

2005-01-20, 3:55 pm

On 18 Jan 2005 08:12:18 -0800, "Mike" <mgmurch@yahoo.com> wrote:

>
>
>No, you can thank Google for that.
>
>My post (that did not display) was that Happy should quit using that
>free crappy Clipper compiler that people have been emailing around. It
>is the one that causes a lot of errors. The good one is at grafxsoft!
>Mike
>


Mike, I think that he should take up lawn bowls...he WILL be more
successful and we can get on with something more enjoyable <g>.

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com