차이점

이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.

차이 보기로 연결

browse [2012/07/24 16:56]
admin 새로 만듦
browse [2012/07/24 18:08] (현재)
admin
줄 429: 줄 429:
 </code> </code>
  
 +{{:0082.jpg|}}
  
 +{{:0083.jpg|}}
 +
 +{{:0084.jpg|}}
 +
 +<code>
 +        ::oBut[1]:=tBtnBmp():REDEFINE( 301,301,301, , , , ;
 +                 {||::oBrw:GoTop(), ::oBrw:SetFocus()  }, ::oDlg, .f.,,, )
 +        ::oBut[2]:=tBtnBmp():REDEFINE( 302,302,302, , , , ;
 +                 {||::oBrw:PageUp(15), ::oBrw:SetFocus()  }, ::oDlg, .f.,,, )
 +        ::oBut[3]:=tBtnBmp():REDEFINE( 303,303,303, , , , ;
 +                 {||::oBrw:GoUp(), ::oBrw:SetFocus()  }, ::oDlg, .f.,,, )
 +        ::oBut[4]:=tBtnBmp():REDEFINE( 304,304,304, , , , ;
 +                 {||::oBrw:GoBottom(), ::oBrw:SetFocus()}, ::oDlg, .f.,,, )
 +        ::oBut[5]:=tBtnBmp():REDEFINE( 305,305,305, , , , ;
 +                 {||::oBrw:PageDown(15), ::oBrw:SetFocus()  }, ::oDlg, .f.,,, )
 +        ::oBut[6]:=tBtnBmp():REDEFINE( 306,306,306, , , , ;
 +                 {||::oBrw:GoDown(), ::oBrw:SetFocus()  }, ::oDlg, .f.,,, )
 +        ::oBut[7]:=tButton():REDEFINE( 307, ;
 +                 {|| msginfo("왼쪽 버튼 눌렀내요")}, ::oDlg,,,.f.,,, )
 +        ::oBut[8]:=tBtnBmp():REDEFINE( 308,308,308, , , , ;
 +                 {||WINHELP( "BRW.HLP" )}, ::oDlg, .f.,,, )
 +        ::oBut[9]:=Tdrbtnbmp():Redefine( 309,309, , , ;
 +                 {||::oDlg:End()},::oDlg,.f.,,,," 종료(&X)",, 7,,,,,,,,)
 +        ::oBut[7]:bRClicked := {| nRow, nCol | ::ShowPopMenu() }
 +
 +   ACTIVATE DIALOG ::oDlg CENTER
 +
 +RETURN NIL
 +METHOD ThinkHead() CLASS TBrwTest
 +
 +       Local aDDD  := { "02",  "0394", "0395", "0392", "0372","0556" }
 +       Local aADDR := { "서울","동해", "삼척", "속초", "횡성","고성" }
 +       Local cADDR := "DDD"
 +
 +       Local cGivenDDD := alltrim(POST->DDD)
 +       Local nPos      := ascan ( aDDD, cGivenDDD )
 +
 +       if nPos <> 0
 +          cADDR := aADDR[ nPos ]
 +       endif
 +
 +       if ::oBrw:aColumns[4]:cHeading <> cADDR
 +          ::oBrw:aColumns[4]:cHeading := cADDR
 +          ::oBrw:RefreshHeader()
 +       endif
 +
 +Return NIL
 +</code>
 +
 +{{:0085.jpg|}}
 +
 +<code>
 +METHOD ThinkPostClr(nSun) CLASS TBrwTest
 +
 +       LOCAL nRecNo := POST->(RecNo())
 +       LOCAL nColor := DR_BRW8
 +
 +       DO CASE
 +          CASE nSun == 1
 +               nColor := DR_BRW3
 +          CASE nSun == 2
 +               nColor := DR_BRW4
 +          CASE nSun == 3
 +               nColor := DR_BRW8
 +          CASE nSun == 4
 +               nColor := DR_BRW9
 +       END
 +       // 셸 색상 조정
 +
 +       IF Mod ( nRecNo, 10 ) == 0
 +          nColor := DR_BRW1
 +       ENDIF
 +       // 10의 배수 레코드 마다 색상 조정
 +
 +RETURN nColor
 +</code>
 +
 +{{:0086.jpg|}}
 +
 +<code>
 +METHOD ShowPopMenu() CLASS TBrwTest
 +
 +       LOCAL oMenu := ''
 +       LOCAL nRow  := 0 , nCol := 0
 +       nRow := ::oBut[7]:nHeight
 +
 +       MENU oMenu POPUP
 +            MENUITEM   "TEST1"
 +            MENUITEM   "TEST2"
 +            MENUITEM   "TEST3"
 +            SEPARATOR
 +            MENUITEM   "TEST4"
 +            MENUITEM   "TEST5"
 +       ENDMENU
 +
 +       ACTIVATE MENU oMenu OF ::oBut[7] AT nRow, nCol
 +
 +RETURN NIL
 +</code>
 +
 +{{:0087.jpg|}}
 +
 +<code>
 +METHOD BrwPopUp ( nRow, nCol ) CLASS TBrwTest
 +        IF ::oPopUp <> NIL
 +           ::oPopUp := NIL
 +           RETURN NIL
 +        ENDIF
 +        MENU ::oPopUp POPUP
 +            MENUITEM   "TEST1"
 +            MENUITEM   "TEST2"
 +            MENUITEM   "TEST3"
 +            SEPARATOR
 +            MENUITEM   "TEST4"
 +            MENUITEM   "TEST5"
 +       ENDMENU
 +
 +       ACTIVATE MENU ::oPopUp OF ::oBrw AT nRow, nCol
 +
 +RETURN NIL
 +</code>
 +
 +{{:0088.jpg|}}
 +
 +<code>
 +METHOD BrwKeyDown( nKey ) CLASS TBrwTest
 +
 +       DO CASE
 +          CASE nKey==VK_RETURN
 +               msginfo("RETURN를 눌렀네요")
 +          CASE nKey==VK_DELETE
 +               msginfo("DELETE를 눌렀네요")
 +          CASE nKey==VK_INSERT
 +               msginfo("INSERT를 눌렀네요")
 +          CASE nKey==VK_ESCAPE
 +               msginfo("ESCAPE를 눌렀네요")
 +       END
 +
 +Return NIL
 +</code>
 +
 +{{:0089.jpg|}}
 +
 +<code>
 +INIT FUNCTION APP_INIT()
 +
 +     SET RESOURCES TO "SAMBRW1.DLL"
 +     SET _3DLOOK ON
 +
 +RETURN NIL
 +
 +
 +Exit Function FINISH()
 +
 +     SET 3DLOOK OFF
 +     SET RESOURCES TO
 +
 +RETURN NIL
 +</code>
 +
 + 
 +
 +2. 배열 브라우즈
 +
 +NSAMPLES\BROWSE\SAMBRW2.PRG 참조
 +
 +{{:0090.jpg|}}
 +
 +<code>
 +#include "npp.ch"
 +
 +Func MAIN()
 +
 +     Local oMain := ABRW():New()
 +
 +Return Nil
 +
 +
 +CLASS ABRW
 +
 +      DATA oDlg, oBrw, oBut
 +
 +      METHOD New() CONSTRUCTOR
 +             METHOD ShowNam()
 +
 +ENDCLASS
 +
 +
 +METHOD New() CLASS ABRW
 +
 +       Local i        := 0
 +       Local j        := 0
 +       Local nX       := 1
 +       Local nY       := 1
 +       Local cSeekNam := ""
 +       Local lSunTak  := .t.
 +       Local aName1   := {"김일동","김이동","김삼동","김사동","김오동",;
 +                          "박일동","박이동","박삼동","박사동","박오동",;
 +                          "이일동","이이동","이삼동","이사동","이오동" }
 +       Local aName2[5,3]
 +
 +       For i=1 to 5
 +           For j=1 to 3
 +               aName2[i,j] := aName1[ (j-1)*5 + i ]
 +           Next
 +       Next
 +
 +// aName2 배열에 저장할 데이터 및 브라우즈에 표현할 모양
 +
 +// {"김일동","박일동","이일동"}
 +// {"김이동","박이동","이이동"}
 +// {"김삼동","박삼동","이삼동"}
 +// {"김사동","박사동","이사동"}
 +// {"김오동","박오동","이오동"}
 +
 +       DEFINE DIALOG ::oDlg RESOURCE "D_SEEKNAM"
 +         Sethplus ( 5 )
 +         REDEFINE BROWSE ::oBrw ID 4001 OF ::oDlg ;
 +                  ALIAS "ARRAY"                   ;
 +                  ON DBLCLICK ( ::ShowNam( aName2 ) )
 +
 +                  ::oBrw:SetArray ( aName2 )
 +                  ::oBrw:lCellStyle := .t.
 +
 +                  ADD TO ::oBrw ARRAY elem 1 HEAD "이 름" SIZE 75 ALIGN CENTER
 +                  ADD TO ::oBrw ARRAY elem 2 HEAD "이 름" SIZE 75 ALIGN CENTER
 +                  ADD TO ::oBrw ARRAY elem 3 HEAD "이 름" SIZE 75 ALIGN CENTER
 +
 +         REDEFINE BUTTON ::oBut ID 3001 OF ::oDlg ACTION ::oDlg:End()
 +
 +       ACTIVATE DIALOG ::oDlg CENTER
 +
 +Return Nil
 +
 +
 +
 +
 +METHOD ShowNam( aName2 ) CLASS ABRW
 +
 +       Local nX := 0
 +       Local nY := 0
 +
 +       nX := ::oBrw:Ncolact
 +       nY := ::oBrw:Nat
 +       MsgInfo( aName2[nY,nX] + "을 선택 했습니다.")
 +       ::oBrw:Refresh()
 +
 +Return Nil
 +
 +
 +Init Function START()
 +
 +     SET _3DLOOK ON
 +     SET RESOURCES TO "SAMBRW2.DLL"
 +
 +RETURN NIL
 +
 +
 +Exit Function FINISH()
 +
 +     SET 3DLOOK OFF
 +     SET RESOURCES TO
 +
 +RETURN NIL
 +</code>
 +
 + 
 +
 +3. 편집 브라우즈
 +
 +NSAMPLES\BROWSE\SAMBRW3.PRG 참조
 +
 +{{:0091.jpg|}}
 +
 +<code>
 +#include "npp.ch"
 +#include "ads.ch"
 +
 +REQUEST _ADS
 +FUNCTION Main()
 +
 +   App_Init()
 +   TBrwEdit():New()
 +
 +RETURN NIL
 +
 +CLASS TBrwEdit
 +
 +   DATA oDlg
 +   DATA oBrw
 +   DATA oBtn AS ARRAY INIT Array(3)
 +   DATA nWidth
 +   DATA oFont
 +
 +   METHOD New() CONSTRUCTOR
 +   METHOD FormCreate()
 +   METHOD ReButton()
 +   METHOD Read( lNew )
 +   METHOD BrwKeyDown( nKey, nAsc )
 +   METHOD SaveData( uVar, nLastKey, lNew, cField, nRecNo )
 +   METHOD Open()
 +   METHOD Close()
 +   METHOD GenCode()
 +   METHOD ReBrw()
 +   METHOD DeleteData(oBrw)
 +   METHOD HeadChange( nPos )
 +   METHOD BrwPopUp()
 +
 +ENDCLASS
 +
 +
 +METHOD New() CLASS TBrwEdit
 +
 +   ::oFont := Dr_Font(10)
 +   ::nWidth:= GetFontInfo( ::oFont:hFont ) [2] //폰트의 가로크기
 +   ::Open()
 +   ::FormCreate()
 +   ::Close()
 +
 +RETURN NIL
 +
 +
 +METHOD Open() CLASS TBrwEdit
 +
 +   Local oMeter := ''
 +   Local nStep  := 0
 +   Local cFile  := "MAN.DBF"
 +   Local aStruct:= {{"CODE ", "C", 05, 0 },;
 +                    {"NAME ", "C", 10, 0 },;
 +                    {"JUMIN", "C", 14, 0 },;
 +                    {"PART ", "C", 20, 0 },;
 +                    {"POSI ", "C", 20, 0 },;
 +                    {"PAY  ", "N", 07, 0 } }
 +
 +   IF !File( cFile )
 +      dbCreate( cFile, aStruct )
 +   ENDIF
 +
 +   USE MAN SHARED NEW ALIAS MAN VIA "ADS"
 +
 +   IF !File("MAN.CDX")
 +      nStep  := Int( MAN->(OrdKeyCount() ) / 10 )
 +      oMeter := TDrMeta():New("인덱스파일생성","잠시만 기다리세요",MAN->( OrdKeyCount() ), 1 )
 +      INDEX ON MAN->NAME  TAG NAME  TO MAN For !Deleted() ;
 +               EVERY nStep  Eval ( oMeter:SetData( MAN->( OrdKeyNo() ) ) )
 +
 +      INDEX ON MAN->JUMIN TAG JUMIN TO MAN For !Deleted() ;
 +               EVERY nStep  Eval ( oMeter:SetData( MAN->( OrdKeyNo() ) ) )
 +
 +      INDEX ON MAN->PART  TAG PART  TO MAN For !Deleted() ;
 +               EVERY nStep  Eval ( oMeter:SetData( MAN->( OrdKeyNo() ) ) )
 +
 +      INDEX ON MAN->POSI  TAG POSI TO MAN For !Deleted()  ;
 +               EVERY nStep  Eval ( oMeter:SetData( MAN->( OrdKeyNo() ) ) )
 +
 +      INDEX ON DESCEND(STR(MAN->PAY))+MAN->NAME TAG PAY TO MAN For !Deleted()  ;
 +               EVERY nStep  Eval ( oMeter:SetData( MAN->( OrdKeyNo() ) ) )
 +
 +      oMeter:End()
 +   ELSE
 +      SET INDEX TO MAN
 +   ENDIF
 +
 +   MAN->(dbGoTop())
 +   MAN->(OrdSetFocus("NAME"))
 +
 +RETURN NIL
 +
 +
 +METHOD Close() CLASS TBrwEdit
 +   MAN->(dbCloseArea())
 +RETURN NIL
 +
 +
 +METHOD FormCreate() CLASS TBrwEdit
 +
 +   DEFINE DIALOG ::oDlg RESOURCE "D_BRWEDIT"
 +
 +      ::ReBrw()
 +      ::ReButton()
 +
 +   ACTIVATE DIALOG ::oDlg CENTER
 +
 +RETURN NIL
 +METHOD ReBrw() CLASS TBrwEdit
 +
 +   REDEFINE BROWSE ::oBrw ID  4001 OF ::oDlg     ;
 +            COLOR CLR_BLACK, nRGB ( 235,255, 255 )
 +
 +      ::oBrw:SetGrade( 4, 4, 1 , CLR_BLACK, nRGB(227,224,220) )
 +      ::oBrw:nStClr     := nRGB(181,173,161)
 +      ::oBrw:nEndClr    := nRGB(243,240,235)
 +
 +      ::oBrw:lCellStyle := .t.
 +      ::oBrw:lNoHScroll := .t.
 +      ::oBrw:cAlias:="MAN"
 +      ::oBrw:bRClicked  := {| nRow, nCol | ::BrwPopUp( nRow, nCol ) }
 +      ::oBrw:bGotFocus  := {|| Dr_Han()}
 +      ::oBrw:aActions   := { {|| ::HeadChange( 1 ) }, {|| ::HeadChange( 2 ) }, {|| ::HeadChange( 3 ) },;
 +                             {|| ::HeadChange( 4 ) }, {|| ::HeadChange( 5 ) } }
 +
 +      ::oBrw:bKeyDown   := {| nKey | ::BrwKeyDown( nKey ) }
 +      ::oBrw:bKeychar   := {| nAsc | iif ( nAsc <> 13, ::BrwKeyDown ( 13, nAsc ), ) }
 +      ::oBrw:bHanCheck  := {|      | ::BrwKeyDown(  13       ) }
 +      ::oBrw:bLDblClick := {|      | ::BrwKeyDown(  13       ) }
 +
 +      ADD TO ::oBrw DATA MAN->NAME               ;
 +          TITLE "이  름"                         ;
 +          FIELD "NAME"                           ;
 +          SIZE ::nWidth * 13                     ;
 +          EDITABLE                               ;
 +          COLOR CLR_BLACK, nRGB ( 235, 255, 255 )
 +
 +      ADD TO ::oBrw DATA MAN->JUMIN              ;
 +          TITLE "주민등록번호"                   ;
 +          FIELD "JUMIN"                          ;
 +          SIZE ::nWidth * 20                     ;
 +          PICTURE "999999-9999999"               ;
 +          EDITABLE                               ;
 +          COLOR CLR_BLACK, nRGB ( 235, 255, 255 )
 +
 +      ADD TO ::oBrw DATA MAN->PART               ;
 +          TITLE "부   서"                        ;
 +          FIELD "PART"                           ;
 +          SIZE ::nWidth * 18                     ;
 +          EDITABLE                               ;
 +          COLOR CLR_BLACK, nRGB ( 235, 255, 255 )
 +
 +      ADD TO ::oBrw DATA MAN->POSI               ;
 +          TITLE "직   급"                        ;
 +          FIELD "POSI"                           ;
 +          SIZE ::nWidth * 18                     ;
 +          EDITABLE                               ;
 +          COLOR CLR_BLACK, nRGB ( 235, 255, 255 )
 +
 +      ADD TO ::oBrw DATA MAN->PAY                ;
 +          TITLE "급   여"                        ;
 +          FIELD "PAY"                            ;
 +          SIZE ::nWidth * 10                     ;
 +          PICTURE "9,999,999"                    ;
 +          EDITABLE                               ;
 +          COLOR CLR_BLACK, nRGB ( 235, 255, 255 )
 +
 +
 +RETURN NIL
 +
 +
 +METHOD ReButton() CLASS TBrwEdit
 +
 +   REDEFINE BUTTON ::oBtn[1] ID  3001 OF ::oDlg ACTION ::oDlg:END()
 +
 +RETURN NIL
 +
 +
 +METHOD BrwPopUp( nRow, nCol ) CLASS TBrwEdit
 +
 +   LOCAL oPopUp
 +
 +   IF oPopUp <> NIL
 +      oPopUp := NIL
 +   ENDIF
 +
 +
 +   MENU oPopUp  POPUP
 +
 +      MENUITEM "추   가(Insert)" ACTION ( ::oBrw:nColAct:=1, ::Read( .t. ) )
 +      MENUITEM "수   정(Enter) " ACTION ::Read( .f. )
 +      MENUITEM "삭   제(Delete)" ACTION ::DeleteData(::oBrw)
 +
 +   ENDMENU
 +
 +   ACTIVATE MENU oPopUp OF ::oBrw AT nRow, nCol
 +
 +RETURN NIL
 +
 +
 +METHOD HeadChange( nPos ) CLASS TBrwEdit
 +
 +   DO CASE
 +
 +      CASE nPos == 1
 +           MAN->(OrdSetFocus("NAME"))
 +
 +      CASE nPos == 2
 +           RETURN NIL
 +
 +      CASE nPos == 3
 +           MAN->(OrdSetFocus("PART"))
 +
 +      CASE nPos == 4
 +           MAN->(OrdSetFocus("POSI"))
 +
 +      CASE nPos == 5
 +           MAN->(OrdSetFocus("PAY"))
 +   ENDCASE
 +
 +   Dr_BrwStable(::oBrw)
 +   ::oBrw:Refresh()
 +
 +RETURN NIL
 +
 +
 +
 +METHOD BrwKeyDown( nKey, nAsc ) CLASS TBrwEdit
 +
 +   DO CASE
 +
 +      CASE nKey == VK_INSERT
 +           ::oBrw:nColAct:=1
 +           ::Read( .t. )
 +      CASE nKey == 13
 +           ::Read( .f. )
 +      CASE nKey == VK_DELETE
 +           ::DeleteData(::oBrw)
 +      CASE nKey == VK_DOWN
 +
 +           IF ::oBrw:lHitBottom
 +              ::oBrw:nColAct:=1
 +              ::Read( .t. )
 +           ENDIF
 +
 +      CASE nKey == 27
 +           ::oDlg:End()
 +
 +   ENDCASE
 +
 +   IF nAsc <> NIL
 +      Dr_KeyBoard ( ::oBrw:oGet, nAsc )
 +   ENDIF
 +
 +RETURN NIL
 +
 +
 +METHOD Read( lNew ) CLASS TBrwEdit
 +
 +   LOCAL nPos     := ::oBrw:nColAct     // Browse의 Cell의 위치
 +   LOCAL uVar     := ''
 +   LOCAL lVirtual := .f.
 +   LOCAL nRecNo   := (::oBrw:cAlias)->(OrdkeyNo())
 +   LOCAL cField   := ::oBrw:aColumns[ nPos ]:cField
 +   LOCAL cPicture := ::oBrw:aColumns[ nPos ]:cPicture
 +
 +   DEFAULT lNew := .f.
 +
 +   IF Empty ( cField )
 +      RETURN NIL
 +   ENDIF
 +
 +   IF lNew
 +      lVirtual := .t.
 +   ENDIF
 +   IF (::oBrw:cAlias)->(OrdKeyCount()) == 0  //자료가 하나도 없으면
 +      lNew := .t.
 +      lVirtual := .f.             //부라우즈에서 가상위치(다음 줄)로 가지않고 현재위치에서 입력받는다.
 +   ENDIF
 +
 +   IF lNew
 +      (::oBrw:cAlias)->( dbGoto( 0 ) )
 +   ENDIF
 +
 +   uVar := (::oBrw:cAlias)->&(cField)
 +
 +   IF lNew
 +
 +      (::oBrw:cAlias)->( dbGoto( nRecNo ) )
 +
 +      IF ::oBrw:nRowCount <= (::oBrw:cAlias)->(OrdKeyCount())
 +         ::oBrw:BrwGoBottom(1)
 +         ::oBrw:Refresh()
 +      ELSE
 +         ::oBrw:BrwGoBottom()
 +      ENDIF
 +
 +   ENDIF
 +
 + IF ::oBrw:aColumns[ nPos ]:lEdit    //Editable 이면
 +
 +      IF lVirtual                      //가상레코드를 만든다.
 +         EDITCOL nPos VAR uVar OF ::oBrw ;
 +               VIRTUAL                 ;
 +               PICTURE cPicture        ;
 +               VALID {| uVar, nLastKey |  ::SaveData( uVar, nLastKey, lNew, cField, nRecNo ) }
 +               ::oBrw:oGet:lRightEdit := .t.                 //오른쪽 숫자입력
 +      ELSE
 +         EDITCOL nPos VAR uVar OF ::oBrw ;
 +               PICTURE cPicture        ;
 +               VALID {| uVar, nLastKey |  ::SaveData( uVar, nLastKey, lNew, cField, nRecNo ) }
 +               ::oBrw:oGet:lRightEdit := .t.
 +      ENDIF
 + ELSE                           //Editabl이 아니면
 +      IF nPos == Len(::oBrw:aColumns)  //마지막 칼럼이면 아래 첫번째 셀로 이동한다.
 +         ::oBrw:nColAct:=1
 +         ::oBrw:GoDown()
 +      ELSE
 +         ::oBrw:GoRight()              //마지막이 아니면 오른쪽으로 이동
 +         Return NIL
 +      ENDIF
 +   ENDIF
 +
 +RETURN NIL
 +
 +
 +METHOD SaveData( uVar, nLastKey, lNew, cField, nRecNo ) CLASS TBrwEdit
 +
 +   IF nLastKey == 27
 +     Dr_BrwStable( ::oBrw )
 +     ::oBrw:Refresh()
 +      RETURN NIL
 +   ENDIF
 +
 +   IF lNew .and. Empty ( uVar )
 +     Dr_BrwStable( ::oBrw )
 +     ::oBrw:Refresh()
 +      RETURN NIL
 +   ENDIF
 +
 +
 +   IF lNew
 +      IF !( (::oBrw:cAlias)->(Dr_Append()) )
 +         MsgStop( "잠시후 재시도 바랍니다.","Network Busy")
 +         RETURN NIL
 +      ENDIF
 +   ENDIF
 +
 +   IF !( (::oBrw:cAlias)->(Dr_dbRLock()) )
 +       MsgStop( "잠시후 재시도 바랍니다.","Network Busy")
 +       RETURN NIL
 +   ENDIF
 +   (::oBrw:cAlias)->&(cField) := uVar  //저장
 +   (::oBrw:cAlias)->(dbUnLock())
 +
 +   IF lNew           //코드를 입력한다.
 +      ::GenCode()
 +   ENDIF
 +
 +   IF nRecNo != (::oBrw:cAlias)->(OrdKeyNo())   //인덱스 위치가 달라졌을때만
 +     Dr_BrwStable( ::oBrw )
 +     ::oBrw:Refresh()
 +   ENDIF
 +
 +   DO CASE                               // GET처리후의 키값
 +
 +      CASE nLastKey == VK_DOWN           // 밑으로
 +           ::oBrw:GoDown()
 +           IF ::oBrw:lHitBottom
 +              Dr_KeyBoard(::oBrw, VK_INSERT )
 +           ENDIF
 +
 +      CASE nLastKey == VK_UP             // 위로
 +           ::oBrw:GoUp()
 +      CASE nLastKey == 13
 +
 +           IF ::oBrw:nColAct == Len(::oBrw:aColumns)       // 오른쪽이면
 +              ::oBrw:Godown()
 +              ::oBrw:nColAct:=1
 +           ELSE
 +              ::oBrw:GoRight()
 +           ENDIF
 +
 +   ENDCASE
 +
 +RETURN NIL
 +
 +
 +
 +METHOD DeleteData( oBrw )  CLASS TBrwEdit
 +
 +   Dr_BrwDelete ( oBrw )
 +
 +   IF VALTYPE(oBrw:bChange)=="B"  //bChange 코드블럭이 있으면 실행한다.
 +      Eval(oBrw:bChange)
 +   ENDIF
 +
 +RETURN NIL
 +
 +
 +METHOD GenCode() CLASS TBrwEdit
 +
 +   IF MAN->(dbRLock())
 +      MAN->CODE := MakeCode ( "MAN", 5, .t. )
 +   ENDIF
 +   MAN->(dbUnLock())
 +
 +RETURN NIL
 +
 +
 +FUNCTION MakeCode ( cRemark, nLen, lPlus )    //코드 생성 합수
 +
 +   LOCAL cAlias := Alias()
 +   LOCAL cDummy := ''
 +   LOCAL cCode  := ''
 +   LOCAL nMax   := 0
 +   LOCAL nI     := 0
 +   LOCAL aStruct:= {{ "REMARK" ,  "C",  10,  0 },;
 +                    { "LENGTH" ,  "N",   1,  0 },;
 +                    { "COUNTER",  "N",   9,  0 } }
 +   LOCAL cFile  := "CODEBASE.DBF"
 +   LOCAL cIndex := "CODEBASE.CDX"
 +
 +   iif ( lPlus == NIL , lPlus := .f., NIL )
 +
 +   cRemark := PAD ( cRemark, 10 )
 +
 +   IF !File ( cFile )
 +       dbCreate( cFile, aStruct )
 +   ENDIF
 +
 +   USE CODEBASE NEW SHARED ALIAS CODEBASE VIA "ADS"
 +
 +   IF !File ( cIndex )
 +      INDEX ON CODEBASE->REMARK TAG REMARK TO (cIndex)
 +   ELSE
 +      SET INDEX TO CODEBASE
 +   ENDIF
 +
 +   IF !( CODEBASE -> ( dbSeek ( cRemark ) ) )
 +      CODEBASE->(Dr_Append())
 +      IF CODEBASE->( dbRLock() )
 +         CODEBASE->REMARK  := cRemark
 +         CODEBASE->LENGTH  := nLen
 +         CODEBASE->COUNTER := 0
 +         CODEBASE->( dbUnlock() )
 +      ENDIF
 +   ENDIF
 +
 +   IF lPlus
 +      IF CODEBASE->( dbRLock() )
 +         CODEBASE->COUNTER :=  CODEBASE->COUNTER + 1
 +         CODEBASE->( dbUnlock() )
 +      ENDIF
 +   ELSE
 +      IF CODEBASE->COUNTER > 0
 +         IF CODEBASE->( rLock() )
 +            CODEBASE->COUNTER := CODEBASE->COUNTER - 1
 +            CODEBASE->( dbUnlock() )
 +         ENDIF
 +      ENDIF
 +   ENDIF
 +
 +   cDummy := alltrim( str( CODEBASE->COUNTER ) )
 +
 +   cCode := padl ( cDummy, nLen, "0" )
 +
 +   CODEBASE->(dbCloseArea())
 +
 +   IF Select ( cAlias ) <> 0
 +      (cAlias)->(dbSelectArea())
 +   ENDIF
 +
 +RETURN cCode
 +
 +
 +FUNCTION App_Init()
 +
 +   RddRegister ( "ADS", 1 )
 +   RddSetDefault ( "ADS" )
 +
 +   SET SERVER LOCAL    // INTERNET
 +   SET FILETYPE TO CDX // ADT
 +
 +   SET _3DLOOK ON
 +   SET DELETE ON
 +   SET DATE FORMAT "YYYY.MM.DD"
 +   SETHANDLECOUNT(45)
 +
 +   SET RESOURCES TO "SAMBRW3.DLL"
 +
 +   Dr_GSetcolor ( { CLR_BLACK, CLR_WHITE } ,;
 +                  { CLR_BLACK, nRGB( 235, 255, 255 ) } ,;
 +                  { CLR_BLACK, DR_YELLOW } )
 +   SetHPlus ( 8 )
 +   SetAutoScroll(.t.)
 +   SetAutoClear(.t.)
 +   Memory(-1)
 +
 +RETURN NIL
 +
 +Exit Function App_Exit()
 +
 +     SET 3DLOOK OFF
 +     SET RESOURCES TO
 +
 +RETURN NIL
 +</code>
 

Link categories 1

Link categories 2