vhScherm ;Tonen en verwerking van in ^SD gedefinieerde schermen [ 03/25/2002 10:44 AM ] ADD(T,B) ;Add to refresh parameters D:'$D(sRT) RESET Set:sRT>T sRT=T Set:sRBsRB:sRB,1:sEndPos),sBeginR=$S(sScrnPos+sTitsEdit Do .Do EDITFLD(sEditNr) .Set:X="." sEditNr=sEdit .Set:X="-" sDir=-1 .Set:sDir<0 sEditNr=sEditNr-2 .Set:sEditNr<0 sDir=1,sEditNr=sEdit,sInp="." Quit SAVE X:$D(^SD("D",sScrn,"S")) ^("S") ; Save Set D=sDelim Goto CLEAN Quit CLEAN New %SC Set sRefresh=$G(sRefresh,0) Set sRT=sScrnPos+sTit,sRB=sEndPos If sRefresh=3 Do REFRESH^vhTERMINA(sScrnPos+sTit,sEndPos),RESET If sRefresh=2,$L(sRR) Do @(sRR) If sRefresh=1 Do ERASE^vhTERMINA(sScrnPos+sTit,1,sEndPos) Quit EDITFLD(sEditNr,sVal) New sFld Set sFld=sEdit(sEditNr) Set sFR=sScrnDef(sFld) Quit:$P(sFR,"`",12)["D" Set sFmt=$P(sFR,"`",8) Do DISPENR(sFR,sEditNr,1) Do EDFLD^vhScherm2 Do DISPVAL(sFld,sFR) Set FP=sEndPos-3*100+1 Write @F,@F1 Do DISPENR(sFR,sEditNr,0) Quit DISPENR(sFR,sEditNr,Bold) S sXP=$P(sFR,"`",1) S:'sXP sXP=$P(sFR,"`",5) S sYP=$P(sFR,"`",2) S:'sYP sYP=$P(sFR,"`",6)-sPromptL Set:$P(sFR,"`",12)["P" FP=sScrnPos+sXP*100+sYP-2+sPromptL-$S($P(sFR,"`",12)[":":3,1:1) Set:$P(sFR,"`",12)'["P" FP=sScrnPos+sXP*100+sYP-3 Write:'Bold @F,$J(sEditNr,2) Write:Bold @F,@FMTI,$J(sEditNr,2),@FMTi Quit ; Display prompt DISPRM(sFld,sFR,sEditNr) Set:sFld'?1.N sFld=$$NAME(sFld) Set:'$L($G(sFR)) sFR=sScrnDef(sFld) Quit:$P(sFR,"`",4)["H" S sXP=$P(sFR,"`",1) S:'sXP sXP=$P(sFR,"`",5) If sNoClear=2,sScrnPos+sXP>sEndR!(sScrnPos+sXPsEndR!(sScrnPos+$P(sFR,"`",5)240 $P(sFmt,"`",4)="" If $P(sFmt,"`",2)="B" Do Quit .;Format FETCH TRANS : sStoreOpt`sEditOpt`Reference`StoreLengte`Refs`ParamLocal`InsertMenu .New sTop,sLeft,sRight,sBot,sStOpt,sEdOpt,sRef,sRefs,sParLoc .Set sTop=sScrnPos+$P(sFR,"`",5) .Set sLeft=$P(sFR,"`",6) .Set sRight=sScr("KOL") .Set sBot=sTop-1+(sLen\(sRight-sLeft+1)) .Set sStOpt=$P(sScrnDef(sFld,"F"),"`",1) .Set sEdOpt=$P(sScrnDef(sFld,"F"),"`",2) .Set sRef=$P(sScrnDef(sFld,"F"),"`",3) .Set sRefs=$P(sScrnDef(sFld,"F"),"`",5) .Set sParLoc=$P(sScrnDef(sFld,"F"),"`",6) .Do:'$L(sParLoc) DISPLAY^vhBIGEDIT(sTop_";"_sLeft_";"_sBot_";"_(sRight-1),sRef,$S($P(sFR,"`",12)["R":"I",1:""),sStOpt,$TR(sEdOpt,"EA","")_"P",sRefs) .Do:$L(sParLoc) DISPLAY^vhBIGEDIT(sTop_";"_sLeft_";"_sBot_";"_(sRight-1),sRef,$S($P(sFR,"`",12)["R":"I",1:""),sStOpt,$TR(sEdOpt,"EA","")_"P",sRefs,.@sParLoc) .Write @FMTCL Do WRITE($P(sFR,"`",5),$P(sFR,"`",6),$$FKOL^vhRtn2(sFmt),$P(sFR,"`",12),sLen) Quit WRITE(X,Y,Val,Attrib,sLen) New sFmtO,sFmtA,sWrap If $L(Val),$G(sScr("VT"))=1 Set Val=$$FLATASCI^vhRtn1(Val) Set (sFmtO,sFmtA)="" If Attrib'["C"!$L($TR(Val," ")) Do .S:Attrib["B" sFmtO=","_FMTB,sFmtA=","_FMTb .S:Attrib["U" sFmtO=sFmtO_","_FMTU,sFmtA=sFmtA_","_FMTu .S:Attrib["R" sFmtO=sFmtO_","_FMTI,sFmtA=sFmtA_","_FMTi .S:Attrib["K" sFmtO=sFmtO_","_FMTK,sFmtA=sFmtA_","_FMTk Set FP=sScrnPos+X*100+Y Write:$L(sFmtO) @$E(sFmtO,2,99) If $G(sLen)>240 Do .Do WRAP^vhRtn1(sScr("KOL")-2,"Val","",.sWrap,"") .Do FILL^vhTERMINA(FP\100,FP#100,FP\100+(sLen\sScr("KOL"))-1,sScr("KOL")," ","") .For sI=1:1:$S(sWrap>(sLen\sScr("KOL")):sLen\sScr("KOL"),1:sWrap) Write @F,sWrap(sI) Set FP=FP+100 Else Write @F,Val Write:$L(sFmtA) @$E(sFmtA,2,99) Quit EDITID(sEditNr) Quit $$FLDID($G(sEdit(sEditNr))) FLDID(sFld) New Name Set Name="" If sFld,$D(sScrnDef(sFld)) Set Name=$P(sScrnDef(sFld),"`",15) Quit Name NAME(Fld) New sI,sFld Set sFld="" For sI=1:1:$O(sScrnDef(""),-1) If Fld=$P(sScrnDef(sI),"`",15) Set sFld=sI Quit Quit sFld FLDLIST(sFldList) New sI,sFld If sFldList="?" Set sFldList=";" For sI=1:1 Quit:'$D(sScrnDef(sI)) Set sFldList=sFldList_sI_";" Else Set sFldList=";"_$G(sFldList)_";" For Quit:sFldList'[";;" Set sFldList=$P(sFldList,";;")_";"_$P(sFldList,";;",2,99) For sI=2:1:$L(sFldList,";")-1 Do .Set sFld=$P(sFldList,";",sI) .Quit:$D(sScrnDef(sFld)) .Set sFld=$$NAME(sFld),$P(sFldList,";",sI)=sFld For Quit:sFldList'[";;" Set sFldList=$P(sFldList,";;")_";"_$P(sFldList,";;",2,99) Quit $P(sFldList,";",2,$L(sFldList,";")-1) GET(sFld,Trans) ; Opvragen van de waarde van een veld New sFR,X,S Set:sFld'?1.N sFld=$$NAME(sFld) Set sFR=sScrnDef(sFld) Set X="",S=$P(sFR,"`",7) Set:$P(sFR,"`",8)["S" S=$P(S,";") Quit:'$L(S) If S?1.N!(S?1.E1"."1.N) Do .New i,p,s .Set:S?1.N S="1."_S .Set s=$P(S,".",1,$L(S,".")-1),p=$P(S,".",$L(S,".")) .For i=1:1:$L(s,".") Set $P(s,".",i)=""""_$P(s,".",i)_"""" .Set s=$TR(s,".",",") .Xecute "Set X=$P($G(sFL("_s_")),D,"_p_")" Else Xecute "Set X="_S I $G(Trans) X:$D(^SD("D",sScrn,"E",sFld,"I")) "S X="_^("I") ; Fetch transform Quit X PUT(sFld,X,NoDisp,Trans) ; Plaatsen van een waarde en eventueel herteken van een veld New sFR,S Set:sFld'?1.N sFld=$$NAME(sFld) Set sFR=sScrnDef(sFld) I $G(Trans) X:$D(^SD("D",sScrn,"E",sFld,"P")) ^("P") ; Put transform Set S=$P(sFR,"`",7) Set:$P(sFR,"`",8)["S" S=$P(S,";") Quit:'$L(S) If S?1.N!(S?1.E1"."1.N) Do .New i,p,s .Set:S?1.N S="1."_S .Set s=$P(S,".",1,$L(S,".")-1),p=$P(S,".",$L(S,".")) .For i=1:1:$L(s,".") Set $P(s,".",i)=""""_$P(s,".",i)_"""" .Set s=$TR(s,".",",") .Xecute "Set $P(sFL("_s_"),D,"_p_")=X" Else Xecute "Set "_S_"=X" Do:'$G(NoDisp) DISPVAL(sFld,sFR) Quit PUTLIST(sFldList,X,NoDisp,Trans) ; Plaatsen van een waarde in meerdere velden en eventueel herteken For Quit:sFldList="" Do:$L($P(sFldList,";")) PUT($P(sFldList,";"),X,$G(NoDisp),$G(Trans)) Set sFldList=$P(sFldList,";",2,99) Quit ; POS(sFld,Absolute) ; Positiebepaling van een veld (indien 'Absolute tov de scherm beginpositie) New sFR,sPrompt,sValue Set Absolute=$G(Absolute) Set:sFld'?1.N sFld=$$NAME(sFld) Set sFR=sScrnDef(sFld) Set sPrompt=$P(sFR,"`",1,2),sValue=$P(sFR,"`",5,6) Set:$P(sPrompt,"`")="" $P(sPrompt,"`")=$P(sValue,"`") Set:$P(sPrompt,"`",2)="" $P(sPrompt,"`",2)=$P(sValue,"`",2)-sPromptL Set:'Absolute $P(sPrompt,"`")=$P(sPrompt,"`")+sScrnPos,$P(sValue,"`")=$P(sValue,"`")+sScrnPos Quit $TR(sPrompt_D_sValue,"`",";") ; sOptie : Zie vhPOPUP met extra parameter ; P : Do PUT^vhScherm(sFld,sPop) (conditioneel) ; p : Do PUT^vhScherm(sFld,sPop) (altijd) ; sScrn : optioneel, default huidig scherm ; sFld : optioneel, default huidig field ; sTitel : optioneel, default label van field POP(sScrn,sFldName,sOptie,sTitel,sGrp,sId,sOldSel,sKeys,sNoRefr) New sFR,sPos,sLine,sColom,sPop Set sEr=-1 If $L($G(sScrn)) New %SC,sScrnHfd,sScrnW,sDelim,sXP,sYP,sModT,sDispOnly,sEdit,sInp,sEditNr,sDir,X,sEXT,sEr,sFmt,sOLD,sPromptL,sScrnPos,sTit,sEndPos,sScrnDef Do INIT Set:$G(sFld)="" sFld=$S(sFldName?1.N:sFldName,1:$$NAME(sFldName)) Set sFR=sScrnDef(sFld) Set:'$D(sTitel) sTitel=$P(sFR,"`",3) If $L(sTitel),"$"""[$E(sTitel) X "S sTitel="_sTitel Set sPos=$$POS(sFld),sLine=$P($P(sPos,D,2),";"),sColom=$P($P(sPos,D,2),";",2) Set sPop=$$PI^vhPOPUP(sLine_";"_sColom,sOptie,sTitel,sGrp,sId,$G(sOldSel),$G(sKeys),$G(sNoRefr)) If sOptie["P"!(sOptie["p") Do .Set:$D(sDir) sDir=$S(zb="CANC":-1,1:1) .If $G(sDir)'=-1 Do ..If sPop'=$G(sOldSel) Set %SC=1 Do:sOptie'["p" PUT^vhScherm(sFld,sPop) ..Do:sOptie["p" PUT^vhScherm(sFld,sPop) Quit sPop FETCHPOP(sGrp,sId,sSel,sOptie) Quit $$DISPSTR^vhPOPUP("P",sGrp_";"_sId,sSel,sOptie) PUTATTR(sFldList,Prompt,Val) New Attr,I,sFld For Set sFld=$P(sFldList,";"),sFldList=$P(sFldList,";",2,999) Quit:sFld="" Do .Set:sFld'?1.N sFld=$$NAME(sFld) .If $L(Prompt) Do ..Set Attr=$P(sScrnDef(sFld),"`",4) ..For I=1:1:$L(Prompt) Set:Attr'[$E(Prompt,I) Attr=Attr_$E(Prompt,I) ..Set $P(sScrnDef(sFld),"`",4)=Attr .If $L(Val) Do ..Set Attr=$P(sScrnDef(sFld),"`",12) ..For I=1:1:$L(Val) Set:Attr'[$E(Val,I) Attr=Attr_$E(Val,I) ..Set $P(sScrnDef(sFld),"`",12)=Attr Quit REMATTR(sFldList,Prompt,Val) New Attr,Find,I,sFld For Set sFld=$P(sFldList,";"),sFldList=$P(sFldList,";",2,999) Quit:sFld="" Do .Set:sFld'?1.N sFld=$$NAME(sFld) .If $L(Prompt) Do ..Set Attr=$P(sScrnDef(sFld),"`",4) ..For I=1:1:$L(Prompt) Set Find=$F(Attr,$E(Prompt,I)) Set:Find $E(Attr,Find-1)="" ..Set $P(sScrnDef(sFld),"`",4)=Attr .If $L(Val) Do ..Set Attr=$P(sScrnDef(sFld),"`",12) ..For I=1:1:$L(Val) Set Find=$F(Attr,$E(Val,I)) Set:Find $E(Attr,Find-1)="" ..Set $P(sScrnDef(sFld),"`",12)=Attr Quit FIELDPAR(sScrn,sFld,sPar) ; Parameters van een veld New %SC,sFR,sScrnHfd,sScrnW,sDelim,sXP,sYP,sModT,sDispOnly,sEdit,sInp,sEditNr,sDir,sEXT,sEr,sFmt,sOLD,sPromptL,sScrnPos,sTit,sEndPos,sScrnDef Do INIT Set:sFld'?1.N sFld=$$NAME(sFld) Set sFR=$S(sFld:sScrnDef(sFld),1:"") Quit @("$P(sFR,""`"","_$G(sPar,"1,99")_")")