FUNC NTKASELECT(hWnd, pnT, pnL, pnB, pnR, paMenu, paLog) Local oBrw, nKey, oCol, nLen, nSub, nRet, nAct, bBlk Local cTxt := "Test Brow with NTK" Local nRow := NTK_GetDeviceCaps( NTK_GetDC(), HORZRES ) Local nCol := NTK_GetDeviceCaps( NTK_GetDC(), VERTRES ) Do Case Case nRow = 576 // 640 * 0.9 = 576 pnL := pnL * 7.2 pnR := pnR * 7.2 pnT := pnT * 14.40 pnB := pnB * 1.40 Case nRow = 640 pnL := pnL * 8 pnR := pnR * 8 pnT := pnT * 16 pnB := pnB * 16 Case nRow = 720 // 800 * 0.9 = 720 pnL := pnL * 9 pnR := pnR * 9 pnT := pnT * 21.6 pnB := pnB * 21.6 Case nRow = 800 pnL := pnL * 10 pnR := pnR * 10 pnT := pnT * 24 pnB := pnB * 24 Case nRow = 921.6 // 1024 * 0.9 = 921.6 pnL := pnL * 11.52 pnR := pnR * 11.52 pnT := pnT * 27.65 pnB := pnB * 27.65 Case nRow = 1024 pnT := pnT * 12,80 pnL := pnL * 12,80 pnB := pnB * 30.72 pnR := pnR * 30.72 OtherWise pnL := pnL * 8 pnR := pnR * 8 pnT := pnT * 16 pnB := pnB * 16 EndCase Local hCur := NtkTBGetCurrent() nLen := Len( paMenu ) paLog := Array(nLen) nRet := 0 AFill( paLog, .T. ) bBlk := {|| .F.} CREATE WINDOW hWnd ; TITLE cTxt ; AT 0,0 SIZE pnR,pnB oBrw := NtkTBrowse():Init( hWnd,; 0,0,pnR,pnB,; "",; WS_CHILD + WS_VISIBLE + WS_OVERLAPPED + WS_THICKFRAME + WS_VSCROLL) nSub := 1 oBrw:goTopBlock := {|| nSub := 1 } oBrw:goBottomBlock := {|| nSub := nLen } oBrw:skipBlock := {|nI| nAct := if(Abs(nI) >= if(nI >= 0,; nLen - nSub, nSub - 1), if(nI >= 0, nLen - nSub,; 1 - nSub),nI), nSub += nAct, nAct } oCol:=NtkColumn():Init( {"Kode"}, {|| aMenu[nSub] }, nil, NTK_RGB(255,255,228), NTK_RGB(55,240,23), DT_RIGHT, 100 ) oCol:HeadColor := NTK_RGB(0,128,0) // Title will appear in Dark Green oCol:HeadFont := NTK_GetStockObject(DEFAULT_GUI_FONT) oCol:HeadBmpIndex := OBM_SIZE // COMBO // OLD_CLOSE //COMBO //CLOSE oCol:HeadBmpAlign := DT_RIGHT oCol:HeadBmpVAlign := DT_BOTTOM oBrw:addColumn( oCol ) oBrw:boxcursor := .F. // Mimics SpreadSheet Cursor focus. (Black thin borders) oBrw:make3D := .F. // 3D look : Each cell appears to be raised oBrw:mimicButton := .T. // Vertical & heading Nubs will work like buttons oBrw:escape := .T. // Bisa tekan ESC utk exit, Defaut is .T. oBrw:HeadHeight := 30 oBrw:HeadColor := NTK_RGB( 0,0,255 ) oBrw:tbfont := NTK_GetStockObject(DEFAULT_GUI_FONT) // ANSI_FIXED_FONT oBrw:LineHeight := 32 // 20 // Set the height of the browse rows in pixel. oBrw:ColorSpec := { NTK_RGB(0,0,255), NTK_RGB(255,255,176),; // UnSel Cells/Items fg/bgk NTK_RGB(255,255,255), NTK_RGB(156,131,247),; // Sel Cells/Items fg/bgk NTK_RGB(184,184,184)} // WndBrowse fg/bkg (unused cells) // Do edit routine // CodeBlock to be evaluated when user doubleclicks or strikes Enter key. // oBrw:doubleClick := { |oBrw| EditCell(oBrw) } // oBrw:DoubleClick := {|| RefreshWhiteArea( hWnd ) } // oBrw:doubleClick := {| oB,nMsg,nWparam,nLparam | EditCell(oB) } // Exit from the active get session (if any), when user single click // oBrw:singleClick := {| oB,nMsg,nWparam,nLparam | ExitCell(oB) } // keyBlock A Code block to be evaluated each time a key is pressed. // Do edit routine // oBrw:keyBlock := { |oB| EditCell (oB) } // oBrw:KeyBlock := {|| NTK_MsgBox(, "LastKey pressed is "+STR(NTK_LastKey()), "info !")} oBrw:Configure() NTK_SetFocus(oBrw:hWnd) // Display the current window and its child controls ACTIVATE WINDOW hWnd NORMAL While .T. DispBegin() While !oBrw:stabilize() End DispEnd() If (oBrw:hitTop .or. oBrw:hitBottom) Tone(87.3,1) Tone(40,3.5) Endi While ((nKey := NTK_Lastkey(0.1)) == 0) Eval(bBlk) Enddo If ( nKey == K_DOWN ) oBrw:Down() ElseIf ( nKey == K_UP ) oBrw:Up() ElseIf ( nKey == K_PGDN ) oBrw:PageDown() ElseIf ( nKey == K_PGUP ) oBrw:PageUp() ElseIf ( nKey == K_ESC ) Exit ElseIf NTK_LastKey() == K_ENTER // oBrw:doubleClick := { |oB,nMsg,nWparam,nLparam| EditCell(oB) } oBrw:KeyBlock := { || iif(paLog[nSub], nRet := nSub, Exit) } Endif Enddo NTK_SelectWindow( hCur ) NTK_DestroyWindow( hWnd ) Return(nRet)