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
|
|
|
| #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)
| |
|
|
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
| |
|
|
> 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
| |
|
|
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
| |
|
|
> 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>.
|
|
|
|
|