**BRegieAE.prg - Regie-Zentrum fr Bestattungsverwaltung // Verwaltung der Versicherungs-Adressen #include "Gra.ch" #include "Xbp.ch" #include "Appevent.ch" #include "Appedit.ch" #include "Appbrow.ch" #include "Font.ch" #include "Dmlb.ch" FUNCTION AdressEingabe( oDlg1 ) LOCAL oDlg, nEvent, mp1, mp2, oXbp, oBrowse, oEdit, cVersKZ := Trim(" "), cVersName := Trim(" ") 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() PRIVATE oCB, oAEDA, oSle0, oSle, ANAM, GR //+16.04.2009 11:08 ANAM SELECT 5 // cVerskz := 5->verskz oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo ) oDlg:tasklist := .T. oDlg:title := "Eingabe/Žnderung von Versicherungs-Adressen" oDlg:maxButton := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, {10,int(30*nV)}, {int(770*nH),int(500*nV)} ) //+28.07.2013 13:37ïalle nH gesetzt 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_BLUE ) oDlg:drawingArea:setColorBG( XBPSYSCLR_TRANSPARENT ) oCB := oDlg:drawingArea oAEDA := oDlg:drawingArea oAEDA:cargo := oDlg nBo := Int(255*nV) // Lage des Mittelstreifens nSBy := 45 nSEy := 45 cVerskz := Space(5); cVersName := Space(10) oXbp := XbpStatic():new( oDlg:drawingArea, , {int(5*nH),nBo}, {int(70*nH),int(25*nV)}) oXbp:caption := "Suche Name:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:helpLink := MagicHelpLabel():New(290) oXbp:create() oSle0 := XbpGet():new( oDlg:drawingArea, , {int(80*nH),nBo}, {int(80*nH),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle0:bufferLength := 10 oSle0:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle0:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle0:group := XBP_WITHIN_GROUP oSle0:dataLink := {|x| IIf( PCOUNT()==0, cVersName, cVersName := x ) } oSle0:helpLink := MagicHelpLabel():New(290) oSle0:create():setData(cVersName) oDlg:addEditControl( oSle0 ) oXbp := XbpStatic():new( oDlg:drawingArea, , {int(160*nH),nBo}, {int(80*nH),int(25*nV)}) oXbp:caption := "Suche Kennz.:" oXbp:clipSiblings := .T. oXbp:options := XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT oXbp:helpLink := MagicHelpLabel():New(291) oXbp:create() oSle := XbpGet():new( oDlg:drawingArea, , {int(240*nH),nBo}, {int(70*nH),int(25*nV)}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } ) oSle:bufferLength := 5 oSle:setInputFocus := {|mp1,mp2,obj| HiliteSle( obj ) } oSle:killInputFocus := {|mp1,mp2,obj| DeHiliteSle( obj ) } oSle:group := XBP_WITHIN_GROUP oSle:dataLink := {|x| IIf( PCOUNT()==0, cVersKZ, cVersKZ := x ) } oSle:helpLink := MagicHelpLabel():New(291) oSle:create():setData(cVerskz) oDlg:addEditControl( oSle ) // jetzt folgt die Erzeugung der Eingabefelder oEdit := AdressFF():new( oAEDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vers", -100, 299, 5 ) oEdit:CREATE( oAEDA,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vers", -100, 299, 5 ) oEdit:SingleZeile[1]:postblock := {|o| oDlg:isIndexUnique( 1, PadR(Trim(o:editBuffer()),5) ) } oEdit:SingleZeile[1]:validate := oEdit:SingleZeile[1]:postblock AEval( oEdit:editControls, {|x| oDlg:addEditControl( x ) } ) // AEval( oEdit:appendControls, {|x| oDlg:addAppendControl( x ) } ) // bis hierhin geht die Erzeugung der Eingabefelder // oFocus := SetAppFocus( oSle0 ) oDlg:setModalState( XBP_DISP_APPMODAL ) oDlg:show() oCtrl := XbpGetController():new( oDlg ) oCtrl:create() oCtrl:READ( , .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_RETURN IF oXbp == oSle0 PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[9]) ENDIF IF oXbp == oSle PostAppEvent( xbeP_Activate,,, oEdit:DruckKnopf[8]) ENDIF CASE mp1 == xbeK_ESC PostAppEvent( xbeP_Close) CASE mp1 == xbeK_ALT_F9 IF ConfirmBox( oBEDA, "Abbrechen mit ", ; "Alle Kennzeichen in Kleinbuchstaben?", ; XBPMB_YESNO, ; XBPMB_WARNING, ; XBPMB_DEFBUTTON2 ) ; = XBPMB_RET_YES DbSuspendNotifications() GO TOP DO WHILE !Eof() Satzsp() 5->verskz := Lower(5->verskz) DbRUnlock() DbSkip() ENDDO DbResumeNotifications() GO TOP DbSkip() oFocus := SetAppFocus( oSle0 ) ENDIF CASE mp1 == xbeK_F1 ModalDialog( (cDatver+"f1_AE.dbf"), "Bedienungshinweise", oAEDA, 680*nH, 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 &nOldArea RETURN .T. FUNCTION AdressNeu(oDlg1) 5->(DbAppend()) 5->(DbGotop()) 5->(DbSkip(0)) SetAppFocus( oDlg1:setOwner():childFromName( 5->(FieldPos( "verskz" )) ) ) // oFocSle := SetAppFocus() // wieso diese Zeile bei Kuellx aktiv?? RETURN .T. FUNCTION AdressEntf(oDlg1) IF ConfirmBox( oDlg1, "Soll der Datensatz gel”scht werden?", ; "Datensatz l”schen", ; XBPMB_YESNO, ; XBPMB_QUESTION ) == XBPMB_RET_YES Satzsp( oCB ) 5->(DbDelete()) 5->(DbSkip(-1)) RETURN .T. ENDIF RETURN .T. FUNCTION AdressSuch( oDlg1, cSuchFeld ) LOCAL oDlg, nEvent, mp1, mp2, oBrowse, cVerskz := Trim(" ") 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 nOldArea := Select(), oFocus := SetAppFocus() LOCAL lFlucht := .F., nRec := RecNo(), cSuchWort := "" // 7.2.2005 LOCAL oCB (nOldArea)->(DbSuspendNotifications()) SELECT 5 oDlg := AKDialog():new( AppDesktop(), oDlg1:cargo ) oDlg:tasklist := .T. oDlg:title := "Versicherungsadresse suchen" oDlg:maxButton := .F. oDlg:border := XBPDLG_RAISEDBORDERTHIN_FIXED oDlg:create(,, {10*nH,30*nV}, {int(330*nH),int(250*nV)} ) oDlg:drawingArea:setColorBG( GRA_CLR_DARKCYAN ) oCB := oDlg:drawingArea oCB:cargo := oDlg 5->(DbSuspendNotifications()) IF Upper(cSuchFeld) = "NAME1" cSuchFeld := oSle0:getData() 5->(DbSetFilter( {|| IIf( !Empty(cSuchFeld),Upper(Trim(cSuchFeld))," " )$Upper(5->name1) } )) IIf( !(5)->(Bof()), 5->(DbGotop()), ) ELSEIF Upper(cSuchFeld) = "VERSKZ" cVerskz := Trim( oDlg1:childFromName( 5->(FieldPos( cSuchFeld )) ):getData() ) cVerskz := IIf(!Empty(Trim(oSle:getData())),Trim( oSle:getData() ),cVerskz) // cVerskz := Trim( oSle:getData() ) // zum Suchen ungeeignet! 5->(DbSeek( cVerskz, .T. )) ELSE oDlg:destroy() (5)->(DbResetNotifications()) Select &nOldArea (nOldArea)->(DbResetNotifications()) (nOldArea)->(DbSkip(0) ) SetAppFocus( oFocus ) RETURN .F. ENDIF // jetzt folgt die Erzeugung der Eingabefelder oBrowse := AdressFF():new( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vers",300,399, 5 ) oBrowse:CREATE( oCB,oDlg, {330*nH,0}, {440*nH,475*nV},,, nBz, "s_vers",300,399, 5 ) oBrowse:BrowseFeld[1]:show() // 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 == xbeM_LbDblClick .AND. SetAppFocus():isDerivedFrom( "XbpBrowse" ) // IF nEvent == xbeM_LbDblClick .AND. oXbp:isDerivedFrom( "XbpColumn" ) IF nEvent == xbeBRW_ItemSelected PostAppEvent( xbeP_Close) ENDIF IF nEvent == xbeP_Keyboard DO CASE CASE mp1 >= Asc("A") .and. mp1 <= Asc("z") // 7.2.2005 cSuchWort += Chr(mp1) DbSeek( cSuchWort, .T. ) IF !Found() DbSkip(-1) ENDIF oBrowse:BrowseFeld[1]:refreshAll() 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 // 5->(DbResetNotifications()) oDlg:setModalState( XBP_DISP_MODELESS ) oDlg:destroy() /// 5->(DbClearFilter()) cVerskz := 5->verskz 5->(DbResetNotifications()) // 16.12.2004 von 5Zeilen vorher Select &nOldArea (nOldArea)->(DbResetNotifications()) IF lFlucht = .T. (nOldArea)->(DbGoto(nRec)) ENDIF (nOldArea)->(DbSkip(0) ) SetAppFocus( oFocus ) RETURN .T. FUNCTION AdressBrief( oDlg1, name1, name2, strasse, plz_ort ) LOCAL nOldArea := Select() , oDlg LOCAL cText := cTextDatei := cAuf := Space(6) LOCAL cTitle := "Textbezeichnung eingeben :" LOCAL nXsize := 350, nYsize := 250 LOCAL Dummy := DbUseArea(.T.,,"C:\HDBE\mwstdat") LOCAL nZei := 5 + Val( Substr( mwstdat->f12,1,1 ) ) LOCAL nTab1 := 5 + Val( Substr( mwstdat->f12,2,1 ) ) LOCAL nTab2 := Val( Substr( mwstdat->f12,3,1 ) ) LOCAL nTab3 := Val( Substr( mwstdat->f12,4,1 ) ) LOCAL nTab4 := Val( Substr( mwstdat->f12,5,1 ) ) mwstdat->(DbCloseArea()) SELECT &nOldArea // cTextDatei := Trim( ModalDialog( cAuf, cTitle, oDlg1, nXsize, nYsize ) ) + ".TXT" oDlg := XbpFileDialog():new() oDlg:title := "W„hlen Sie einen Textblock (oder ESC fr keinen)" oDlg:create() cTextDatei := oDlg:open( "*.txt" ) SET MARGIN TO 0 Set( _SET_DEVICE, "PRINTER" ) set ( _SET_PRINTFILE, "auftadr.txt" ) cLPTSCR := "S" // n”tig, wenn Ausdruck auf LPTA @ nZei,0 say ConvToAnsiCP( name1 ) @ ++nZei,0 say ConvToAnsiCP( name2 ) @ ++nZei,0 say ConvToAnsiCP( strasse ) ++nZei @ ++nZei,0 say ConvToAnsiCP( plz_ort ) nZei := nZei + 5 // @ nZei,60 say date() @ nZei,0 say Replicate(Chr(9),nTab1)+DtoC(date()) @ ++nZei,0 say "Betr. Sterbefall: " @ nZei,20 say Replicate(Chr(9),nTab2)+ConvToAnsiCP( Trim( 1->anrede ) ) + " " + ; ConvToAnsiCP( Trim( 1->vorname ) ) + " " + ; ConvToAnsiCP( Trim( 1->name ) ) IF name1 != 1->ansp_anr @ ++nZei,0 say "Auftraggeber:" @ nZei,20 say Replicate(Chr(9),nTab3)+ConvToAnsiCP( Trim( 1->ansp_anr ) ) + " " + ; ConvToAnsiCP( Trim( 1->ansp_vname ) ) + " " + ; ConvToAnsiCP( Trim( 1->ansp_name ) ) @ ++nZei,0 say Replicate(Chr(9),nTab4)+ConvToAnsiCP( Trim( 1->ansp_str ) ) + ", " + ; ConvToAnsiCP( Trim( 1->ansp_ort ) ) ++nZei @ ++nZei,0 say "Sehr geehrte Damen und Herren," + Chr(13) + Chr(13) ELSE ++nZei ++nZei @ ++nZei,0 say "Sehr geehrte" + IIf(1->ansp_anr="Herr","r "," ") + ; Trim( 1->ansp_anr ) + " " + ConvToAnsiCP( Trim( 1->ansp_name ) ) + "," + Chr(13) + Chr(13) ENDIF ++nZei ++nZei IF !Empty( cTextDatei ) cText := MemoRead( cTextDatei ) nMaxLines := MlCount( cText, 60 ) FOR n:=1 TO nMaxLines @++nZei,0 SAY Trim( MemoLine( cText, 65, n ) ) NEXT ENDIF // ? RunShell (" /C START WordPad.exe Auftadr.txt","Command.com") set ( _SET_PRINTFILE, "" ) SET ( _SET_DEVICE, "SCREEN" ) ? RunShell (" /C START "+cTextProg+" Auftadr.txt",cComCom) RETURN .T. FUNCTION AdressKuvert( name1, name2, strasse, plz_ort ) nOldArea := Select() select 9 use mwstdat nZnam := Val( Substr( 9->f13,1,2 ) ) nSnam := Val( Substr( 9->f13,4,2 ) ) nZadr := Val( Substr( 9->f14,1,2 ) ) nSadr := Val( Substr( 9->f14,4,2 ) ) use set device to printw IF cDrucker == "HP" @ 0,0 say Chr(27)+"&l1O" ENDIF @ nZadr,nSadr say name1 @ ++nZadr,nSadr say name2 @ ++nZadr,nSadr say strasse @ ++nZadr,nSadr say plz_ort IF cDrucker == "HP" @ ++nZadr,0 say Chr(27)+"&l0O" ENDIF EJECT Set device to screen SELECT &nOldArea RETURN .T. CLASS AdressFF FROM DialogFF EXPORTED: VAR VArea METHOD INIT METHOD CREATE METHOD notify ENDCLASS METHOD AdressFF: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 := cAdrBM ::VArea := nA ::BEArea := {} AAdd( ::BEArea, oParent ) ::BENr := Len( ::BEArea ) RETURN self METHOD AdressFF: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 AdressFF: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