home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 June
/
PCWorld_2002-06_cd.bin
/
Software
/
Komercni
/
xbase
/
express
/
exd17208.r04
/
exp17
/
Samples
/
Xclipdoc.prg
< prev
next >
Wrap
Text File
|
2002-01-30
|
20KB
|
771 lines
#INCLUDE "dcdialog.ch"
#INCLUDE "dcprint.ch"
#INCLUDE "appevent.ch"
#INCLUDE "dcbitmap.ch"
#include 'dmlb.ch'
#include "fileio.ch"
#DEFINE cDocName aApp[1]
#DEFINE dDocDate aApp[2]
#DEFINE cDesc aApp[3]
#DEFINE cComments aApp[5]
#DEFINE oToolBar aApp[6]
#DEFINE oBrowse aApp[7]
#DEFINE lAddMode aApp[8]
#DEFINE oDocName aApp[9]
#DEFINE aGetList aApp[10]
#DEFINE aPres aApp[11]
#DEFINE lCaptureMode aApp[12]
#DEFINE xBuffer aApp[13]
#DEFINE aTimerEvent aApp[14]
#DEFINE oDlg aApp[15]
#DEFINE oStatic1 aApp[16]
#DEFINE oBitMap1 aApp[17]
#DEFINE oStatic2 aApp[18]
#DEFINE oText2 aApp[19]
#DEFINE xBitMap aApp[20]
#DEFINE cDocType aApp[21]
#DEFINE cSavedDocType aApp[22]
#DEFINE oAddButton aApp[23]
#DEFINE oStatic3 aApp[24]
#DEFINE oDocSay aApp[25]
#DEFINE oDlgWindow aApp[26]
#DEFINE lMDIApp aApp[27]
#DEFINE cTitle aApp[28]
#DEFINE oDialogWindow aApp[29]
FIELD DOC_NAME, DOC_DATE, DESC
FUNCTION XClipDoc( oDialog )
LOCAL GetList := {}, aStru, aApp[30], GetOptions, aCoords
SET PATH TO ..\DATA
aGetList := GetList
IF !File('CLIPDOC.DBF')
aStru := { ;
{ 'DOC_NAME' , 'C', 30, 0 }, ;
{ 'DOC_DATE' , 'D', 8, 0 }, ;
{ 'DESC' , 'C', 50, 0 }, ;
{ 'COMMENTS' , 'C', 100, 0 }, ;
{ 'DOC_TYPE' , 'C', 1, 0 }, ;
{ 'BITMAP' , 'V', 4, 0 } }
dbCreate('CLIPDOC.DBF',aStru,'FOXCDX')
ENDIF
SET DELETED ON
USE CLIPDOC VIA "FOXCDX" SHARED
IF !File('CLIPDOC.CDX')
INDEX ON DOC_NAME TAG 'DOC_NAME' TO CLIPDOC.CDX
INDEX ON DOC_DATE TAG 'DOC_DATE' TO CLIPDOC.CDX
INDEX ON DESC TAG 'DESC' TO CLIPDOC.CDX
ENDIF
SET INDEX TO CLIPDOC.CDX
OrdSetFocus('DOC_NAME')
SET DATE FORMAT TO 'mm/dd/yyyy'
LoadFields(aApp,.f.)
cDocType := ' '
lAddMode := .f.
lCaptureMode := .f.
aTimerEvent := SetTimerEvent()
cTitle := 'ClipBoard Document Capture Utility'
aPres := ;
{ { XBP_PP_COL_HA_FGCLR, GRA_CLR_WHITE }, /* Header FG Color */ ;
{ XBP_PP_COL_HA_BGCLR, GRA_CLR_DARKGRAY }, /* Header BG Color */ ;
{ XBP_PP_COL_DA_ROWSEPARATOR, XBPCOL_SEP_DOTTED }, /* Row Sep */ ;
{ XBP_PP_COL_DA_COLSEPARATOR, XBPCOL_SEP_DOTTED }, /* Col Sep */ ;
{ XBP_PP_COL_DA_FGCLR, GRA_CLR_BLACK }, /* Row FG Color */ ;
{ XBP_PP_COL_DA_BGCLR, GRA_CLR_WHITE } /* Row BG Color */ ;
}
@ 1,2 DCBROWSE oBrowse ALIAS 'CLIPDOC' SIZE 44,10 ;
ITEMMARKED {||LoadFields(aApp,.t.,.f.)} ;
PRESENTATION aPres ;
WHEN {||!lAddMode}
DCBROWSECOL FIELD CLIPDOC->DOC_NAME PARENT oBrowse ;
HEADER 'Doc Name' WIDTH 9 ;
SORT {||OrdSetFocus('DOC_NAME')}
DCBROWSECOL FIELD CLIPDOC->DOC_DATE PARENT oBrowse ;
HEADER 'Date' WIDTH 6 ;
SORT {||OrdSetFocus('DOC_DATE')}
DCBROWSECOL FIELD CLIPDOC->DESC PARENT oBrowse ;
HEADER 'Description' WIDTH 20 ;
SORT {||OrdSetFocus('DESC')}
@ 1, 47 DCSTATIC TYPE XBPSTATIC_TYPE_RAISEDBOX ;
OBJECT oStatic1 SIZE 25,10 ;
HIDE {||!(cDocType='B' .OR. cSavedDocType='B')} ;
EVAL {|o|o:lbdown := {||PrintDocument(aApp,2)}}
DCBITMAP CLIPDOC->bitmap PARENT oStatic1 AUTOSCALE
@ 1, 47 DCSTATIC TYPE XBPSTATIC_TYPE_RAISEDBOX ;
OBJECT oStatic2 SIZE 25,10 ;
HIDE {||!(cDocType='T' .OR. cSavedDocType='T')}
@ 0,0 DCMULTILINE xBitMap PARENT oStatic2 ;
SIZE 25,10 ;
NOWORDWRAP ;
NOVERTSCROLL ;
NOHORIZSCROLL ;
EVAL {|o|o:lbdown := {||PrintDocument(aApp,2)}}
@ 11.5,2 DCSTATIC TYPE XBPSTATIC_TYPE_RAISEDBOX ;
SIZE 70, 9 OBJECT oStatic3
@ .5,2 DCSAY 'Document Name' GET cDocName ;
PICT '@!' ;
PARENT oStatic3 ;
SAYSIZE 14 SAYRIGHT ;
SAYOBJECT oDocSay ;
GETOBJECT oDocName ;
VALID {||Validate(aApp,1)}
@ 1,0 DCSAY 'Document Date' GET dDocDate ;
SAYSIZE 14 SAYRIGHT ;
RELATIVE oDocSay ;
PARENT oStatic3 ;
POPUP {|d|DC_PopDate(d)} ;
VAlID {||!Empty(dDocDate)}
@ 2,0 DCSAY 'Description' GET cDesc ;
PARENT oStatic3 ;
RELATIVE oDocSay ;
SAYSIZE 14 SAYRIGHT GETSIZE 40
@ 3,0 DCSAY 'Comments:' PARENT oStatic3 ;
RELATIVE oDocSay
@ 4,0 DCMULTILINE cComments SIZE 66,4 PARENT oStatic3 ;
RELATIVE oDocSay
/* ----- Toolbar ----- */
@ 1, 74 DCTOOLBAR oToolBar SIZE 9,18.3 ;
BUTTONSIZE 9,1.2 ;
TYPE XBPSTATIC_TYPE_TEXT
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Top' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_T ;
ACTION {||dbGoTop(),LoadFields(aApp)} ;
WHEN {||!lAddMode}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Previous' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_P ;
ACTION {||dbSkip(-1),LoadFields(aApp)} ;
WHEN {||!lAddMode}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Next' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_N ;
ACTION {||dbSkip(1),LoadFields(aApp)} ;
WHEN {||!lAddMode}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Bottom' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_B ;
ACTION {||dbGoBottom(),LoadFields(aApp)} ;
WHEN {||!lAddMode}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Save' ;
TOOLTIP 'Save Changes ; to file' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_S ;
ACTION {||SaveFields(aApp)} ;
WHEN {||TestChanged(aApp)}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Add' ;
TOOLTIP 'Add a new Docment Record' ;
OBJECT oAddButton ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_A ;
ACTION {||AddMode(aApp)}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Delete' ;
TOOLTIP 'Delete Selected Docment' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_A ;
ACTION {||_Delete(aApp)}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION 'Pac&k' ;
TOOLTIP 'Pack the file;Permanently Remove;all Deleted Docments' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_K ;
ACTION {||_Pack(aApp)}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Clip' ;
PARENT oToolBar ;
TOOLTIP 'Capture Clipboard bitmap to Selected record' ;
ACTION {||MonitorClipboard(aApp)} ;
WHEN {||!lAddMode} ;
ACCELKEY xbeK_ALT_C
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION 'Pr&int' ;
PARENT oToolBar ;
TOOLTIP 'Print the document' ;
ACTION {||PrintDocument(aApp,1)} ;
WHEN {||!lAddMode} ;
ACCELKEY xbeK_ALT_I
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION 'Pre&view' ;
PARENT oToolBar ;
ACTION {||PrintDocument(aApp,2)} ;
TOOLTIP 'Preview the document on the screen' ;
WHEN {||!lAddMode} ;
ACCELKEY xbeK_ALT_V
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION 'Captu&re' ;
PARENT oToolBar ;
TOOLTIP {||IIF(lCaptureMode,'Turn off Capture',;
'Enable Capture Mode (grab images from Clipboard)')} ;
ACTION {||SetCaptureMode(aApp)} ;
WHEN {||!lAddMode} ;
ACCELKEY xbeK_ALT_R
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION '&Help' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_H ;
ACTION {||_Help(aApp)}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCADDBUTTON CAPTION 'E&xit' ;
PARENT oToolBar ;
ACCELKEY xbeK_ALT_X ;
ACTION {||PostAppEvent(xbeP_Close,,,oDialogWindow)}
DCADDBUTTON TYPE XBPSTATIC_TYPE_RAISEDRECT ;
SIZE 9,.1 PARENT oToolBar
DCGETOPTIONS ;
BITMAP BITMAP_PINSTRIPE ;
CASCADE
DCREAD GUI ;
APPWINDOW oDialog ;
TITLE cTitle ;
HANDLER DlgHandler REFERENCE aApp ;
OPTIONS GetOptions ;
EVAL {|o|oDialogWindow:=o} ;
FIT
CLOSE DATABASES
RETURN nil
/* ------------------------- */
STATIC FUNCTION ;
DlgHandler ( nEvent, mp1, mp2, oXbp, oDialog, GetList, aApp )
IF !Empty(xBuffer) .AND. !lAddMode .AND. lCaptureMode
AddMode(aApp)
ENDIF
RETURN DCGUI_NONE
/* -------------------- */
STATIC FUNCTION AddMode( aApp )
LOCAL nSaveRec, oDialog
IF !lAddMode
lAddMode := .t.
nSaveRec := RecNo()
dbGoBottom()
dbSkip()
LoadFields(aApp,.t.)
dbGoto(nSaveRec)
oAddButton:setCaption('C&ancel')
DC_GetRefresh(aGetList)
SetAppFocus(oDocName)
DC_ClearEvents()
IF cSavedDocType = 'B'
DC_BitMapDraw(oStatic1,xBuffer)
ENDIF
ELSE
xBuffer := nil
lAddMode := .f.
oAddButton:setCaption('&Add')
LoadFields(aApp)
IF lCaptureMode
oDialog := _DialogWindow(aApp)
oDialog:setFrameState(XBPDLG_FRAMESTAT_MINIMIZED)
ENDIF
ENDIF
RETURN nil
/* --------------------- */
STATIC FUNCTION Validate ( aApp, nMode )
LOCAL nEvent, oNextXbp
nEvent := DC_NextAppEvent(nil,nil,@oNextXbp)
IF nEvent = xbeP_SetInputFocus .AND. Valtype(oNextXbp) = 'O' .AND. ;
oNextXbp == oAddButton
RETURN .t.
ENDIF
IF nMode = 1 // validate doc name
IF Empty(cDocName)
DC_WinAlert('Name cannot be empty!')
RETURN .f.
ENDIF
RETURN .t.
ENDIF
RETURN .t.
/* -------------------- */
STATIC FUNCTION LoadFields( aApp, lRefresh, lRefreshBrowse )
DEFAULT lRefresh := .t., ;
lRefreshBrowse := .t.
cDocName := CLIPDOC->doc_name
dDocDate := CLIPDOC->doc_date
cDesc := CLIPDOC->desc
cComments := CLIPDOC->comments
xBitMap := CLIPDOC->bitmap
cDocType := CLIPDOC->doc_type
IF Empty(dDocDate)
dDocDate := Date()
ENDIF
IF lRefresh
IF lRefreshBrowse
DC_GetRefresh(aGetList)
ELSE
DC_GetRefresh(aGetList,nil,DCGETREFRESH_TYPE_EXCLUDE,{GETLIST_BROWSE})
ENDIF
IF cDocType = 'B'
DC_BitMapDraw(oStatic1,CLIPDOC->bitmap)
ENDIF
ENDIF
RETURN nil
/* -------------------- */
STATIC FUNCTION SaveFields( aApp )
LOCAL oDialog
IF lAddMode
IF !AddRec()
RETURN .f.
ENDIF
ELSE
IF !RecLock()
RETURN .f.
ENDIF
ENDIF
REPL CLIPDOC->doc_name WITH cDocName
REPL CLIPDOC->doc_date WITH dDocDate
REPL CLIPDOC->desc WITH cDesc
REPL CLIPDOC->comments WITH cComments
IF !Empty(xBuffer)
REPL CLIPDOC->bitmap WITH xBuffer
REPL CLIPDOC->doc_type WITH cSavedDocType
ENDIF
cSavedDocType := ' '
xBuffer := nil
dbRUnlock()
lAddMode := .f.
DC_GetRefresh(aGetList)
IF lCaptureMode
oDialog := _DialogWindow(aApp)
oDialog:setFrameState(XBPDLG_FRAMESTAT_MINIMIZED)
ENDIF
RETURN nil
/* -------------------- */
STATIC FUNCTION TestChanged( aApp )
RETURN ;
cDocName # CLIPDOC->doc_name .OR. ;
dDocDate # CLIPDOC->doc_date .OR. ;
cDesc # CLIPDOC->desc .OR. ;
cComments # CLIPDOC->comments
/* ----------------- */
FUNCTION addrec ()
APPEND BLANK
IF !NETERR()
RETURN (.T.)
ENDIF
DC_Winalert('File is in use. Try again later!')
RETURN .F.
/* ----------------- */
FUNCTION reclock ()
IF dbRLock()
RETURN .t.
ENDIF
DC_Winalert('Record is in use. Try again later!')
RETURN .F.
/* --------------- */
STATIC PROCEDURE SetCaptureMode( aApp )
LOCAL bTimerEvent, oDialog
bTimerEvent := {|| CaptureClipBoard( aApp )}
lCaptureMode := !lCaptureMode
DC_WinAlert('Capture Mode is ' + IIF(lCaptureMode,'ON','OFF'))
IF lCaptureMode
SetTimerEvent( 100, bTimerEvent )
oDialog := _DialogWindow(aApp)
oDialog:setFrameState(XBPDLG_FRAMESTAT_MINIMIZED)
ELSE
SetTimerEvent( aTimerEvent[1], aTimerEvent[2] )
ENDIF
RETURN
/* ---------------*/
STATIC PROCEDURE CaptureClipBoard( aApp )
LOCAL oBitMap, aFormats, oClipBoard, oDialog
// Open clipboard and determine the data formats contained in it
IF !Empty(xBuffer)
RETURN
ENDIF
oClipBoard := XbpClipBoard():new():Create()
oClipBoard:open()
aFormats := oClipBoard:queryFormats()
oDialog := _DialogWindow(aApp)
IF AScan( aFormats, XBPCLPBRD_BITMAP ) > 0
oBitMap := oClipBoard:getBuffer( XBPCLPBRD_BITMAP )
xBuffer := oBitMap:setBuffer()
cSavedDocType := 'B'
DC_BitmapDraw(oStatic1,xBuffer)
oClipBoard:clear()
oDialog:setFrameState(XBPDLG_FRAMESTAT_NORMALIZED)
ELSEIF AScan( aFormats, XBPCLPBRD_TEXT ) > 0
xBuffer := oClipBoard:getBuffer( XBPCLPBRD_TEXT )
cSavedDocType := 'T'
oClipBoard:clear()
oDialog:setFrameState(XBPDLG_FRAMESTAT_NORMALIZED)
xBitMap := xBuffer
ENDIF
oClipBoard:close()
oClipBoard:Destroy()
RETURN
/* --------------- */
STATIC PROCEDURE MonitorClipBoard( aApp )
LOCAL aFormats, oClipBoard, oBitMap
// Open clipboard and determine the data formats contained in it
IF !RecLock()
RETURN
ENDIF
oClipBoard := XbpClipBoard():new():Create()
oClipBoard:open()
aFormats := oClipBoard:queryFormats()
IF AScan( aFormats, XBPCLPBRD_BITMAP ) > 0
oBitMap := oClipBoard:getBuffer( XBPCLPBRD_BITMAP )
oClipBoard:clear()
REPL CLIPDOC->doc_type WITH 'B'
REPL CLIPDOC->bitmap WITH oBitMap:setBuffer()
oBitMap:SetBuffer(oBitMap:SetBuffer())
DC_WinAlert('BitMap has been saved!')
DC_BitmapDraw(oStatic1,CLIPDOC->bitmap)
ELSEIF AScan( aFormats, XBPCLPBRD_TEXT ) > 0
xBuffer := oClipBoard:getBuffer( XBPCLPBRD_TEXT )
oClipBoard:clear()
REPL CLIPDOC->doc_type WITH 'T'
REPL CLIPDOC->bitmap WITH xBuffer
DC_WinAlert('Text has been saved!')
ELSEIF AScan( aFormats, XBPCLPBRD_METAFILE ) > 0
xBuffer := oClipBoard:getBuffer( XBPCLPBRD_METAFILE )
oClipBoard:clear()
DC_WinAlert('Metafile was retrieved!')
ELSE
DC_WinAlert('Nothing in Clipboard to Save!')
ENDIF
oClipBoard:close()
oClipBoard:Destroy()
xBuffer := nil
UNLOCK
DC_GetRefresh(aGetList)
RETURN
/* ------------------------- */
STATIC FUNCTION PrintDocument( aApp, nPrintMode )
LOCAL oPrinter, cScrn, i, cMemo, nLineCount, cMemoLine, nRow
DC_ClearEvents()
IF nPrintMode = 1 // Standard Print
DCPRINT ON SIZE 60,100 TO oPrinter FONT '14.Arial'
ELSEIF nPrintMode = 2 // Preview
DCPRINT ON SIZE 60,100 TO oPrinter PREVIEW FONT '14.Arial' HIDE
ENDIF
BEGIN SEQUENCE
IF Valtype(oPrinter) # 'O' .OR. !oPrinter:lActive
BREAK
ENDIF
IF nPrintMode # 2
cScrn := DC_WaitOn()
ENDIF
@ 3,1 DCPRINT SAY 'Document Name: ' FONT '12.Courier'
@ DC_PrinterRow(oPrinter), DC_PrinterCol(oPrinter) ;
DCPRINT SAY CLIPDOC->doc_name PRINTER oPrinter
@ 4.5,1 DCPRINT SAY 'Document Date: ' FONT '12.Courier'
@ DC_PrinterRow(oPrinter), DC_PrinterCol(oPrinter) ;
DCPRINT SAY CLIPDOC->doc_date PRINTER oPrinter
@ 6,1 DCPRINT SAY 'Document Desc: ' FONT '12.Courier'
@ DC_PrinterRow(oPrinter), DC_PrinterCol(oPrinter) ;
DCPRINT SAY CLIPDOC->desc PRINTER oPrinter
IF cDocType = 'B'
@ 8,1,59,98 DCPRINT BITMAP CLIPDOC->bitmap ;
PRINTER oPrinter NOAUTOSCALE
ELSEIF cDocType = 'T'
nRow := 9
DCPRINT FONT '12.Terminal' PRINTER oPrinter
cMemo := CLIPDOC->bitmap
nLineCount := MLCount(cMemo)
FOR i := 1 TO nLineCount
cMemoLine := MemoLine( cMemo, nil, i )
@ nRow,1 DCPRINT SAY cMemoLine PRINTER oPrinter
nRow += 1.5
IF nRow >= 59
nRow := 1
DCPRINT EJECT PRINTER oPrinter
ENDIF
NEXT
DCPRINT EJECT PRINTER oPrinter
ENDIF
IF nPrintMode # 2
DC_Impl(cScrn)
ENDIF
END SEQUENCE
DCPRINT OFF PRINTER oPrinter
RETURN nil
/* ----------------- */
STATIC FUNCTION AutoSeek( a, b, o, oBrow )
SEEK AllTrim(o:EditBuffer())
oBrow:refreshAll()
RETURN nil
/* ----------------------- */
STATIC FUNCTION _Help(aApp)
LOCAL GetList := {}, GetOptions
@ 0,0 DCSAY 'CLIPDOC is an application that captures either Text or BitMap images'
@ 1,0 DCSAY 'that were saved to the Clipboard by any other application and stores'
@ 2,0 DCSAY 'them into a database name CLIPDOC.DBF. The documents can later be'
@ 3,0 DCSAY 'browsed, previewed and/or printed.'
@ 5,0 DCSAY 'Pressing the CLIP button grabs the ClipBoard and saves the document'
@ 6,0 DCSAY 'Pressing the CAPTURE button enables "automatic capture" mode and '
@ 7,0 DCSAY 'minimizes the application on the taskbar. The application constantly'
@ 8,0 DCSAY 'monitors the Clipboard and automatically pops up when something has'
@ 9,0 DCSAY 'been captured by another program.'
@11,0 DCSAY 'Use CLIPDOC for scanning documents and storing them to a database.'
@12,0 DCSAY 'Press CAPTURE, then scan the document with your scanning software and'
@13,0 DCSAY 'save it to the Clipboard. It is recommended that text-only documents'
@14,0 DCSAY 'be scanned as 2-color B/W bitmaps before saving to the Clipboard.'
@15,0 DCSAY 'It will be saved as a much smaller bitmap.'
@17,0 DCSAY 'Use CLIPDOC for capturing screen images for slide-shows and storing'
@18,0 DCSAY 'them to a database. Press CAPTURE, then highlight the desired window'
@19,0 DCSAY 'and press Alt-Print-Scrn to capture to the clipboard'
DCGETOPTIONS SAYWIDTH 560 SAYFONT '12.Helv'
DCREAD GUI ;
FIT ;
BUTTONS DCGUI_BUTTON_EXIT ;
OPTIONS GetOptions ;
TITLE 'ClipBoard Document Capture Utility'
RETURN nil
/* ------------------- */
STATIC FUNCTION _Delete(aApp)
IF DC_MsgBox(,,{'Are you sure you want to delete the selected document?'},,,,.t.)
IF RecLock()
DELETE
UNLOCK
dbSkip(-1)
LoadFields(aApp)
ENDIF
ENDIF
RETURN nil
/* -------------------- */
STATIC FUNCTION _Pack( aApp )
LOCAL lIsShared := dbInfo( DBO_SHARED ), GetList := {}, lOk, ;
nPackMode := 1, cAlias, cScrn, aStru
IF lIsShared
IF DC_MsgBox(,,{'The file must be opened exclusive to Pack.',;
'Close file and reopen exclusive?'},,,,.t.)
dbCloseArea()
USE CLIPDOC VIA 'FOXCDX' NEW EXCLUSIVE
SET INDEX TO CLIPDOC.CDX
ENDIF
ENDIF
lIsShared := dbInfo( DBO_SHARED )
IF !lIsShared
@ 1,1 DCRADIO nPackMode VALUE 1 PROMPT 'Fast Pack'
@ 2,1 DCRADIO nPackMode VALUE 2 PROMPT 'Slow Pack (compress memo fields)'
DCREAD GUI TO lOk FIT ADDBUTTONS ;
TITLE 'Pack Database'
IF !lOk
RETURN nil
ELSEIF nPackMode = 1
dbPack()
dbGoTop()
LoadFields( aApp )
DC_MsgBox('Done!')
ELSEIF nPackMode = 2
IF File('BAKDATA.DBF') .OR. File('BAKDATA.FPT')
IF !DC_MsgBox(,,{'BAKDATA.* file exist. Erase and continue?'},,,,.t.)
RETURN .f.
ENDIF
FErase('BAKDATA.DBF')
FErase('BAKDATA.FPT')
ENDIF
CLOSE
FRename('CLIPDOC.DBF','BAKDATA.DBF')
FRename('CLIPDOC.FPT','BAKDATA.FPT')
USE BAKDATA VIA 'FOXCDX' NEW EXCLUSIVE
aStru := dbStruct()
dbCreate('CLIPDOC.DBF',aStru,'FOXCDX')
CLOSE
USE CLIPDOC VIA 'FOXCDX' NEW EXCLUSIVE
ZAP
Ferase('CLIPDOC.CDX')
cScrn := DC_WaitOn()
APPEND FROM BAKDATA FOR !Deleted() VIA 'FOXCDX'
INDEX ON DOC_NAME TAG 'DOC_NAME' TO CLIPDOC.CDX
INDEX ON DOC_DATE TAG 'DOC_DATE' TO CLIPDOC.CDX
INDEX ON DESC TAG 'DESC' TO CLIPDOC.CDX
DC_Impl(cScrn)
LoadFields( aApp )
DC_MsgBox('Done!')
ENDIF
ENDIF
oBrowse:refreshAll()
RETURN nil
/* --------------------- */
STATIC FUNCTION _DialogWindow( aApp )
LOCAL oDialog
IF Valtype(oDialogWindow) = 'O' .AND. oDialogWindow:isderivedFrom('XbpDialog')
oDialog := oDialogWindow
ELSEIF Valtype(oDlgWindow) = 'O' .AND. oDlgWindow:isderivedFrom('XbpDialog')
oDialog := oDlgWindow
ENDIF
RETURN oDialog