**BRegieKSo.prg - Regie-Zentrum fr Bestattungsverwaltung // Verwaltung der Kassen-Texten #include "Gra.ch" #include "Xbp.ch" #include "Appevent.ch" #include "Appedit.ch" #include "Appbrow.ch" #include "Font.ch" #include "Dmlb.ch" FUNCTION KassenTextEingabe( oDlg1, cDruck, aPos, ASize ) LOCAL oDlg, nEvent, mp1, mp2, oXbp, oBrowse LOCAL oCtrl, oFocus := SetAppFocus(), aEditControls := {} LOCAL aPP := { { XBP_PP_FGCLR , GRA_CLR_BLACK } , ; { XBP_PP_BGCLR , GRA_CLR_WHITE } } LOCAL aPPSle := { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } LOCAL aPPTxt := { { XBP_PP_FGCLR , GRA_CLR_BLACK } , ; { XBP_PP_BGCLR , XBPSYSCLR_DIALOGBACKGROUND } } LOCAL aSizeDesktop := AppDesktop():currentSize() LOCAL nBSb := aSizeDesktop[1] LOCAL nBSh := aSizeDesktop[2] // folgende Zahlen-Werte basieren auf 800x600: // LOCAL nV := nBSb/800 // Korrekturfaktor fr tats„chliche Aufl”sung LOCAL nBo := 400*nV //, nBz := 25*nV LOCAL nOldArea := Select() LOCAL lFlucht := .F., nFlucht // PRIVATE nBezZeil := 1 PRIVATE bezZ1 := "bez" , bezZ2 := "bez2" // Artikel in Art-> PRIVATE bZ1 := "1=1" , bZ2 := NIL // Artikel in Serie-> PRIVATE oCB, oKTDA, oSle0, oSle, oEdit, cTxNr := Trim(" "), cTx := Trim(" ") aPos := IIf(Empty(aPos),{10,30*nV},aPos) ASize:= IIf(Empty(ASize),{770*nV,500*nV},ASize) cSertemp := "se8"+LTrim(Str(Int(Seconds()/10))) cXsertemp := "se8X"+LTrim(Str(Int(Seconds()/10))) // SELECT 18 // IF Upper(cDruck) == "BL_KAS" // USE kbtext index xkbtext // COPY TO (cSertemp) // USE (cSertemp) EXCLUSIVE // INDEX ON txnr TO (cXsertemp) // ELSEIF Upper(cDruck) == "BL_KOG" // USE ogtext index xogtext // COPY TO (cSertemp) // USE (cSertemp) EXCLUSIVE // INDEX ON txnr TO (cXsertemp) // ENDIF SELECT 8 COPY TO (cSertemp) SELECT 18 USE (cSertemp) EXCLUSIVE INDEX ON txnr TO (cXsertemp) GO TOP oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo ) oDlg:tasklist := .T. oDlg:title := "Eingabe/Žnderung von Standardtexten fr die Kasse" oDlg:maxButton := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, aPos, ASize ) SetAppFocus(oDlg) // Fenster muá den Focus haben, damit Parts ihn dann kriegen k”nnen! oDlg:lockUpdate(.T.) // damit der Bildaufbau unsichtbar bleibt // oDlg:drawingArea:setColorBG( GRA_CLR_CYAN ) oDlg:drawingArea:setColorBG( XBPSYSCLR_TRANSPARENT ) oCB := oDlg:drawingArea oKTDA := oDlg:drawingArea oKTDA:cargo := oDlg nBo := Int(255*nV) // Lage des Mittelstreifens nSBy := 45 nSEy := 45 // jetzt folgt die Erzeugung der Eingabefelder oEdit := KassTextFF():new( oKTDA,oDlg, {330*nV,0}, {440*nV,475*nV},,, nBz, "s_kast", 1, 299, 18 ) oEdit:CREATE( oKTDA,oDlg, {330*nV,0}, {440*nV,475*nV},,, nBz, "s_kast", 1, 299, 18 ) AEval( oEdit:editControls, {|x| oDlg:addEditControl( x ) } ) // AEval( oEdit:appendControls, {|x| oDlg:addAppendControl( x ) } ) // bis hierhin geht die Erzeugung der Eingabefelder oDlg:setModalState( XBP_DISP_APPMODAL ) oCtrl := XbpGetController():new( oDlg ) oCtrl:create() oCtrl:READ( 1, .F. ) * Shortcuts initialisieren oDlg:InitShortCuts( oDlg ) oDlg:lockUpdate(.F.) oDlg:invalidateRect() DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_ESC nFlucht := ConfirmBox( oCB, "Žnderungen speichern?", ; "Standardtexte fr Kasse beenden.", ; XBPMB_YESNOCANCEL, ; XBPMB_QUESTION ) IF nFlucht == XBPMB_RET_YES lFlucht := .F. PostAppEvent( xbeP_Close) ELSEIF nFlucht == XBPMB_RET_NO lFlucht := .T. PostAppEvent( xbeP_Close) ELSE LOOP ENDIF CASE mp1 == xbeK_F1 ModalDialog( (cDatver+"f1_AS.dbf"), "Bedienungshinweise", oASDA, 680*nV, 460*nV ) CASE mp1 == xbeK_F10 lEinfg := .F. PostAppEvent( xbeP_Close,,,oDlg) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO oDlg:setModalState( XBP_DISP_MODELESS ) // DbDeRegisterClient(oEdit) oEdit:destroy() oDlg:destroy() SetAppFocus( oFocus ) SELECT 18 IF lFlucht == .F. // ESC-Taste: lFlucht = .T. GO TOP // DELETE ALL FOR Empty( 18->zeile ) PACK USE // schlieáen der TEMP-Datei SELECT 8 IF Upper(cDruck) == "BL_KAS" USE kbtext EXCLUSIVE SET INDEX TO xkbtext ELSEIF Upper(cDruck) == "BL_KOG" USE ogtext EXCLUSIVE SET INDEX TO xogtext ENDIF ZAP APPEND FROM (cSertemp) ELSE USE // schlieáen der TEMP-Datei ENDIF FErase( cDatver+cSertemp+".dbf" ) FErase( cDatver+cXSertemp+".ntx" ) Select &nOldArea RETURN .T. FUNCTION KassTextNeu(oDlg1) 18->(DbAppend()) 18->(DbGotop()) 18->(DbSkip(0)) SetAppFocus( oDlg1:setParent():childFromName( 18->(FieldPos( "txnr" )) ) ) RETURN .T. FUNCTION KassTextEntf(oDlg1) IF ConfirmBox( oDlg1, "Soll der Datensatz gel”scht werden?", ; "Datensatz l”schen", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_YES Satzsp( oCB ) 18->(DbDelete()) 18->(DbSkip(0)) RETURN .T. ENDIF RETURN .T. FUNCTION KassTextDruck( oDlg1 ) LOCAL nZei := 6 SET DEVICE TO PRINTW 18->(DbGotop()) @ 2,8 SAY "Liste der Standardtexte fr die Kasse:" @ 4,8 SAY "Tx-Nr. Text Einn. Ausg." DO WHILE !Eof() @ nZei,6 SAY 18->txnr @ nZei,10 SAY 18->tx @ nZei,50 SAY 18->&e_n @ nZei,60 SAY 18->&a_g SKIP nZei := IIf( nZei>60, 6, ++nZei ) ENDDO EJECT SET DEVICE TO SCREEN 18->(DbGotop()) 18->(DbSkip(0)) RETURN .T. CLASS KassTextFF FROM DialogFF EXPORTED: VAR VArea METHOD INIT METHOD CREATE METHOD notify METHOD KassTextSuch ENDCLASS METHOD KassTextFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA ) ::DialogFF:INIT( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA ) ::Fancy := cSerieBM ::VArea := nA ::BEArea := {} AAdd( ::BEArea, oParent ) ::BENr := Len( ::BEArea ) RETURN self METHOD KassTextFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA ) ::DialogFF:CREATE( oParent, oOwner, aPos, ASize, aPP, lVisible, nBz, cFF, nAnf, nEnd, nA ) (nA)->(DbRegisterClient(self)) // reicht es, wenn das Fenster als Ganzes registriert ist?? RETURN self METHOD KassTextFF:notify( nEvent, mp1, mp2 ) LOCAL nRec, oFocus, i IF nEvent == xbeDBO_Notify // Notify-Ereignis IF mp1 == DBO_MOVE_DONE // Skip ist beendet IF !SetAppFocus():isDerivedFrom( "XbpBrowse" ) .AND. Len(::BrowseFeld) > 0 (::VArea)->(DbSuspendNotifications()) nRec := (::VArea)->(RecNo()) FOR i := 1 TO Len(::BrowseFeld) ::BrowseFeld[i]:refreshAll() NEXT (::VArea)->(DbGoto( nRec )) (::VArea)->(DbResetNotifications()) ENDIF ENDIF ENDIF RETURN self METHOD KassTextFF:KassTextSuch( oDlg1, cProg, nAnf, nEnd, nA ) LOCAL oDlg, nEvent, mp1, mp2, oBrowse //, cTxNr := Trim(" ") LOCAL nOldArea := Select(), oFocus := SetAppFocus() LOCAL lFlucht := .F., nRec := RecNo(), oDasObj := oFocSle PRIVATE oCB (nOldArea)->(DbSuspendNotifications()) SELECT (nA) oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo ) oDlg:tasklist := .T. oDlg:title := "Kassentexte suchen" oDlg:maxButton := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, {10*nV,30*nV}, {int(330*nV),int(250*nV)} ) oDlg:drawingArea:setColorBG( GRA_CLR_DARKCYAN ) oCB := oDlg:drawingArea oCB:cargo := oDlg (nA)->(DbSuspendNotifications()) IF oDasObj:cargo = "cTxnr" (nA)->(DbSeek( Trim(oDasObj:getData()), .T. )) ELSEIF oDasObj:cargo = "cTx" (nA)->(DbSetFilter( {|| Upper(Trim(oDasObj:getData()))$Upper((nA)->tx) } )) IIf( !(nA)->(Bof()), (nA)->(DbGotop()), ) ENDIF // jetzt folgt die Erzeugung der Eingabefelder oBrowse := KassTextFF():new( oCB,oDlg, {330*nV,0}, {440*nV,475*nV},,, nBz, cProg, nAnf, nEnd, nA ) oBrowse:CREATE( oCB,oDlg, {330*nV,0}, {440*nV,475*nV},,, nBz, cProg, nAnf, nEnd, nA ) // bis hierhin geht die Erzeugung der Eingabefelder oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() SetAppFocus( oBrowse:BrowseFeld[1] ) nEvent := xbeP_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) IF nEvent == xbeBRW_ItemSelected PostAppEvent( xbeP_Close) ENDIF IF nEvent == xbeP_Keyboard DO CASE CASE mp1 == xbeK_RETURN .or. mp1 == xbeK_F10 PostAppEvent( xbeP_Close) CASE mp1 == xbeK_ESC lFlucht := .T. PostAppEvent( xbeP_Close) ENDCASE ENDIF oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO (nA)->(DbResetNotifications()) oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() /// (nA)->(DbClearFilter()) Select &nOldArea (nOldArea)->(DbResetNotifications()) IF lFlucht = .T. (nOldArea)->(DbGoto(nRec)) ENDIF (nOldArea)->(DbSkip(0)) SET ORDER TO 1 SetAppFocus( oFocus ) RETURN self