home *** CD-ROM | disk | FTP | other *** search
/ BUG 4 / BUGCD1997_05.BIN / aplic / clip4win / clip4win.exe / C4W30E.HUF / SOURCE / OTABDEMO.ZIP / OTABDEMO.PRG < prev    next >
Text File  |  1995-09-15  |  14KB  |  373 lines

  1.  
  2. #define WIN_WANT_ALL
  3. #define WIN_WANT_LB
  4. #define WIN_WANT_CB
  5. #include "windows.ch"
  6. #include "paint.ch"
  7. #include "drawitem.ch"
  8. #include "dialog.ch"
  9. #include "accel.ch"
  10. #include "topclass.ch"
  11. #include "vo.ch"
  12.  
  13. #define IDSAVE  501
  14. #define IDEXIT  502
  15. #define IDADD   503
  16. #define IDEDIT  504
  17. #define IDDEL   505
  18. #define IDHELP  998
  19. #define PAGE1 6001
  20. #define PAGE2 6002
  21. #define PAGE3 6003
  22. #define PAGE4 6004
  23.  
  24. static  hWnd, hInst, hCTL3D
  25. static  cAppName := "oTab"
  26.  
  27. FUNCTION Main()
  28.        LOCAL nEvent, oTab, hFont, oNote
  29.  
  30.        SET SCOREBOARD OFF
  31.        SET DELETED ON
  32.  
  33.        hInst    := _GetInstance()
  34.        hCTL3D   := LoadLibrary( "CTL3D.DLL" )
  35.        SetHandleCount( 40 )
  36.        USE CLIENTS NEW
  37.        SET INDEX TO CLIENTS
  38.  
  39.        Ctl3DRegister(hInst)
  40.        Ctl3dAutoSubClass(hInst)
  41.  
  42.        oTab := oTab{ hWnd, "oTab1", 103 }
  43.        oTab:AddPage( PAGE1, "&Name" )
  44.        oTab:AddPage( PAGE2, "Add&ress")
  45.        oTab:AddPage( PAGE3, "&Phones")
  46.        oTab:AddPage( PAGE4, "A&ccount Data")
  47.        oTab:DlgProc := {|oTab,hDlgWnd,nMsg,nWparam,nLparam|DlgProc( oTab, hDlgWnd, nMsg, nWparam, nLparam ) }
  48.        oTab:DoModal()
  49.  
  50.        Ctl3dUnregister( hInst )
  51.  
  52.        oTab := oTab{ hWnd, "oTab2" }
  53.        oTab:AddPage( PAGE1, "&Name",        RGB( 0, 128, 0 )  ,RGB( 255,255,255 ),RGB( 0, 128, 0 )   )
  54.        oTab:AddPage( PAGE2, "Add&ress",     RGB( 0, 0, 128 )  ,RGB( 255,255,255 ),RGB( 0, 0, 128 )   )
  55.        oTab:AddPage( PAGE3, "&Phones",      RGB( 255, 255, 0 ),RGB( 0,0,0       ),RGB( 255, 255, 0 ) )
  56.        oTab:AddPage( PAGE4, "A&ccount Data",RGB( 128,0,0)     ,RGB( 255,255,255 ),RGB( 128,0,0)      )
  57.        oTab:DlgProc := {|oTab,hDlgWnd,nMsg,nWparam,nLparam|DlgProc( oTab, hDlgWnd, nMsg, nWparam, nLparam ) }
  58.        oTab:CTL3D := .F.
  59.        oTab:DoModal()
  60.  
  61.        FreeLibrary( hCTL3D )
  62. RETURN(NIL)
  63.  
  64. PROCEDURE Ctl3dRegister( hInst )
  65.        LOCAL   cDLL := GetProcAddress( hCTL3D, "Ctl3dRegister", "Pascal",   ;
  66.                                        "void", "int" )
  67.        CallDLL( cDLL, hInst )
  68. RETURN
  69.  
  70. PROCEDURE Ctl3dAutoSubclass( hInst )
  71.        LOCAL   cDLL := GetProcAddress( hCTL3D, "Ctl3dAutoSubclass", "Pascal",   ;
  72.                                        "void", "int" )
  73.        CallDLL( cDLL, hInst )
  74. RETURN
  75.  
  76. PROCEDURE Ctl3dDlg( hDlg )
  77.        LOCAL   cDLL := GetProcAddress( hCTL3D, "Ctl3dSubclassDlgEx", "Pascal",   ;
  78.                                        "int", "HWND, WORD" )
  79.        CallDLL( cDLL, hDlg, 1 )
  80. RETURN
  81.  
  82. PROCEDURE Ctl3dUnregister( hInst )
  83.        LOCAL   cDLL := GetProcAddress( hCtl3d, "Ctl3dUnregister", "Pascal",   ;
  84.                                        "void", "int" )
  85.        CallDLL( cDLL, hInst )
  86. RETURN
  87.  
  88. STATIC PROCEDURE Ctl3dDlgEx( hWnd, nFlags )
  89.        LOCAL   cDLL := GetProcAddress( hCtl3d, "Ctl3dSubclassDlgEx", "Pascal",   ;
  90.                                        "BOOL", "HWND, DWORD" )
  91.        CallDLL( cDLL, hWnd, nFlags )
  92. RETURN
  93.  
  94. STATIC FUNCTION DlgProc( oTab, hDlgWnd, nMsg, nWparam, nLparam )
  95.        STATIC lAdd, lEdit, aBuffers, GetList := {}, cFoo
  96.        LOCAL cName
  97.  
  98.        DO CASE
  99.           CASE nMsg == WM_INITDIALOG
  100.                lAdd  := .F.
  101.                lEdit := .F.
  102.                LoadListBox( GetDlgItem( hDlgWnd, 1002 ) )
  103.                EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .F. )
  104.                EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .F. )
  105.                SetData( hDlgWnd )
  106.                SetFocus( GetDlgItem( hDlgWnd, 1002 ) )
  107.                RETURN( 1 )
  108.  
  109.           CASE nMsg == WM_COMMAND
  110.                DO CASE
  111.                   CASE nWparam == 1002 // Listbox
  112.                        cName := LEFT( LBGetSelection( GetDlgItem( hDlgWnd, 1002 )), 4 )
  113.                        SEEK cName
  114.                        SetData( hDlgWnd )
  115.  
  116.                   CASE nWparam == IDEXIT
  117.                        oTab:Close()
  118.                        RETURN( 0 )
  119.  
  120.                   CASE nWparam == IDADD
  121.                        oTab:SetActivePage( 1 )
  122.                        GetList := NewRecord( hDlgWnd, @aBuffers )
  123.                        EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .T. )
  124.                        EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .T. )
  125.                        lAdd := .T.
  126.                        SetFocus( GetDlgItem( hDlgWnd, 101 ) )
  127.                        RETURN( 1 )
  128.  
  129.                   CASE nWparam == IDEDIT
  130.                        oTab:SetActivePage( 1 )
  131.                        GetList := NewRecord( hDlgWnd, @aBuffers )
  132.                        EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .T. )
  133.                        EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .T. )
  134.                        lEdit := .T.
  135.                        SetFocus( GetDlgItem( hDlgWnd, 101 ) )
  136.                        RETURN( 1 )
  137.  
  138.                   CASE nWparam == IDDEL
  139.                        cName := LEFT( LBGetSelection( GetDlgItem( hDlgWnd, 1002 )), 4 )
  140.                        IF MessageBox(, cName, "Delete?", MB_YESNO+MB_ICONQUESTION ) == IDYES
  141.                           cName := STRTRAN( cName, ',' )
  142.                           SEEK cName
  143.                           IF FOUND()
  144.                              DELETE
  145.                           ENDIF
  146.                           CLIENTS->( DBGOTOP() )
  147.                           SetData( hDlgWnd )
  148.                           LoadListBox( GetDlgItem( hDlgWnd, 1002 ) )
  149.                        ENDIF
  150.                        RETURN( 1 )
  151.  
  152.                   CASE nWparam == IDSAVE
  153.                        IF IsDialogOk( hDlgWnd, IDSAVE )
  154.                           aBuffers[ 18 ] := IIF( IsDlgButtonChecked( hDlgWnd, 404 ) == 1, 'Y', 'N' )
  155.                           WriteRecord( aBuffers, IIF( lAdd, .T., .F. ) )
  156.                           lAdd  := .F.
  157.                           lEdit := .F.
  158.                           LoadListBox( GetDlgItem( hDlgWnd, 1002 ) )
  159.                           CLIENTS->( DBGOTOP() )
  160.                           SetData( hDlgWnd )
  161.                           EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .F. )
  162.                           EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .F. )
  163.                        ENDIF
  164.                        RETURN( 1 )
  165.  
  166.                   CASE nWparam == IDCANCEL
  167.                        SetData( hDlgWnd )
  168.                        EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .F. )
  169.                        EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .F. )
  170.                        RETURN( 1 )
  171.  
  172.                   CASE nWparam == IDHELP
  173.                        DoAbout( hDlgWnd )
  174.                        SetFocus( hDlgWnd )
  175.                        RETURN( 1 )
  176.                ENDCASE
  177.        ENDCASE
  178. RETURN( 0 )
  179.  
  180. FUNCTION LoadListBox( hWnd )
  181.        LOCAL cFirstStr
  182.        LOCAL bFields := {||TRIM( CLIENTS->LAST_NAME ) +;
  183.                         ", "+TRIM( CLIENTS->FIRST_NAME )}
  184.  
  185.        SendMessage( hWnd, LB_RESETCONTENT , 0, 0 )
  186.        CLIENTS->( DBGOTOP() )
  187.        cFirstStr :=  EVAL( bFields )
  188.        DO WHILE !EOF()
  189.           SendMessage(hWnd, LB_ADDSTRING, 0, EVAL(bFields))
  190.           SKIP
  191.        ENDDO
  192.        SendMessage(hWnd, LB_SELECTSTRING, -1, cFirstStr)
  193.        CLIENTS->( DBGOTOP() )
  194. RETURN( NIL )
  195.  
  196. FUNCTION LBGetSelection( hLB )
  197.        LOCAL nCtr, cText
  198.  
  199.        nCtr  := SendMessage(hLB, LB_GETCURSEL, 0, 0)
  200.        cText := SPACE(SendMessage(hLB, LB_GETTEXTLEN, nCtr, 0))
  201.        SendMessage(hLB, LB_GETTEXT, nCtr, @cText)
  202. RETURN( cText )
  203.  
  204. STATIC FUNCTION SetData( hWnd )
  205.  
  206.        SetDlgItemText( hWnd, 101, CLIENTS->LAST_NAME )
  207.        SetDlgItemText( hWnd, 102, CLIENTS->FIRST_NAME )
  208.        SetDlgItemText( hWnd, 103, CLIENTS->MI )
  209.        SetDlgItemText( hWnd, 104, CLIENTS->SSN )
  210.        SetDlgItemText( hWnd, 201, CLIENTS->ADDRESS1  )
  211.        SetDlgItemText( hWnd, 202, CLIENTS->ADDRESS2  )
  212.        SetDlgItemText( hWnd, 203, CLIENTS->CITY      )
  213.        SetDlgItemText( hWnd, 204, CLIENTS->STATE     )
  214.        SetDlgItemText( hWnd, 205, CLIENTS->ZIPCODE   )
  215.        SetDlgItemText( hWnd, 301, CLIENTS->HOMEPHONE)
  216.        SetDlgItemText( hWnd, 302, CLIENTS->WORKPHONE)
  217.        SetDlgItemText( hWnd, 303, CLIENTS->MOBILE    )
  218.        SetDlgItemText( hWnd, 304, CLIENTS->FAX       )
  219.        SetDlgItemText( hWnd, 305, CLIENTS->BEEPER    )
  220.        SetDlgItemText( hWnd, 401, CLIENTS->ACCTNO    )
  221.        SetDlgItemText( hWnd, 402, TRANSFORM( CLIENTS->LIMIT,"9,999.99" ) )
  222.        SetDlgItemText( hWnd, 403, TRANSFORM( CLIENTS->BALANCE, "9,999.99" ) )
  223.        CheckDlgButton( hWnd, 404, IIF( CLIENTS->PREAPPROVD == 'Y', 1, 0 ) )
  224.        CheckDlgButton( hWnd, 405, IIF( CLIENTS->PREAPPROVD != 'Y', 1, 0 ) )
  225.        SetDlgItemText( hWnd, 406, TRANSFORM( CLIENTS->LASTAMT, "9,999.99")    )
  226.        SetDlgItemText( hWnd, 407, DTOC( CLIENTS->LASTDATE)    )
  227. RETURN( NIL )
  228.  
  229. STATIC FUNCTION GetData( hWnd, aBuffers )
  230.  
  231.        aBuffers[ 01 ] := GetDlgItmText( hWnd, 101 )
  232.        aBuffers[ 02 ] := GetDlgItmText( hWnd, 102 )
  233.        aBuffers[ 03 ] := GetDlgItmText( hWnd, 103 )
  234.        aBuffers[ 04 ] := GetDlgItmText( hWnd, 104 )
  235.        aBuffers[ 05 ] := GetDlgItmText( hWnd, 201 )
  236.        aBuffers[ 06 ] := GetDlgItmText( hWnd, 202 )
  237.        aBuffers[ 07 ] := GetDlgItmText( hWnd, 203 )
  238.        aBuffers[ 08 ] := GetDlgItmText( hWnd, 204 )
  239.        aBuffers[ 09 ] := GetDlgItmText( hWnd, 205 )
  240.        aBuffers[ 10 ] := GetDlgItmText( hWnd, 301 )
  241.        aBuffers[ 11 ] := GetDlgItmText( hWnd, 302 )
  242.        aBuffers[ 12 ] := GetDlgItmText( hWnd, 303 )
  243.        aBuffers[ 13 ] := GetDlgItmText( hWnd, 304 )
  244.        aBuffers[ 14 ] := GetDlgItmText( hWnd, 305 )
  245.        aBuffers[ 15 ] := GetDlgItmText( hWnd, 401 )
  246.        aBuffers[ 16 ] := VAL( GetDlgItmText( hWnd, 402 ) )
  247.        aBuffers[ 17 ] := VAL( GetDlgItmText( hWnd, 403 ) )
  248.        aBuffers[ 19 ] := VAL( GetDlgItmText( hWnd, 406 ) )
  249.        aBuffers[ 20 ] := CTOD( GetDlgItmText( hWnd, 407) )
  250. RETURN( NIL )
  251.  
  252. STATIC FUNCTION DoAbout( hWnd )
  253.  
  254.        DialogBox( hInst , "about", hWnd ,  ;
  255.                  {|hDlg, msg, wparam, lparam| ;
  256.                   AboutMode(hDlg, msg, wparam, lparam)})
  257.        InvalidateRect( hWnd )
  258. RETURN(NIL)
  259.  
  260. STATIC FUNCTION AboutMode(hDlgWnd, nMsg, nwParam, nlParam)
  261.  
  262.        DO CASE
  263.           CASE nMsg == WM_INITDIALOG
  264.                CenterWindow( hDlgWnd )
  265.                RETURN(1)
  266.  
  267.        CASE nMsg == WM_COMMAND
  268.             DO CASE
  269.                CASE nwParam == 1
  270.                     EndDialog(hDlgWnd,nWparam)
  271.                     RETURN(1)
  272.             ENDCASE
  273.        ENDCASE
  274. RETURN( 0 )
  275.  
  276. // CenterWindow() - Courtesy of Gerald Barber
  277. // Centers a window in it's parent windows client area
  278. // Written by Gerald Barber - thanks Gerald!
  279. //
  280. STATIC FUNCTION CenterWindow(hWnd)
  281.        LOCAL hWndParent
  282.        LOCAL aChild_[4]
  283.        LOCAL iCWidth
  284.        LOCAL iCHeight
  285.        LOCAL aParent_[4]
  286.        LOCAL aPoint_[2]
  287.  
  288.        aChild_    := GetWindowRect(hWnd)
  289.        iCWidth    := aChild_[3] - aChild_[1]
  290.        iCHeight   := aChild_[4] - aChild_[2]
  291.        hWndParent := GetWindow(hWnd,GW_OWNER)
  292.        aParent_   := GetClientRect(hWndParent)
  293.        aPoint_    := {(aParent_[3]/2),(aParent_[4]/2)}
  294.        ClienttoScreen(hWndParent,aPoint_)
  295.        aPoint_[1] -= (iCWidth  / 2)
  296.        aPoint_[2] -= (iCHeight / 2)
  297.        ScreentoClient(hWndParent,aPoint_)
  298.        aPoint_[1] := max(0, aPoint_[1])
  299.        aPoint_[2] := max(0, aPoint_[2])
  300.        ClienttoScreen(hWndParent,aPoint_)
  301.        MoveWindow(hWnd,aPoint_[1],aPoint_[2],iCWidth,iCHeight,.F.)
  302. RETURN(NIL)
  303.  
  304. FUNCTION GetWindowRect(hWnd)
  305.        LOCAL cGWR
  306.        LOCAL cBuf := space(8)
  307.        LOCAL hLib := LoadLibrary("USER.EXE")
  308.  
  309.        cGWR := GetProcAddress(hLib, "GetWindowRect", ;
  310.                               "Pascal", "void", "HWND, string")
  311.        CallDLL(cGWR, hWnd, @cBuf)
  312.        FreeLibrary(hLib)
  313. RETURN(bin2a(cBuf, "int[4]"))
  314.  
  315. STATIC FUNCTION NewRecord( hDlgWnd, aBuffers )
  316.        LOCAL GetList := {}
  317.  
  318.        aBuffers := GetBlank()
  319.        @ DIALOG hDlgWnd ID 101 GET aBuffers[ 01 ]
  320.        @ DIALOG hDlgWnd ID 102 GET aBuffers[ 02 ]
  321.        @ DIALOG hDlgWnd ID 103 GET aBuffers[ 03 ]
  322.        @ DIALOG hDlgWnd ID 104 GET aBuffers[ 04 ]
  323.        @ DIALOG hDlgWnd ID 201 GET aBuffers[ 05 ]
  324.        @ DIALOG hDlgWnd ID 202 GET aBuffers[ 06 ]
  325.        @ DIALOG hDlgWnd ID 203 GET aBuffers[ 07 ]
  326.        @ DIALOG hDlgWnd ID 204 GET aBuffers[ 08 ]
  327.        @ DIALOG hDlgWnd ID 205 GET aBuffers[ 09 ]
  328.        @ DIALOG hDlgWnd ID 301 GET aBuffers[ 10 ]
  329.        @ DIALOG hDlgWnd ID 302 GET aBuffers[ 11 ]
  330.        @ DIALOG hDlgWnd ID 303 GET aBuffers[ 12 ]
  331.        @ DIALOG hDlgWnd ID 304 GET aBuffers[ 13 ]
  332.        @ DIALOG hDlgWnd ID 305 GET aBuffers[ 14 ]
  333.        @ DIALOG hDlgWnd ID 401 GET aBuffers[ 15 ]
  334.        @ DIALOG hDlgWnd ID 402 GET aBuffers[ 16 ]
  335.        @ DIALOG hDlgWnd ID 403 GET aBuffers[ 17 ]
  336.        @ DIALOG hDlgWnd ID 406 GET aBuffers[ 19 ]
  337.        @ DIALOG hDlgWnd ID 407 GET aBuffers[ 20 ]
  338. RETURN( GetList )
  339.  
  340. STATIC FUNCTION GetBlank
  341.        LOCAL aBuffers := {}
  342.        LOCAL nCtr
  343.  
  344.        CLIENTS->( DBGOBOTTOM() )
  345.        CLIENTS->( DBSKIP( 1 ) )
  346.        FOR nCtr := 1 TO FCOUNT()
  347.            AADD( aBuffers, FIELDGET( nCtr ) )
  348.        NEXT
  349. RETURN( aBuffers )
  350.  
  351. STATIC FUNCTION WriteRecord( aBuffers, lAdd )
  352.        LOCAL nCtr
  353.  
  354.        IF lAdd
  355.           CLIENTS->( DBAPPEND() )
  356.        ENDIF
  357.        FOR nCtr := 1 TO LEN( aBuffers )
  358.            FIELDPUT( nCtr, aBuffers[ nCtr ] )
  359.        NEXT
  360.        COMMIT
  361. RETURN( NIL )
  362.  
  363. STATIC FUNCTION SetCBSels( hCBox, aSels )
  364.        LOCAL nCtr, nItem
  365.  
  366.        SendMessage( hWnd, CB_RESETCONTENT, 0, 0 )
  367.        FOR nCtr := 1 TO LEN( aSels )
  368.            SendMessage( hCBox, CB_ADDSTRING, 0, aSels[ nCtr ] )
  369.        NEXT
  370.        SendMessage(hCBox, CB_SELECTSTRING, -1, aSels[ 1 ] )
  371. RETURN( NIL )
  372.  
  373.