Saturday, July 19, 2008

Fungsi Indikator

**************************
* FUNGSI INDIKATOR PERSEN
**************************

FUNCTION INDI_PERS
PARAMETERS BR, KL1, KL2, MULAI, SELESAI
PRIVATE INDI1, INDI2, X, PJ

PJ:= (KL2 - KL1)
IF SELESAI <>
SELESAI:= 1
ENDIF

INDI1:= ROUND(MULAI / SELESAI * PJ, 0)
INDI2:= ROUND(MULAI / SELESAI * 100, 0)

IF MULAI <>
SET COLOR TO GR + 1/W
@ BR, 42 + KL1 SAY TRANSFORM(MULAI, "999 %")
SET COLOR TO BG + 1/W
@ BR + 1, KL1 SAY CHR(221)
@ BR + 1, COL() SAY REPL(CHR(219), PJ)
@ BR + 1, COL() SAY CHR(222)
RETURN .T.
ENDIF

INKEY(.05)
SET COLOR TO GR + 1/W
IF INDI2 > 0 .AND. INDI2 <>
@ BR, 42 + KL1 SAY TRANSFORM(INDI2, "999 %")
@ ROW() + 1, KL1 + 1 SAY REPL(CHR(219), INDI1)
ELSEIF INDI2 > 99
INDI2:= 100
@ BR, 42 + KL1 SAY TRANSFORM(INDI2, "999 %")
@ ROW() + 1, KL1 + 1 SAY REPL(CHR(219), PJ)
ENDIF
MULAI:= 0
SELESAI:= 0

RETURN .T.

******************************
* FUNGSI INDIKATOR HORIZONTAL
******************************

FUNCTION INDI_HOR
PARAMETERS BR, KL1, KL2, MULAI1, SELESAI1
PRIVATE CB, CK, WAR, INDI1

CB:= ROW()
CK:= COL()
WAR:= SETCOLOR()
PJG1:= (KL2 - KL1)
IF SELESAI1<>
SELESAI1:= 1
ENDIF

INDI1:= ROUND(MULAI1 / SELESAI1 * PJG1, 0)
SET COLOR TO N/W
@ BR, KL1 SAY REPL(CHR(205), PJG1 + 2)
SET COLOR TO W + 1/BG + 1
@ BR + 1, KL1 SAY CHR(17)
@ BR + 1, KL1 + PJG1 + 1 SAY CHR(16)
@ BR + 1, KL1 + 1 SAY REPL( CHR( 177 ), PJG1)
SET COLOR TO W + 1/B + 1
IF INDI1 > 0 .AND. INDI1 <>
@ BR + 1, KL1 + INDI1 SAY CHR(254)
ELSEIF INDI1 >= PJG1
@ BR + 1, KL1 + PJG1 SAY CHR(254)
ELSE
@ BR + 1, KL1 + 1 SAY CHR(254)
ENDIF
MULAI1:= 0
SELESAI1:= 0
SETCOLOR(WAR)
@ CB, CK SAY ""

RETURN .T.

* FUNGSI INDIKATOR VERTIKAL

FUNCTION INDI_VER
PARAMETERS BR1, BR2, KL, MULAI2, SELESAI2
PRIVATE X, CB, CK, WAR, INDI2

CB:= ROW()
CK:= COL()
WAR:= SETCOLOR()
PJG2:= (BR2 - BR1)
IF SELESAI2 <>
SELESAI2:= 1
ENDIF

INDI2:= ROUND(MULAI2 / SELESAI2 * PJG2, 0)
SET COLOR TO W + 1/BG + 1
@ BR1, KL SAY CHR(30)
FOR X:= 1 TO PJG2
@ BR1 + X, KL SAY CHR(177)
NEXT
@ BR1 + X, KL SAY CHR(31)
SET COLOR TO W + 1/B + 1
IF INDI2 > 0 .AND. INDI2 <>
@ BR1 + INDI2, KL SAY CHR(254)
ELSEIF INDI2 >= PJG2
@ BR1 + PJG2, KL SAY CHR(254)
ELSE
@ BR1 + 1, KL SAY CHR(254)
ENDIF
MULAI2:= 0
SELESAI2:= 0
SETCOLOR(WAR)
@ CB, CK SAY ""

RETURN .T.