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 >
Wrap
Text File
|
1995-09-15
|
14KB
|
373 lines
#define WIN_WANT_ALL
#define WIN_WANT_LB
#define WIN_WANT_CB
#include "windows.ch"
#include "paint.ch"
#include "drawitem.ch"
#include "dialog.ch"
#include "accel.ch"
#include "topclass.ch"
#include "vo.ch"
#define IDSAVE 501
#define IDEXIT 502
#define IDADD 503
#define IDEDIT 504
#define IDDEL 505
#define IDHELP 998
#define PAGE1 6001
#define PAGE2 6002
#define PAGE3 6003
#define PAGE4 6004
static hWnd, hInst, hCTL3D
static cAppName := "oTab"
FUNCTION Main()
LOCAL nEvent, oTab, hFont, oNote
SET SCOREBOARD OFF
SET DELETED ON
hInst := _GetInstance()
hCTL3D := LoadLibrary( "CTL3D.DLL" )
SetHandleCount( 40 )
USE CLIENTS NEW
SET INDEX TO CLIENTS
Ctl3DRegister(hInst)
Ctl3dAutoSubClass(hInst)
oTab := oTab{ hWnd, "oTab1", 103 }
oTab:AddPage( PAGE1, "&Name" )
oTab:AddPage( PAGE2, "Add&ress")
oTab:AddPage( PAGE3, "&Phones")
oTab:AddPage( PAGE4, "A&ccount Data")
oTab:DlgProc := {|oTab,hDlgWnd,nMsg,nWparam,nLparam|DlgProc( oTab, hDlgWnd, nMsg, nWparam, nLparam ) }
oTab:DoModal()
Ctl3dUnregister( hInst )
oTab := oTab{ hWnd, "oTab2" }
oTab:AddPage( PAGE1, "&Name", RGB( 0, 128, 0 ) ,RGB( 255,255,255 ),RGB( 0, 128, 0 ) )
oTab:AddPage( PAGE2, "Add&ress", RGB( 0, 0, 128 ) ,RGB( 255,255,255 ),RGB( 0, 0, 128 ) )
oTab:AddPage( PAGE3, "&Phones", RGB( 255, 255, 0 ),RGB( 0,0,0 ),RGB( 255, 255, 0 ) )
oTab:AddPage( PAGE4, "A&ccount Data",RGB( 128,0,0) ,RGB( 255,255,255 ),RGB( 128,0,0) )
oTab:DlgProc := {|oTab,hDlgWnd,nMsg,nWparam,nLparam|DlgProc( oTab, hDlgWnd, nMsg, nWparam, nLparam ) }
oTab:CTL3D := .F.
oTab:DoModal()
FreeLibrary( hCTL3D )
RETURN(NIL)
PROCEDURE Ctl3dRegister( hInst )
LOCAL cDLL := GetProcAddress( hCTL3D, "Ctl3dRegister", "Pascal", ;
"void", "int" )
CallDLL( cDLL, hInst )
RETURN
PROCEDURE Ctl3dAutoSubclass( hInst )
LOCAL cDLL := GetProcAddress( hCTL3D, "Ctl3dAutoSubclass", "Pascal", ;
"void", "int" )
CallDLL( cDLL, hInst )
RETURN
PROCEDURE Ctl3dDlg( hDlg )
LOCAL cDLL := GetProcAddress( hCTL3D, "Ctl3dSubclassDlgEx", "Pascal", ;
"int", "HWND, WORD" )
CallDLL( cDLL, hDlg, 1 )
RETURN
PROCEDURE Ctl3dUnregister( hInst )
LOCAL cDLL := GetProcAddress( hCtl3d, "Ctl3dUnregister", "Pascal", ;
"void", "int" )
CallDLL( cDLL, hInst )
RETURN
STATIC PROCEDURE Ctl3dDlgEx( hWnd, nFlags )
LOCAL cDLL := GetProcAddress( hCtl3d, "Ctl3dSubclassDlgEx", "Pascal", ;
"BOOL", "HWND, DWORD" )
CallDLL( cDLL, hWnd, nFlags )
RETURN
STATIC FUNCTION DlgProc( oTab, hDlgWnd, nMsg, nWparam, nLparam )
STATIC lAdd, lEdit, aBuffers, GetList := {}, cFoo
LOCAL cName
DO CASE
CASE nMsg == WM_INITDIALOG
lAdd := .F.
lEdit := .F.
LoadListBox( GetDlgItem( hDlgWnd, 1002 ) )
EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .F. )
EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .F. )
SetData( hDlgWnd )
SetFocus( GetDlgItem( hDlgWnd, 1002 ) )
RETURN( 1 )
CASE nMsg == WM_COMMAND
DO CASE
CASE nWparam == 1002 // Listbox
cName := LEFT( LBGetSelection( GetDlgItem( hDlgWnd, 1002 )), 4 )
SEEK cName
SetData( hDlgWnd )
CASE nWparam == IDEXIT
oTab:Close()
RETURN( 0 )
CASE nWparam == IDADD
oTab:SetActivePage( 1 )
GetList := NewRecord( hDlgWnd, @aBuffers )
EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .T. )
EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .T. )
lAdd := .T.
SetFocus( GetDlgItem( hDlgWnd, 101 ) )
RETURN( 1 )
CASE nWparam == IDEDIT
oTab:SetActivePage( 1 )
GetList := NewRecord( hDlgWnd, @aBuffers )
EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .T. )
EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .T. )
lEdit := .T.
SetFocus( GetDlgItem( hDlgWnd, 101 ) )
RETURN( 1 )
CASE nWparam == IDDEL
cName := LEFT( LBGetSelection( GetDlgItem( hDlgWnd, 1002 )), 4 )
IF MessageBox(, cName, "Delete?", MB_YESNO+MB_ICONQUESTION ) == IDYES
cName := STRTRAN( cName, ',' )
SEEK cName
IF FOUND()
DELETE
ENDIF
CLIENTS->( DBGOTOP() )
SetData( hDlgWnd )
LoadListBox( GetDlgItem( hDlgWnd, 1002 ) )
ENDIF
RETURN( 1 )
CASE nWparam == IDSAVE
IF IsDialogOk( hDlgWnd, IDSAVE )
aBuffers[ 18 ] := IIF( IsDlgButtonChecked( hDlgWnd, 404 ) == 1, 'Y', 'N' )
WriteRecord( aBuffers, IIF( lAdd, .T., .F. ) )
lAdd := .F.
lEdit := .F.
LoadListBox( GetDlgItem( hDlgWnd, 1002 ) )
CLIENTS->( DBGOTOP() )
SetData( hDlgWnd )
EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .F. )
EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .F. )
ENDIF
RETURN( 1 )
CASE nWparam == IDCANCEL
SetData( hDlgWnd )
EnableWindow( GetDlgItem( hDlgWnd, IDSAVE ), .F. )
EnableWindow( GetDlgItem( hDlgWnd, IDCANCEL ), .F. )
RETURN( 1 )
CASE nWparam == IDHELP
DoAbout( hDlgWnd )
SetFocus( hDlgWnd )
RETURN( 1 )
ENDCASE
ENDCASE
RETURN( 0 )
FUNCTION LoadListBox( hWnd )
LOCAL cFirstStr
LOCAL bFields := {||TRIM( CLIENTS->LAST_NAME ) +;
", "+TRIM( CLIENTS->FIRST_NAME )}
SendMessage( hWnd, LB_RESETCONTENT , 0, 0 )
CLIENTS->( DBGOTOP() )
cFirstStr := EVAL( bFields )
DO WHILE !EOF()
SendMessage(hWnd, LB_ADDSTRING, 0, EVAL(bFields))
SKIP
ENDDO
SendMessage(hWnd, LB_SELECTSTRING, -1, cFirstStr)
CLIENTS->( DBGOTOP() )
RETURN( NIL )
FUNCTION LBGetSelection( hLB )
LOCAL nCtr, cText
nCtr := SendMessage(hLB, LB_GETCURSEL, 0, 0)
cText := SPACE(SendMessage(hLB, LB_GETTEXTLEN, nCtr, 0))
SendMessage(hLB, LB_GETTEXT, nCtr, @cText)
RETURN( cText )
STATIC FUNCTION SetData( hWnd )
SetDlgItemText( hWnd, 101, CLIENTS->LAST_NAME )
SetDlgItemText( hWnd, 102, CLIENTS->FIRST_NAME )
SetDlgItemText( hWnd, 103, CLIENTS->MI )
SetDlgItemText( hWnd, 104, CLIENTS->SSN )
SetDlgItemText( hWnd, 201, CLIENTS->ADDRESS1 )
SetDlgItemText( hWnd, 202, CLIENTS->ADDRESS2 )
SetDlgItemText( hWnd, 203, CLIENTS->CITY )
SetDlgItemText( hWnd, 204, CLIENTS->STATE )
SetDlgItemText( hWnd, 205, CLIENTS->ZIPCODE )
SetDlgItemText( hWnd, 301, CLIENTS->HOMEPHONE)
SetDlgItemText( hWnd, 302, CLIENTS->WORKPHONE)
SetDlgItemText( hWnd, 303, CLIENTS->MOBILE )
SetDlgItemText( hWnd, 304, CLIENTS->FAX )
SetDlgItemText( hWnd, 305, CLIENTS->BEEPER )
SetDlgItemText( hWnd, 401, CLIENTS->ACCTNO )
SetDlgItemText( hWnd, 402, TRANSFORM( CLIENTS->LIMIT,"9,999.99" ) )
SetDlgItemText( hWnd, 403, TRANSFORM( CLIENTS->BALANCE, "9,999.99" ) )
CheckDlgButton( hWnd, 404, IIF( CLIENTS->PREAPPROVD == 'Y', 1, 0 ) )
CheckDlgButton( hWnd, 405, IIF( CLIENTS->PREAPPROVD != 'Y', 1, 0 ) )
SetDlgItemText( hWnd, 406, TRANSFORM( CLIENTS->LASTAMT, "9,999.99") )
SetDlgItemText( hWnd, 407, DTOC( CLIENTS->LASTDATE) )
RETURN( NIL )
STATIC FUNCTION GetData( hWnd, aBuffers )
aBuffers[ 01 ] := GetDlgItmText( hWnd, 101 )
aBuffers[ 02 ] := GetDlgItmText( hWnd, 102 )
aBuffers[ 03 ] := GetDlgItmText( hWnd, 103 )
aBuffers[ 04 ] := GetDlgItmText( hWnd, 104 )
aBuffers[ 05 ] := GetDlgItmText( hWnd, 201 )
aBuffers[ 06 ] := GetDlgItmText( hWnd, 202 )
aBuffers[ 07 ] := GetDlgItmText( hWnd, 203 )
aBuffers[ 08 ] := GetDlgItmText( hWnd, 204 )
aBuffers[ 09 ] := GetDlgItmText( hWnd, 205 )
aBuffers[ 10 ] := GetDlgItmText( hWnd, 301 )
aBuffers[ 11 ] := GetDlgItmText( hWnd, 302 )
aBuffers[ 12 ] := GetDlgItmText( hWnd, 303 )
aBuffers[ 13 ] := GetDlgItmText( hWnd, 304 )
aBuffers[ 14 ] := GetDlgItmText( hWnd, 305 )
aBuffers[ 15 ] := GetDlgItmText( hWnd, 401 )
aBuffers[ 16 ] := VAL( GetDlgItmText( hWnd, 402 ) )
aBuffers[ 17 ] := VAL( GetDlgItmText( hWnd, 403 ) )
aBuffers[ 19 ] := VAL( GetDlgItmText( hWnd, 406 ) )
aBuffers[ 20 ] := CTOD( GetDlgItmText( hWnd, 407) )
RETURN( NIL )
STATIC FUNCTION DoAbout( hWnd )
DialogBox( hInst , "about", hWnd , ;
{|hDlg, msg, wparam, lparam| ;
AboutMode(hDlg, msg, wparam, lparam)})
InvalidateRect( hWnd )
RETURN(NIL)
STATIC FUNCTION AboutMode(hDlgWnd, nMsg, nwParam, nlParam)
DO CASE
CASE nMsg == WM_INITDIALOG
CenterWindow( hDlgWnd )
RETURN(1)
CASE nMsg == WM_COMMAND
DO CASE
CASE nwParam == 1
EndDialog(hDlgWnd,nWparam)
RETURN(1)
ENDCASE
ENDCASE
RETURN( 0 )
// CenterWindow() - Courtesy of Gerald Barber
// Centers a window in it's parent windows client area
// Written by Gerald Barber - thanks Gerald!
//
STATIC FUNCTION CenterWindow(hWnd)
LOCAL hWndParent
LOCAL aChild_[4]
LOCAL iCWidth
LOCAL iCHeight
LOCAL aParent_[4]
LOCAL aPoint_[2]
aChild_ := GetWindowRect(hWnd)
iCWidth := aChild_[3] - aChild_[1]
iCHeight := aChild_[4] - aChild_[2]
hWndParent := GetWindow(hWnd,GW_OWNER)
aParent_ := GetClientRect(hWndParent)
aPoint_ := {(aParent_[3]/2),(aParent_[4]/2)}
ClienttoScreen(hWndParent,aPoint_)
aPoint_[1] -= (iCWidth / 2)
aPoint_[2] -= (iCHeight / 2)
ScreentoClient(hWndParent,aPoint_)
aPoint_[1] := max(0, aPoint_[1])
aPoint_[2] := max(0, aPoint_[2])
ClienttoScreen(hWndParent,aPoint_)
MoveWindow(hWnd,aPoint_[1],aPoint_[2],iCWidth,iCHeight,.F.)
RETURN(NIL)
FUNCTION GetWindowRect(hWnd)
LOCAL cGWR
LOCAL cBuf := space(8)
LOCAL hLib := LoadLibrary("USER.EXE")
cGWR := GetProcAddress(hLib, "GetWindowRect", ;
"Pascal", "void", "HWND, string")
CallDLL(cGWR, hWnd, @cBuf)
FreeLibrary(hLib)
RETURN(bin2a(cBuf, "int[4]"))
STATIC FUNCTION NewRecord( hDlgWnd, aBuffers )
LOCAL GetList := {}
aBuffers := GetBlank()
@ DIALOG hDlgWnd ID 101 GET aBuffers[ 01 ]
@ DIALOG hDlgWnd ID 102 GET aBuffers[ 02 ]
@ DIALOG hDlgWnd ID 103 GET aBuffers[ 03 ]
@ DIALOG hDlgWnd ID 104 GET aBuffers[ 04 ]
@ DIALOG hDlgWnd ID 201 GET aBuffers[ 05 ]
@ DIALOG hDlgWnd ID 202 GET aBuffers[ 06 ]
@ DIALOG hDlgWnd ID 203 GET aBuffers[ 07 ]
@ DIALOG hDlgWnd ID 204 GET aBuffers[ 08 ]
@ DIALOG hDlgWnd ID 205 GET aBuffers[ 09 ]
@ DIALOG hDlgWnd ID 301 GET aBuffers[ 10 ]
@ DIALOG hDlgWnd ID 302 GET aBuffers[ 11 ]
@ DIALOG hDlgWnd ID 303 GET aBuffers[ 12 ]
@ DIALOG hDlgWnd ID 304 GET aBuffers[ 13 ]
@ DIALOG hDlgWnd ID 305 GET aBuffers[ 14 ]
@ DIALOG hDlgWnd ID 401 GET aBuffers[ 15 ]
@ DIALOG hDlgWnd ID 402 GET aBuffers[ 16 ]
@ DIALOG hDlgWnd ID 403 GET aBuffers[ 17 ]
@ DIALOG hDlgWnd ID 406 GET aBuffers[ 19 ]
@ DIALOG hDlgWnd ID 407 GET aBuffers[ 20 ]
RETURN( GetList )
STATIC FUNCTION GetBlank
LOCAL aBuffers := {}
LOCAL nCtr
CLIENTS->( DBGOBOTTOM() )
CLIENTS->( DBSKIP( 1 ) )
FOR nCtr := 1 TO FCOUNT()
AADD( aBuffers, FIELDGET( nCtr ) )
NEXT
RETURN( aBuffers )
STATIC FUNCTION WriteRecord( aBuffers, lAdd )
LOCAL nCtr
IF lAdd
CLIENTS->( DBAPPEND() )
ENDIF
FOR nCtr := 1 TO LEN( aBuffers )
FIELDPUT( nCtr, aBuffers[ nCtr ] )
NEXT
COMMIT
RETURN( NIL )
STATIC FUNCTION SetCBSels( hCBox, aSels )
LOCAL nCtr, nItem
SendMessage( hWnd, CB_RESETCONTENT, 0, 0 )
FOR nCtr := 1 TO LEN( aSels )
SendMessage( hCBox, CB_ADDSTRING, 0, aSels[ nCtr ] )
NEXT
SendMessage(hCBox, CB_SELECTSTRING, -1, aSels[ 1 ] )
RETURN( NIL )