RbBFBlokProjPSIVStrn2008.031ACnmStrnAChpStrnACsvStrnVer1Strn1 Ver2Strn0 Ver3Strn0 RelsStrn0 NnRlStrn0 RegnStrnSVerStrnLVerStrnIVerStrnaiviInt DVewInt R\prTpInt DLanInt CLanInt DEncInt BflgInt IconGrupKEndGInt KMacCStrnBCarStrnMy Application BCMOStrnMy Application BunIStrnBSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnBWinStrnMy Application.exe BMDIInt WcmNStrnWpNmStrnWiNmStrnBL86Strn MyApplication DgCLStrnPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjcVNameStrnApp ContInt paswStrnbClsInt SuprStrn Application flagInt bNtrInt bApOInt CompStrnPDefGrup$KnameStrnMenuBar PValInt /IEndGInt KVwBhGrupKEndGInt KCnstGrupKEncoInt nameStrnkFileQuitShortcut typeInt defnStrnflagInt CInsGrup0KpltfInt langInt defnStrnCmd+Q EndGInt KCInsGrup0KpltfInt langInt defnStrnCtrl+Q EndGInt KEndGInt KCnstGrupKEncoInt nameStrn kFileQuit typeInt defnStrn&Quit flagInt CInsGrup0KpltfInt langInt defnStrnE&xit EndGInt KEndGInt KCnstGrupKEncoInt nameStrn kEditClear typeInt defnStrn&Delete flagInt CInsGrup0KpltfInt langInt defnStrn&Delete EndGInt KCInsGrup0KpltfInt langInt defnStrn&Delete EndGInt KEndGInt KPadnPadnT************************************************************************************BlokpVewR\NameStrnWindow1 ContInt paswStrnbClsInt SuprStrnWindow flagInt bNtrInt CompStrnPDefGrup<KnameStrnImplicitInstanceEncoInt PValStrnTrueEndGInt KPDefGrup0KnameStrnMenuBar PValStrn 798664521 EndGInt KPDefGrup(KnameStrn MacProcID PValInt EndGInt KPDefGrup0KnameStrnMinimizeButton PValStrnTrueEndGInt KPDefGrup4KnameStrnMaximizeButton PValStrnFalse EndGInt KPDefGrup,KnameStrn LiveResize PValStrnTrueEndGInt KPDefGrup0KnameStrn Resizeable PValStrnFalse EndGInt KPDefGrup,KnameStrn CloseButton PValStrnTrueEndGInt KPDefGrup0KnameStrnMenuBarVisible PValStrnTrueEndGInt KPDefGrup0KnameStrn FullScreen PValStrnFalse EndGInt KPDefGrup(KnameStrnVisible PValStrnTrueEndGInt KPDefGrup8KnameStrnTitle EncoInt PValStrnUntitledEndGInt KPDefGrup$KnameStrnBackdropPValStrnEndGInt KPDefGrup(KnameStrn BackColor PValInt EndGInt KPDefGrup0KnameStrn HasBackColorPValStrnFalse EndGInt KPDefGrup0KnameStrn Composite PValStrnFalse EndGInt KPDefGrup$KnameStrnFrame PValInt EndGInt KPDefGrup(KnameStrn MaxHeight PValInt }EndGInt KPDefGrup$KnameStrnMaxWidthPValInt }EndGInt KPDefGrup(KnameStrn MinHeight PValInt @EndGInt KPDefGrup$KnameStrnMinWidthPValInt @EndGInt KPDefGrup$KnameStrnHeight PValInt "EndGInt KPDefGrup$KnameStrnWidth PValInt EndGInt KPDefGrup(KnameStrn Placement PValInt EndGInt KVwBhGrupKVwPrGrupDKNameStrnNameVsblInt PrGpStrnID CPifStrnWindow EndGInt KVwPrGrupLKNameStrn Interfaces VsblInt PrGpStrnID CPifStrnWindow EndGInt KVwPrGrupHKNameStrnSuper VsblInt PrGpStrnID CPifStrnWindow EndGInt KVwPrGrup0KNameStrn Placement VsblInt PrGpStrnPositionPValStrn0 typeStrnInteger vbETStrnEnumCPifStrnWindow EnumGrupKdefnStrn 0 - Default defnStrn1 - Parent Window defnStrn2 - Main Screen defnStrn3 - Parent Window ScreendefnStrn 4 - Stagger EndGInt KEndGInt KVwPrGruppKNameStrnWidth VsblInt PrGpStrnPositionPValStrn300 typeStrnInteger CPifStrnWindow EndGInt KVwPrGruppKNameStrnHeight VsblInt PrGpStrnPositionPValStrn300 typeStrnInteger CPifStrnWindow EndGInt KVwPrGruppKNameStrnMinWidthVsblInt PrGpStrnPositionPValStrn64 typeStrnInteger CPifStrnWindow EndGInt KVwPrGruptKNameStrn MinHeight VsblInt PrGpStrnPositionPValStrn64 typeStrnInteger CPifStrnWindow EndGInt KVwPrGruptKNameStrnMaxWidthVsblInt PrGpStrnPositionPValStrn32000 typeStrnInteger CPifStrnWindow EndGInt KVwPrGrupxKNameStrn MaxHeight VsblInt PrGpStrnPositionPValStrn32000 typeStrnInteger CPifStrnWindow EndGInt KVwPrGrup KNameStrnFrame VsblInt PrGpStrn Appearance PValStrn0 typeStrnInteger vbETStrnEnumCPifStrnWindow EnumGruppKdefnStrn 0 - DocumentdefnStrn1 - Movable Modal defnStrn2 - Modal DialogdefnStrn3 - Floating Window defnStrn 4 - Plain Box defnStrn5 - Shadowed BoxdefnStrn6 - Rounded Window defnStrn7 - Global Floating Window defnStrn8 - Sheet WindowdefnStrn9 - Metal WindowdefnStrn10 - Drawer Window defnStrn11 - Modeless DialogEndGInt KEndGInt KVwPrGrup|KNameStrn Composite VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt KVwPrGrup|KNameStrn HasBackColorVsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt KVwPrGrup|KNameStrn BackColor VsblInt PrGpStrn Appearance PValStrn&hFFFFFFtypeStrnColor CPifStrnWindow EndGInt KVwPrGrupxKNameStrnBackdropVsblInt PrGpStrn Appearance typeStrnPicture vbETStrnPicture CPifStrnWindow EndGInt KVwPrGrupxKNameStrnTitle VsblInt PrGpStrn Appearance PValStrnUntitledtypeStrnString CPifStrnWindow EndGInt KVwPrGruptKNameStrnVisible VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt KVwPrGrup|KNameStrn FullScreen VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt KVwPrGrup|KNameStrnMenuBarVisible VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt KVwPrGrupxKNameStrn CloseButton VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt KVwPrGrup|KNameStrn Resizeable VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt KVwPrGrupxKNameStrn LiveResize VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt KVwPrGrupKNameStrnMaximizeButton VsblInt PrGpStrn Appearance PValStrnFalse typeStrnBoolean CPifStrnWindow EndGInt KVwPrGrup|KNameStrnMinimizeButton VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnWindow EndGInt KVwPrGrupxKNameStrn MacProcID VsblInt PrGpStrn Appearance PValStrn0 typeStrnInteger CPifStrnWindow EndGInt KVwPrGrupxKNameStrnMenuBar VsblInt PrGpStrn Appearance typeStrnMenuBar vbETStrnMenuBar CPifStrnWindow EndGInt KVwPrGrup|KNameStrnImplicitInstanceVsblInt PrGpStrn Appearance PValStrnTruevbETStrnBoolean CPifStrnWindow EndGInt KEndGInt KPadnPadnBlokpMnu/I NameStrnMenuBar1ContInt paswStrnMItmGruppKspmuInt nameStrnFileMenutextStrn&File indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupKspmuInt nameStrnFileQuittextStrn#App.kFileQuit indxInt scutStrn#App.kFileQuitShortcut MiSKStrn#App.kFileQuitShortcut maEnInt EncoInt flagInt SuprStrn QuitMenuItemEndGInt KEndGInt KMItmGrup<KspmuInt nameStrnEditMenutextStrn&Edit indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupKspmuInt nameStrnEditUndotextStrn&Undo indxInt scutStrnCmd+Z MiSKStrnZ MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrup|KspmuInt nameStrntextStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrupKspmuInt nameStrnEditCut textStrnCu&tindxInt scutStrnCmd+X MiSKStrnX MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrupKspmuInt nameStrnEditCopytextStrn&Copy indxInt scutStrnCmd+C MiSKStrnC MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrupKspmuInt nameStrn EditPaste textStrn&Paste indxInt scutStrnCmd+V MiSKStrnV MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrupKspmuInt nameStrn EditClear textStrn#App.kEditClear indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrup|KspmuInt nameStrntextStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KMItmGrupKspmuInt nameStrn EditSelectAll textStrn Select &All indxInt scutStrnCmd+A MiSKStrnA MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt KEndGInt KPadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjw<NameStrnCanvasPlotterGraph ContInt paswStrnbClsInt flagInt bNtrInt CompStrnMethGrup4KnameStrn Constructor CompStrnVsblInt sorcGrupKEncoInt srclStrnSub Constructor() srclStrnredim Points(-1)srclStrnstartdate = new datesrclStrnenddate = new date srclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt KMethGrupKnameStrnAddPointCompStrnVsblInt sorcGrupKEncoInt srclStrn)Sub AddPoint(Punkt as CanvasPlotterPoint) srclStrndim datum as date srclStrnsrclStrnHif Punkt.xValue = nil or Punkt.yValue = nil then // kein gültiger PunktsrclStrnreturn srclStrnend if srclStrnsrclStrn)if ubound(Points) < 0 then //erster Punkt srclStrnsrclStrn"if varType(punkt.yValue) = 13 then srclStrndatum = Punkt.yValuesrclStrnAbsMax = datum.totalseconds srclStrnAbsMin = datum.totalseconds srclStrnelsesrclStrnAbsMax = Punkt.yValue srclStrnAbsMin = Punkt.yValue srclStrnend if srclStrnsrclStrn"if vartype(Punkt.xValue) = 13 then srclStrndatum = Punkt.xValuesrclStrn+startdate.totalseconds = datum.totalseconds srclStrn)enddate.totalseconds = datum.totalseconds srclStrnend if srclStrnend if srclStrnsrclStrnPoints.append Punkt srclStrnsrclStrnsrclStrn"if varType(punkt.yValue) = 13 then srclStrndatum = Punkt.yValuesrclStrn(AbsMax = max(AbsMax, datum.totalseconds)srclStrn(AbsMin = min(AbsMin, datum.totalseconds)srclStrnelsesrclStrn"AbsMax = max(AbsMax, Punkt.yValue) srclStrn"AbsMin = min(AbsMin, Punkt.yValue) srclStrnend if srclStrnsrclStrn"if vartype(Punkt.xValue) = 13 then srclStrndatum = Punkt.xValuesrclStrnDenddate.totalseconds = max(datum.totalseconds, enddate.totalseconds)srclStrnHstartdate.totalseconds = min(datum.totalseconds, startdate.totalseconds)srclStrnend if srclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnPunkt as CanvasPlotterPoint rsltStrnEndGInt KMethGrup`KnameStrnGetPointCompStrnVsblInt sorcGrupKEncoInt srclStrn?Function GetPoint(punktnummer as Integer) As CanvasPlotterPoint srclStrnif ubound(Points) < 0 then srclStrn return nil srclStrn(elseif punktnummer > ubound(Points) thensrclStrnreturn Points(ubound(Points)) srclStrnelseif punktnummer < 0 then srclStrnreturn Points(0)srclStrnelsesrclStrnreturn Points(punktnummer) srclStrnend if srclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnpunktnummer as Integer rsltStrnCanvasPlotterPoint EndGInt KMethGrupKnameStrnSetColorCompStrnVsblInt sorcGruptKEncoInt srclStrnSub SetColor(theColor as Color) srclStrnGraphColor = theColor srclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt shrdInt parmStrntheColor as Color rsltStrnEndGInt KMethGrupKnameStrnGetColorCompStrnVsblInt sorcGruppKEncoInt srclStrnFunction GetColor() As ColorsrclStrnreturn GraphColor srclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnColor EndGInt KMethGrup$KnameStrnGetNumberOfPoints CompStrnVsblInt sorcGrupKEncoInt srclStrn'Function GetNumberOfPoints() As Integer srclStrnreturn ubound(Points)+1 srclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt KMethGrup KnameStrn GetPenWidth CompStrnVsblInt sorcGruppKEncoInt srclStrn!Function GetPenWidth() As Integer srclStrn Return penW srclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt KMethGrup KnameStrn GetPenHeightCompStrnVsblInt sorcGruppKEncoInt srclStrn"Function GetPenHeight() As Integer srclStrn return penH srclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt KMethGrupKnameStrn SetPenWidth CompStrnVsblInt sorcGruptKEncoInt srclStrn!Sub SetPenWidth(width as Integer) srclStrnpenW = abs(width) srclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnwidth as IntegerrsltStrnEndGInt KMethGrupKnameStrn SetPenHeightCompStrnVsblInt sorcGruptKEncoInt srclStrn#Sub SetPenHeight(height as Integer) srclStrnpenH = abs(height) srclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnheight as Integer rsltStrnEndGInt KMethGrupKnameStrnGetGraphNumber CompStrnVsblInt sorcGrupxKEncoInt srclStrn$Function GetGraphNumber() As IntegersrclStrnreturn GraphNumber srclStrn End FunctionEndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt KMethGrup$KnameStrnSetGraphNumber CompStrnVsblInt sorcGrupxKEncoInt srclStrn%Sub SetGraphNumber(number as Integer) srclStrngraphnumber = numbersrclStrnEnd Sub EndGInt KEncoInt AlasStrnflagInt shrdInt parmStrnnumber as Integer rsltStrnEndGInt KMethGrupKnameStrn SetGraphNameCompStrnVsblInt sorcGruplLEncoInt srclStrn Sub SetGraphName(name as String)srclStrnGraphName = namesrclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnname as String rsltStrnEndGInt KMethGrupLnameStrn GetGraphNameCompStrnVsblInt sorcGruptLEncoInt srclStrn!Function GetGraphName() As String srclStrnreturn GraphNamesrclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnString EndGInt LMethGrup8LnameStrn Constructor CompStrnVsblInt sorcGrupLEncoInt srclStrn"Sub Constructor(Number as Integer) srclStrnGraphNumber = numbersrclStrn Constructor() srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnNumber as Integer rsltStrnEndGInt LMethGrupLnameStrn GetStartdateCompStrnVsblInt sorcGruppLEncoInt srclStrnFunction GetStartdate() As date srclStrnreturn startdatesrclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrndateEndGInt LMethGrupLnameStrn GetEnddate CompStrnVsblInt sorcGruppLEncoInt srclStrnFunction GetEnddate() As date srclStrnreturn enddate srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrndateEndGInt LMethGrup L nameStrn GetAbsMax CompStrnVsblInt sorcGruppL EncoInt srclStrnFunction GetAbsMax() As Double srclStrn Return AbsMax srclStrn End FunctionEndGInt L EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnDouble EndGInt L MethGrup L nameStrn GetAbsMin CompStrnVsblInt sorcGruppL EncoInt srclStrnFunction GetAbsMin() As Double srclStrn return AbsMin srclStrn End FunctionEndGInt L EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnDouble EndGInt L MethGrupL nameStrn SortPoints CompStrnVsblInt sorcGruptLEncoInt srclStrn$Sub SortPoints(ascending as boolean)srclStrn'if ascending then srclStrnneg = -1srclStrnpos = 1 srclStrn'else srclStrn'neg = 1srclStrn 'pos = -1 srclStrn'end if srclStrnQuickSort(0, ubound(points))srclStrnsrclStrnif not ascending then srclStrn reverse() srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnascending as booleanrsltStrnEndGInt L MethGruphLnameStrn QuickSort CompStrnVsblInt sorcGrupLEncoInt srclStrn0Sub QuickSort(left as Integer, right as Integer)srclStrndim i, j, v as integer srclStrnsrclStrnif right > left thensrclStrn v = right srclStrn i = left - 1srclStrn j = right srclStrnsrclStrn while true srclStrndo srclStrn i = i + 1 srclStrn%loop until compare(i, v) >= 0 or i>=j srclStrndo srclStrn j = j - 1 srclStrn%loop until compare(j, v) <= 0 or i>=j srclStrnif (i >= j) thensrclStrnexitsrclStrnend if srclStrn swap(i, j) srclStrnwendsrclStrnswap(i, right) srclStrnquicksort(left, i-1)srclStrnquicksort(i+1, right) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn!left as Integer, right as Integer rsltStrnEndGInt LMethGrupLnameStrnswapCompStrnVsblInt sorcGrupLEncoInt srclStrn$Sub swap(i as Integer, j as Integer)srclStrndim p as CanvasPlotterPoint srclStrnsrclStrn p = points(i) srclStrnpoints(i) = points(j) srclStrn points(j) = p srclStrnsrclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrni as Integer, j as Integer rsltStrnEndGInt LMethGrupLnameStrncompare CompStrnVsblInt sorcGrup$LEncoInt srclStrn7Function compare(i as Integer, j as Integer) As Integer srclStrndim di, dj as doublesrclStrndim ii, ij as integer srclStrn dim d as date srclStrnsrclStrn,if vartype(points(i).xvalue) = 13 then 'datesrclStrnsrclStrnd = points(i).xvaluesrclStrndi = d.totalseconds srclStrnd = points(j).xvaluesrclStrndj = d.totalseconds srclStrnif di < dj then srclStrn return neg srclStrnelseif di > dj then srclStrn return pos srclStrnelsesrclStrnreturn 0srclStrnend if srclStrnsrclStrn2elseif vartype(points(i).xvalue) = 2 then 'integer srclStrnsrclStrnii = points(i).xvalue srclStrnij = points(j).xvalue srclStrnif ii < ij then srclStrn return neg srclStrnelseif ii > ij then srclStrn return pos srclStrnelsesrclStrnreturn 0srclStrnend if srclStrnsrclStrn1elseif vartype(points(i).xvalue) = 5 then 'double srclStrnsrclStrndi = points(i).xvalue srclStrndj = points(j).xvalue srclStrnif di < dj then srclStrn return neg srclStrnelseif di > dj then srclStrn return pos srclStrnelsesrclStrnreturn 0srclStrnend if srclStrnsrclStrnelsesrclStrnsrclStrnreturn 0srclStrnsrclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrni as Integer, j as Integer rsltStrnInteger EndGInt LMethGrupLnameStrnreverse CompStrnVsblInt sorcGrupLEncoInt srclStrn Sub reverse() srclStrndim i, j as integer srclStrnsrclStrni = 0 srclStrnj = ubound(points) srclStrnsrclStrn while iNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt L>VwPrGrup`L?NameStrnIndex VsblInt PrGpStrnID PValStrn 2147483648 CPifStrnObject EndGInt L?VwPrGrupHL@NameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt L@VwPrGrupXLANameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt LAVwPrGrupXLBNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt LBEndGInt L=PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjv NameStrnCanvasPlotterException ContInt paswStrnbClsInt SuprStrnRuntimeExceptionflagInt bNtrInt CompStrnMethGrupdLCnameStrn Constructor CompStrnVsblInt sorcGrupLDEncoInt srclStrn9Sub Constructor(theModule as Integer, theType as Integer) srclStrnmyModule = theModulesrclStrntype = theType srclStrnEnd Sub EndGInt LDEncoInt AlasStrnflagInt shrdInt parmStrn(theModule as Integer, theType as IntegerrsltStrnEndGInt LCMethGrupLEnameStrn Constructor CompStrnVsblInt sorcGrupLFEncoInt srclStrn_Sub Constructor(theModule as Integer, theType as Integer, theRealException as RuntimeException) srclStrnmyModule = theModulesrclStrntype = theType srclStrn realException = theRealExceptionsrclStrnEnd Sub EndGInt LFEncoInt AlasStrnflagInt shrdInt parmStrnNtheModule as Integer, theType as Integer, theRealException as RuntimeException rsltStrnEndGInt LEPropGrupLGnameStrnmyModuleCompStrnVsblInt sorcGrup<LHEncoInt srclStrnmyModule As Integer srclStrnEndGInt LHEncoInt declStrnmyModule As Integer flagInt shrdInt EndGInt LGPropGrupLInameStrntypeCompStrnVsblInt sorcGrup8LJEncoInt srclStrntype As Integer srclStrnEndGInt LJEncoInt declStrntype As Integer flagInt shrdInt EndGInt LIPropGrupLKnameStrn realException CompStrnVsblInt sorcGrupLLLEncoInt srclStrn!realException As RuntimeException srclStrnEndGInt LLEncoInt declStrn!realException As RuntimeException flagInt shrdInt EndGInt LKVwBhGrupLMVwPrGrupDLNNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt LNVwPrGrup`LONameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 CPifStrnObject EndGInt LOVwPrGrupHLPNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt LPVwPrGrupXLQNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt LQVwPrGrupXLRNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt LRVwPrGrupxLSNameStrnMessage PrGpStrnBehaviortypeStrnString vbETStrnMultiLineEditor CPifStrnRuntimeExceptionEndGInt LSVwPrGruppLTNameStrn ErrorNumber PrGpStrnBehaviorPValStrn0 typeStrnInteger CPifStrnRuntimeExceptionEndGInt LTVwPrGrupPLUNameStrnmodule PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt LUVwPrGrupLLVNameStrntypePrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt LVEndGInt LMPadnPadn ****************************************************************************************************************************************************************************************************************************************************************************BlokpObju|NameStrn CanvasPlotter ContInt paswStrnbClsInt SuprStrnCanvas flagInt bNtrInt CompStrnHInsGrupLWnameStrn MouseExit CompStrnVsblInt sorcGrupLXEncoInt srclStrnSub MouseExit() srclStrnsrclStrn MouseExit() srclStrnsrclStrn"if Freeze or statusIsPlotting then srclStrnreturn srclStrnend if srclStrnsrclStrnif LegendDrawn then srclStrnRemoveLegend() srclStrnend if srclStrnsrclStrnif nearestPointIsMarked thensrclStrnUnMarkNearestPoint()srclStrnend if srclStrnsrclStrn Exception exc srclStrn Freeze = true srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(28, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LXEndGInt LWHInsGrupLYnameStrnMouseUp CompStrnVsblInt sorcGrupDLZEncoInt srclStrn'Sub MouseUp(X As Integer, Y As Integer) srclStrndim i,temp as integer srclStrndim graph as CanvasPlotterGraph srclStrnsrclStrnif userMouseDownReturn then srclStrn MouseUp X, YsrclStrnend if srclStrnsrclStrnRif not drawLegendTemp or Freeze or statusIsPlotting then //benutzer will es nicht srclStrnreturn srclStrnend if srclStrnsrclStrnUif ubound(graphs) >= 0 and abs(x-mouseDownatX) <= 2 and abs(y-mouseDownAtY) <= 2 then srclStrntemp = ubound(graphs) srclStrnfor i = 0 to temp srclStrn5if graphMask(i).graphics.pixel(x,y) = rgb(0,0,0) then srclStrngraph = graphs(i) srclStrnJMouseUpOnGraph graph.GetGraphNumber,x,y,graph.GetColor, graph.GetGraphName srclStrnend if srclStrnnextsrclStrnend if srclStrnsrclStrn Exception exc srclStrn Freeze = true srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(27, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LZEndGInt LYHInsGrupL[nameStrn MouseMove CompStrnVsblInt sorcGrupL\EncoInt srclStrn)Sub MouseMove(X As Integer, Y As Integer) srclStrndim i,temp as integer srclStrndim LdrawLegend as boolean srclStrndim timing as doublesrclStrnsrclStrnMouseMove X, Y srclStrnsrclStrnKif Freeze or statusIsPlotting or drawLegendTemp = false or isSuspended then srclStrnreturn srclStrnend if srclStrnsrclStrnif ubound(graphMask) >= 0 then srclStrntemp = ubound(graphMask)srclStrnfor i = 0 to temp srclStrn5if graphMask(i).graphics.pixel(x,y) = rgb(0,0,0) then srclStrnLdrawLegend = true srclStrnOverGraph(graphs(i),x,y)srclStrnexitsrclStrnend if srclStrnnextsrclStrnsrclStrnif not LDrawLegend then srclStrnif legendDrawn then srclStrn RemoveLegendsrclStrnend if srclStrnif nearestPointIsMarked thensrclStrnUnMarkNearestPoint srclStrnend if srclStrnend if srclStrnend if srclStrnsrclStrn Exception exc srclStrn Freeze = true srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(26, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt L\EndGInt L[HInsGrupL]nameStrn MouseDown CompStrnVsblInt sorcGruppL^EncoInt srclStrn9Function MouseDown(X As Integer, Y As Integer) As Boolean srclStrn"if Freeze or statusIsPlotting then srclStrnreturn MouseDown(X, Y) srclStrnend if srclStrnsrclStrn$userMouseDownReturn = MouseDown(X,Y)srclStrnsrclStrnmouseDownAtX = xsrclStrnmouseDownAtY = ysrclStrn return true srclStrnsrclStrn Exception exc srclStrn Freeze = true srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(51, 0, exc) srclStrnend if srclStrn End FunctionEndGInt L^EndGInt L]HInsGrup L_nameStrn MouseDrag CompStrnVsblInt sorcGrupL`EncoInt srclStrn)Sub MouseDrag(X As Integer, Y As Integer) srclStrndim drag as dragItemsrclStrndim pic as picture srclStrndim l,t as integer srclStrndim breite, höhe as integersrclStrn"dim DragPaintHookReturn as Picture srclStrnsrclStrnif userMouseDownReturn then srclStrnMouseDrag X, Y srclStrnend if srclStrnsrclStrn"if Freeze or statusIsPlotting then srclStrnreturn srclStrnend if srclStrnsrclStrnSif ubound(graphs) >= 0 and abs(x-mouseDownatX) > 2 and abs(y-mouseDownAtY) > 2 then srclStrnsrclStrnsrclStrn9if ClipMinWidth <= width and ClipMinHeight <= height then srclStrnpic = backdrop srclStrnelsesrclStrn=pic = newPicture(ClipMinWidth,ClipMinHeight,PictureDepthTemp) srclStrnif pic <> nil then srclStrnPlot(pic.graphics, true)srclStrnelsesrclStrnpic = backdrop srclStrnend if srclStrnsrclStrnend if srclStrnsrclStrn(DragPaintHookReturn = DragPaintHook(pic)srclStrnsrclStrn"if DragPaintHookReturn <> nil then srclStrnpic = DragPaintHookReturn srclStrnend if srclStrnsrclStrnif pic = nil then srclStrn'raise new CanvasPlotterException(24, 3) srclStrnend if srclStrnsrclStrnsrclStrnif pic.width > width then srclStrnl = left + (width-pic.width)\2 srclStrnelsesrclStrnl = leftsrclStrnend if srclStrnif pic.height > height then srclStrnt = top + (height-pic.height)\2 srclStrnelsesrclStrnt = top srclStrnend if srclStrnsrclStrn-drag = newdragitem(l,t,pic.width, pic.height) srclStrnsrclStrndrag.picture = pic srclStrnsrclStrn DragHook drag srclStrnsrclStrnif ClippingName <> "" then srclStrn#drag.MacData("clfn") = ClippingName srclStrnend if srclStrnsrclStrn drag.drag srclStrnsrclStrnend if srclStrnsrclStrn Exception exc srclStrnexceptionWhileDrag = true srclStrn Freeze = true srclStrn pic = nil srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(24, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt L`EndGInt L_HInsGruplLanameStrnOpenCompStrnVsblInt sorcGrup(LbEncoInt srclStrn Sub Open() srclStrnExceptionLastTime = new datesrclStrn"ExceptionLastTime.totalseconds = 0 srclStrnsrclStrnReset() srclStrnsrclStrnOpen() srclStrnsrclStrn.If not FontAvailable(noPointsWarningFont) then srclStrnnoPointsWarningFont = "Geneva" srclStrnend if srclStrnsrclStrn%If not FontAvailable(legendFont) then srclStrnlegendFont = "Geneva" srclStrnend if srclStrnsrclStrn$if not FontAvailable(scaleFont) thensrclStrnscaleFont = "Geneva"srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(52, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LbEndGInt LaHInsGruppLcnameStrnPaint CompStrnVsblInt sorcGrup(LdEncoInt srclStrnSub Paint(g As Graphics)srclStrnsrclStrn>if height <> LastCanvasHeight or width <> LastCanvasWidth then srclStrn'g.foreColor = noPointsWarningBkgndColor srclStrng.fillrect 0,0,width, heightsrclStrnPlot() srclStrnend if srclStrnsrclStrnPaint g srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(50, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LdEndGInt LcMethGrup,LenameStrnPlotCompStrnVsblInt sorcGrup LfEncoInt srclStrn*Sub Plot(g as Graphics, isClip as boolean) srclStrndim h as graphics srclStrndim offscreen as picturesrclStrnsrclStrnif statusIsPlotting thensrclStrn%raise new CanvasPlotterException(1,2) srclStrnend if srclStrnsrclStrnif not isClip then srclStrnstatusIsPlotting = true srclStrnFreeze = false srclStrnredim GraphMask(-1) srclStrnend if srclStrnsrclStrn!if not StatusIsExceptionPlot then srclStrnPictureDepthTemp = PictureDepth srclStrndrawLegendTemp = drawLegend srclStrnend if srclStrnsrclStrnif PictureDepthTemp = 0 thensrclStrn PictureDepthTemp=screen(0).depthsrclStrnend if srclStrnsrclStrnif g = graphics thensrclStrnif not visible then srclStrnLastCanvasWidth = -1srclStrnLastCanvasHeight = -1 srclStrnstatusIsPlotting = falsesrclStrnreturn srclStrnend if srclStrnbackdrop = nil srclStrnsrclStrn9offscreen = newPicture(g.width,g.height,PictureDepthTemp) srclStrnsrclStrnif offscreen = nil then srclStrn%raise new CanvasPlotterException(1,1) srclStrnend if srclStrnsrclStrnh = offscreen.graphics srclStrnelsesrclStrnh = g srclStrnend if srclStrnsrclStrn DoDrawInit(h) srclStrnsrclStrnDoDrawBackground(h) srclStrnsrclStrnif ubound(graphs) < 0 then srclStrn Freeze = true srclStrn&h.foreColor = noPointsWarningFontColor srclStrn h.textfont = noPointsWarningFontsrclStrn$h.textsize = noPointsWarningFontSizesrclStrnMh.drawstring noPointsWarning,g.width\10,g.height\3+h.textascent, g.width/10*7 srclStrnelsesrclStrnif DrawBars thensrclStrn DoDrawBars(h) srclStrnend if srclStrnsrclStrnif drawHorizScaleOnTop then srclStrnif drawVertScaleOnTop then srclStrnDoDrawLines(h, isClip) srclStrnDoDrawHorizScale(h) srclStrnif drawVertScale then srclStrnDoDrawVertScale(h) srclStrnend if srclStrnelsesrclStrnif drawVertScale then srclStrnDoDrawVertScale(h) srclStrnend if srclStrnDoDrawLines(h, isClip) srclStrnDoDrawHorizScale(h) srclStrnend if srclStrnelsesrclStrnif drawVertScaleOnTop then srclStrnDoDrawHorizScale(h) srclStrnDoDrawLines(h, isClip) srclStrnif drawVertScale then srclStrnDoDrawVertScale(h) srclStrnend if srclStrnelsesrclStrnDoDrawHorizScale(h) srclStrnif drawVertScale then srclStrnDoDrawVertScale(h) srclStrnend if srclStrnDoDrawLines(h, isClip) srclStrnend if srclStrnend if srclStrnsrclStrnPaintHook h, isClip srclStrnsrclStrnif h = nil then srclStrn%raise new CanvasPlotterException(1,3) srclStrnend if srclStrnend if srclStrnsrclStrnif g = graphics thensrclStrnif visible then srclStrnbackdrop = offscreensrclStrn//LastCanvasWidth = width srclStrn//LastCanvasHeight = height srclStrnelsesrclStrnbackdrop = nil srclStrn//LastCanvasWidth = -1 srclStrn//LastCanvasHeight = -1 srclStrnend if srclStrnend if srclStrnsrclStrnstatusIsPlotting = FalsesrclStrnsrclStrnsrclStrnsrclStrn Exception exc srclStrnoffscreen = nil srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn+raise new CanvasPlotterException(1, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LfEncoInt AlasStrnflagInt shrdInt parmStrn g as Graphics, isClip as booleanrsltStrnEndGInt LeMethGrupLgnameStrnDoDrawBackgroundCompStrnVsblInt sorcGrupLhEncoInt srclStrn#Sub DoDrawBackground(p as Graphics) srclStrnsrclStrnif ubound(graphs) < 0 then srclStrn%p.foreColor=noPointsWarningBkgndColor srclStrnelsesrclStrnp.forecolor=BkgndColor srclStrnend if srclStrnsrclStrn)//if p.foreColor <> rgb(255,255,255) then srclStrnp.fillrect 0,0,p.width,p.height srclStrn//end ifsrclStrnsrclStrnif DrawOutline then srclStrnp.forecolor=OutlineColorsrclStrn#p.drawrect 0,0,p.width-1,p.height-1 srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn+raise new CanvasPlotterException(3, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LhEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LgMethGrupLinameStrn DoDrawLines CompStrnVsblInt sorcGrupLjEncoInt srclStrn1Sub DoDrawLines(p as Graphics, isClip as boolean) srclStrndim graph as integersrclStrn dim graphicsArray(0) as graphicssrclStrnsrclStrn%if drawLegendTemp and not isClip then srclStrnredim graphicsArray(1) srclStrnend if srclStrnsrclStrngraphicsArray(0) = psrclStrnsrclStrnif not isClip then srclStrnif drawLegendTemp then srclStrnredim graphMask(ubound(graphs)) srclStrnelsesrclStrnredim graphMask(-1) srclStrnend if srclStrnend if srclStrnsrclStrn#for graph = ubound(graphs) downto 0 srclStrn&p.penwidth = graphs(graph).GetPenWidth srclStrn(p.penheight = graphs(graph).GetPenHeightsrclStrn$p.foreColor = graphs(graph).GetColorsrclStrnsrclStrn%if drawLegendTemp and not isClip then srclStrn1graphMask(graph) = newPicture(p.width,p.height,1) srclStrnsrclStrnif graphMask(graph) = nil then srclStrn%raise new CanvasPlotterException(7,1) srclStrnend if srclStrnsrclStrn@GraphMask(graph).graphics.penwidth = graphs(graph).GetPenwidth+2srclStrnBGraphMask(graph).graphics.penheight = graphs(graph).GetPenheight+2 srclStrn0GraphMask(graph).graphics.forecolor = rgb(0,0,0)srclStrnsrclStrn,graphicsArray(1) = GraphMask(graph).graphicssrclStrnend if srclStrnsrclStrn+DoDrawOneLine(graphs(graph), graphicsArray) srclStrnnextsrclStrnsrclStrnredim graphicsArray(-1) srclStrnsrclStrn Exception exc srclStrnredim graphicsArray(-1) srclStrnredim graphMask(-1) srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn+raise new CanvasPlotterException(7, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LjEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics, isClip as booleanrsltStrnEndGInt LiMethGrupLknameStrnDoDrawMonthlinesCompStrnVsblInt sorcGrupHLlEncoInt srclStrn#Sub DoDrawMonthlines(p as Graphics) srclStrndim zwischendatum as date srclStrndim x as integersrclStrndim auchDenText as boolean srclStrnsrclStrnp.forecolor = monthColorsrclStrnp.TextFont = scaleFont srclStrnp.TextSize = scaleFontSize srclStrnp.penHeight = scaleLineHeight srclStrnp.penWidth = scaleLineWidth srclStrnsrclStrn=if plotHorizPoints * 1296000 > p.TextHeight then //86400*30/2 srclStrnauchDenText = true srclStrnend if srclStrnsrclStrnzwischendatum = new datesrclStrn1zwischendatum.totalSeconds = enddate.totalseconds srclStrnsrclStrn&//datum auf brauchbaren wert normieren srclStrnzwischendatum.day = 1 srclStrnzwischendatum.hour=0srclStrnzwischendatum.minute=0 srclStrnzwischendatum.second=0 srclStrnsrclStrn// zeichenschleife srclStrn%x=GetXCoordFromDate(zwischendatum, p) srclStrnsrclStrnwhile x >= leftmargin srclStrnsrclStrnif auchdentext then srclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrn8DoDrawXScaleDate(zwischendatum, p, monthColor, x, false)srclStrnelsesrclStrn@if shortLineHeight > 0 and shortLineHeight < plotableHeight thensrclStrn //shortline srclStrnJp.drawline x,p.height-bottomMargin-shortLineHeight,x,p.height-bottomMargin srclStrnelsesrclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrnend if srclStrnend if srclStrnsrclStrn-zwischendatum.month = zwischendatum.month - 1 srclStrn'x = GetXCoordFromDate(zwischendatum, p) srclStrnwendsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn+raise new CanvasPlotterException(8, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LlEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LkMethGrupLmnameStrn DoDrawInit CompStrnVsblInt sorcGrup0LnEncoInt srclStrnSub DoDrawInit(g as Graphics) srclStrndim i as integersrclStrnsrclStrn4plotableHeight = g.height - topMargin - bottomMarginsrclStrn2plotableWidth = g.width - leftMargin - rightMargin srclStrnsrclStrn GetExtrema()srclStrnsrclStrnif ubound(graphs) >= 0 then srclStrnsrclStrn5if startdate.totalseconds = enddate.totalseconds then srclStrnplotHorizPoints = 0 srclStrnelsesrclStrnMplotHorizPoints = plotableWidth/(enddate.totalseconds-startdate.totalseconds) srclStrnend if srclStrnsrclStrnif absmax=absmin then srclStrnplotVertPoints= 1 srclStrnelsesrclStrn-plotVertPoints=plotableHeight/(AbsMax-AbsMin) srclStrnend if srclStrnsrclStrnelsesrclStrnplotHorizPoints = 0 srclStrnplotVertPoints = 1 srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn+raise new CanvasPlotterException(2, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LnEncoInt AlasStrnflagInt shrdInt parmStrn g as Graphics rsltStrnEndGInt LmMethGrupLonameStrnClear CompStrnVsblInt sorcGrupXLpEncoInt srclStrn Sub Clear() srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(5, 2) srclStrnend if srclStrnsrclStrnredim GraphMask(-1) srclStrnredim graphs(-1)srclStrn AbsMax = 0 srclStrn AbsMin = 0 srclStrntypesDetermined = false srclStrnyScaleIsTimeB = false srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn6ExceptionHandler new CanvasPlotterException(5, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LpEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LoMethGrupLqnameStrn SetStartdateCompStrnVsblInt sorcGrupLrEncoInt srclStrn!Sub SetStartdate(theDate as date) srclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(49,2) srclStrnend if srclStrnsrclStrn-startdate.totalseconds = theDate.totalSeconds srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(49, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LrEncoInt AlasStrnflagInt shrdInt parmStrntheDate as date rsltStrnEndGInt LqMethGrupLsnameStrn SetEnddate CompStrnVsblInt sorcGrupLtEncoInt srclStrnSub SetEnddate(theDate as date) srclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(44,2) srclStrnend if srclStrnsrclStrn+enddate.totalseconds = theDate.totalseconds srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(44, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LtEncoInt AlasStrnflagInt shrdInt parmStrntheDate as date rsltStrnEndGInt LsMethGrupXLunameStrnDoDrawWeeklines CompStrnVsblInt sorcGrupLvEncoInt srclStrn"Sub DoDrawWeeklines(p as Graphics) srclStrndim zwischendatum as date srclStrndim x as integersrclStrndim auchDenText as boolean srclStrnsrclStrnp.forecolor = weekColor srclStrnp.TextFont = scaleFont srclStrnp.TextSize = scaleFontSize srclStrnp.penHeight = scaleLineHeight srclStrnp.penWidth = scaleLineWidth srclStrnsrclStrn;if plotHorizPoints * 302400 > p.TextHeight then //86400*7/2 srclStrnauchDenText = true srclStrnend if srclStrnsrclStrnzwischendatum = new datesrclStrnUzwischendatum.totalSeconds = enddate.totalseconds-Modulo(enddate.totalseconds, 86400) srclStrnnzwischendatum.totalseconds = zwischendatum.totalseconds-((zwischendatum.dayofweek+7-FirstWeekDay) mod 7)*86400 srclStrnsrclStrnsrclStrn%x=GetXCoordFromDate(zwischendatum, p) srclStrnsrclStrnwhile x >= leftmargin srclStrnsrclStrnif auchdentext then srclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrn7DoDrawXScaleDate(zwischendatum, p, weekColor, x, false) srclStrnelsesrclStrn@if shortLineHeight > 0 and shortLineHeight < plotableHeight thensrclStrn //shortline srclStrnJp.drawline x,p.height-bottomMargin-shortLineHeight,x,p.height-bottomMargin srclStrnelsesrclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrnend if srclStrnend if srclStrnsrclStrn@zwischendatum.totalseconds = zwischendatum.totalseconds - 604800srclStrn0if zwischendatum.day = 1 and drawMonthLines thensrclStrn@zwischendatum.totalseconds = zwischendatum.totalseconds - 604800srclStrnend if srclStrn'x = GetXCoordFromDate(zwischendatum, p) srclStrnwendsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(15, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LvEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LuMethGrup0LwnameStrnDoDrawDaylines CompStrnVsblInt sorcGrupLxEncoInt srclStrn!Sub DoDrawDaylines(p as Graphics) srclStrndim zwischendatum as date srclStrndim x as integersrclStrndim auchDenText as boolean srclStrnsrclStrnp.forecolor = dayColor srclStrnp.TextFont = scaleFont srclStrnp.TextSize = scaleFontSize srclStrnp.penHeight = scaleLineHeight srclStrnp.penWidth = scaleLineWidth srclStrnsrclStrn8if plotHorizPoints * 43200 > p.TextHeight then //86400/2srclStrnauchDenText = true srclStrnend if srclStrnsrclStrnzwischendatum = new datesrclStrnUzwischendatum.totalSeconds = enddate.TotalSeconds-Modulo(enddate.totalseconds, 86400) srclStrnsrclStrn'x = GetXCoordFromDate(zwischendatum, p) srclStrnsrclStrnwhile x >= leftmargin srclStrnsrclStrnif auchdentext then srclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrn6DoDrawXScaleDate(zwischendatum, p, dayColor, x, false) srclStrnelsesrclStrn@if shortLineHeight > 0 and shortLineHeight < plotableHeight thensrclStrn //shortline srclStrnJp.drawline x,p.height-bottomMargin-shortLineHeight,x,p.height-bottomMargin srclStrnelsesrclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrnend if srclStrnend if srclStrnsrclStrn?zwischendatum.totalseconds = zwischendatum.totalseconds - 86400 srclStrn'x = GetXCoordFromDate(zwischendatum, p) srclStrnwendsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(14, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LxEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LwMethGrup LynameStrnAddPointCompStrnVsblInt sorcGrup HLzEncoInt srclStrnASub AddPoint(Punkt as CanvasPlotterPoint, GraphNumber as Integer) srclStrndim graph as CanvasPlotterGraph srclStrndim i,temp as integer srclStrn dim d as date srclStrnsrclStrnif punkt.yvalue = nil then srclStrn'punkt.yvalue = 0 srclStrn// 2.2.2 Experimentell! srclStrnreturn srclStrnend if srclStrnsrclStrnif statusIsPlotting thensrclStrn%raise new CanvasPlotterException(4,2) srclStrnend if srclStrnsrclStrnif punkt.xvalue = nil then srclStrnreturn // ungültiger Punkt srclStrnend if srclStrnsrclStrnIif not typesDetermined then //beim ersten mal werden die Werte festgelegt srclStrnsrclStrnstartdate = new datesrclStrnenddate = new date srclStrnsrclStrntypesDetermined = true srclStrn"if varType(punkt.xValue) = 13 then srclStrn)xAxisIsDateB = true // X achse ist datum srclStrnd = punkt.xValuesrclStrn'startdate.totalseconds = d.totalSeconds srclStrn%enddate.totalseconds = d.totalSeconds srclStrnelsesrclStrn.xAxisIsDateB = false // X achse ist kein datum srclStrnend if srclStrnsrclStrn"if varType(punkt.yValue) = 13 then srclStrn(yAxisIsDateB = true // Y achse ist datumsrclStrnelsesrclStrn.yAxisIsDateB = false // Y achse ist kein datum srclStrnAbsMax = punkt.yValue srclStrnAbsMin = punkt.yValue srclStrnend if srclStrnsrclStrn;else // überprüfen, ob auch die richtigen Werte ankommen! srclStrnsrclStrn4if xAxisIsDateB and varType(punkt.xValue) <> 13 thensrclStrnreturn srclStrnend if srclStrn4if yAxisIsDateB and varType(punkt.yValue) <> 13 thensrclStrnreturn srclStrnend if srclStrnsrclStrnend if srclStrnsrclStrnsrclStrn7// zu welchem Graph soll der Punkt hinzugefügt werden? srclStrnif ubound(graphs) < 0 then srclStrnJgraph = new CanvasPlotterGraph(GraphNumber) // keine graphs => neuer Graph srclStrngraphs.append graph srclStrn!graph.SetColor(defaultGraphColor) srclStrn"graph.SetPenWidth(DefaultPenWidth) srclStrn$graph.SetPenHeight(DefaultPenHeight)srclStrnelsesrclStrnsrclStrntemp = ubound(graphs) srclStrnfor i = 0 to temp srclStrnJif graphs(i).GetGraphNumber = GraphNumber then // passender Graph gefunden srclStrngraph = graphs(i) srclStrnexitsrclStrnend if srclStrnnextsrclStrnsrclStrnif graph = nil then srclStrnRgraph = new CanvasPlotterGraph(GraphNumber) // kein passender Graph => neuer Graph srclStrngraphs.append graph srclStrn!graph.SetColor(defaultGraphColor) srclStrn"graph.SetPenWidth(DefaultPenWidth) srclStrn$graph.SetPenHeight(DefaultPenHeight)srclStrnend if srclStrnsrclStrnend if srclStrnsrclStrn$// jetzt kann er hinzugefügt werdensrclStrngraph.AddPoint(Punkt) srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn6ExceptionHandler new CanvasPlotterException(4, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LzEncoInt AlasStrnflagInt shrdInt parmStrn3Punkt as CanvasPlotterPoint, GraphNumber as Integer rsltStrnEndGInt LyMethGrupDL{nameStrnPlotCompStrnVsblInt sorcGrupL|EncoInt srclStrn Sub Plot() srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(38,2) srclStrnend if srclStrnsrclStrnif visible then srclStrnlastCanvasWidth = width srclStrnlastCanvasHeight = height srclStrnelsesrclStrn-lastCanvasWidth = -1 // für redraw vormerken srclStrnlastCanvasHeight = -1 srclStrnreturn srclStrnend if srclStrnsrclStrnPlot(graphics, false) srclStrnsrclStrnlegendDrawn = false srclStrnif ubound(graphs) < 0 then srclStrn Redrawn false srclStrnelsesrclStrn Redrawn truesrclStrnend if srclStrnsrclStrnStatusIsExceptionPlot = false srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(38, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt L|EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt L{MethGrupLL}nameStrn SetGraphColor CompStrnVsblInt sorcGrupL~EncoInt srclStrn6Sub SetGraphColor(Graph as integer, theColor as Color) srclStrn"dim theGraph as CanvasPlotterGraph srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(45,2) srclStrnend if srclStrnsrclStrn$theGraph = GetGraphFromNumber(Graph)srclStrnif theGraph <> nil then srclStrntheGraph.SetColor(theColor) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(45, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt L~EncoInt AlasStrnflagInt shrdInt parmStrn#Graph as integer, theColor as Color rsltStrnEndGInt L}MethGrup0LnameStrnResetGraphColor CompStrnVsblInt sorcGrupLEncoInt srclStrn%Sub ResetGraphColor(graph as integer) srclStrn"dim theGraph as CanvasPlotterGraph srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(41,2) srclStrnend if srclStrnsrclStrn$theGraph = GetGraphFromNumber(Graph)srclStrnif theGraph <> nil then srclStrn$theGraph.SetColor(defaultGraphColor)srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(41, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrngraph as integerrsltStrnEndGInt LMethGrupRTLnameStrnA1_DocumentationCompStrnVsblInt sorcGrupQLEncoInt srclStrnSub A1_Documentation() srclStrn'• Öffentliche Methoden: ••••••••••••••••••••••••••••••••••••••••••••srclStrn' srclStrn('AddPoint( Punkt as CanvasPlotterPoint )srclStrn5' Übernimmt den Punkt 'Punkt' in die Liste. Z.B.: srclStrn' srclStrn+' punkt = new CanvasPlotterPoint( x, y ) srclStrn1' CanvasPlotter.AddPoint( punkt, graphNumber ) srclStrn' srclStrnT' X und Y sind vom Typ 'Variant', so daß sowohl Zahlen als auch Daten akzeptiertsrclStrnS' werden. Von einem Datum wird dabei intern eine Kopie angelegt, so daß man die srclStrnN' Datumsvariable in der eigenen Methode weiterverwenden kann, ohne daß das srclStrn0' Auswirkungen auf den späteren Graphen hat.srclStrnT' 'graphNumber' ist eine Zahl zwischen -2^31 und 2^31 - 1, die die ZugehörigkeitsrclStrnT' zu einem Graphen festlegt. So sollte es theoretisch möglich sein, 2^32 GraphensrclStrn' anzulegen. srclStrn' srclStrn'Clear()srclStrnP' Löscht alle Punkte - sollte also vor jedem neuen Füllen aufgerufen werdensrclStrn' srclStrn#'√GetExceptionModule() as Integer srclStrnI' Gibt die ID-Nummer des Moduls zurück, das für die letzte Exception srclStrnM' verantwortlich war. Gab es bisher keine Exception, wird 0 zurückgegeben srclStrn-' (Siehe Methode 'A3----ExceptionModules') srclStrn' srclStrn!'√GetExceptionType() as Integer srclStrnW' Gibt die Art der letzten Exception zurück. (Siehe Methode 'A2----ExceptionTypes') srclStrn' srclStrn4'GetGraphColorFromIndex( index as Integer ) as ColorsrclStrn4'GetGraphNameFromIndex( index as Integer ) as StringsrclStrn7'GetGraphNumberFromIndex( index as Integer ) as Integer srclStrnX' Returns the color or the name of a graph currently displayed. Note that the 'index'srclStrnY' you supply here does not correspond to the graph number you used in the 'AddPoint()' srclStrnT' method. 'index' is an array index between 0 and the number of graphs minus one.srclStrnW' So, to set or reset one of the properties you receive here, you have to use one of srclStrnV' the 'SetGraph…()' or 'ResetGraph…()' methods with the graph number you get by srclStrn4' calling the 'GetGraphNumberFromIndex()' method.srclStrn' srclStrn'GetNumberOfGraphs() as Integer srclStrnG' Returns the number of graphs currently displayed by CanvasPlotter. srclStrn' srclStrn '√GetPictureDepth() as IntegersrclStrnM' Gibt die Farbtiefe des Canvas zurück - diese kann niedriger als die mit srclStrnK' 'PictureDepth' gesetzte Farbtiefe sein, falls nicht genug Speicher zur srclStrn' Verfügung stand. srclStrn' srclStrn1'√GetXValueFromCoord( X as Integer ) as Variant srclStrn1'√GetYValueFromCoord( Y as Integer ) as Variant srclStrn9' Ermöglicht die Umrechnung von Koordinaten in Werte. srclStrn' srclStrn'Plot() srclStrn' Zeichnet den Graph neu srclStrn<' empfiehlt sich, nachdem alle Punkte hinzugefügt wurdensrclStrn' srclStrn '√Reset() srclStrnS' Setzt den CanvasPlotter auf die Standardeinstellungen zurück (und ruft gleich srclStrn"' noch die Clear()-Methode auf. srclStrn' srclStrn*'ResetGraphColor( GraphNumber as Integer ) srclStrnF' Damit wird die Farbe eines Graphen wieder auf 'DefaultGraphColor' srclStrnD' (siehe weiter unten: 'Öffentliche Properties') zurückgestelltsrclStrn' srclStrn.'ResetGraphPenHeight( GraphNumber as Integer ) srclStrnK' Setzt die Stifthöhe für einen Graphen auf 'DefaultPenHeight' zurück srclStrn' srclStrn-'ResetGraphPenWidth( GraphNumber as Integer ) srclStrnK' Setzt die Stiftbreite für einen Graphen auf 'DefaultPenWidth' zurück srclStrn' srclStrn'SetEnddate( theDate as Date ) srclStrnC' Damit kann das Datum des ersten Datensatzes festgelegt werden. srclStrnO' Nicht nötig, wenn alle Punkte mit AddPoint( Punkt as CanvasPlotterPoint ) srclStrn' übergeben wurden. srclStrnE' (nicht empfohlen - ich weiß gar nicht, ob es noch funktioniert) srclStrn' srclStrn;'SetGraphColor( GraphNumber as Integer, theColor as Color ) srclStrn?' Damit kann die Farbe für einen Graphen eingestellt werden srclStrn' srclStrn7'SetGraphName( GraphNumber as Integer, Name as String ) srclStrnF' Damit kann einem Graphen ein Name gegeben werden, der dann in der srclStrnE' Legende angezeigt wird. Wurde einem Graphen kein Name zugewiesen srclStrnE' Dann wird für diesen Graphen erst gar keine Legende gezeichnet. srclStrn' srclStrn?'SetGraphPenHeight( GraphNumber as Integer, Height as Integer ) srclStrn1' Stellt die Stifthöhe für einen Graphen ein srclStrn' srclStrn='SetGraphPenWidth( GraphNumber as Integer, Width as Integer ) srclStrn2' Stellt die Stiftbreite für einen Graphen ein srclStrn' srclStrn 'SetStartdate( theDate as Date )srclStrnC' Damit kann das Datum des letzen Datensatzes festgelegt werden. srclStrnO' Nicht nötig, wenn alle Punkte mit AddPoint( Punkt as CanvasPlotterPoint ) srclStrn' übergeben wurden. srclStrnE' (nicht empfohlen - ich weiß gar nicht, ob es noch funktioniert) srclStrn' srclStrn'√UseLessMemory() srclStrnM' Zwingt den CanvasPlotter, mit vermindertem Speicherbedarf neuzuzeichnen. srclStrnU' Dazu wird zunächst die Farbtiefe reduziert (bis minimal 8 bit) und schließlich srclStrnO' die automatische Legende abgeschaltet. Beim nächsten Redraw (z.B. aufrund srclStrnS' einer Größenänderung des Canvas) wird jedoch wieder versucht, mit den alten srclStrn' Werten neuzuzeichnen. srclStrnN' Um noch mehr Speicher zu sparen, kann die Farbtiefe ('PictureDepth') noch srclStrnN' niedriger gestellt werden und dann mit 'Plot()' ein Neuzeichnen erzwungen srclStrn ' werden.srclStrn' srclStrn' srclStrn' srclStrn'• Öffentliche Properties: ••••••••••••••••••••••••••••••••••••••••••• srclStrnV' (Alle öffentlichen Properties werden in der Methode 'Reset()' auf ihre Standard- srclStrn' werte eingestellt.)srclStrn' srclStrnM'--- General Graphics ------------------------------------------------------- srclStrn' srclStrn'topMargin as Integer srclStrn'bottomMargin as IntegersrclStrn'leftMargin as Integer srclStrn'rightMargin as Integer srclStrn' Das sind die vier Ränder srclStrn' srclStrn'drawOutline as Boolean srclStrn4' entscheidet, ob ein Rahmen ums Bild gemalt wirdsrclStrn' srclStrn'outlineColor as Color srclStrn' Farbe des Rahmens srclStrn' srclStrn'bkgndColor as ColorsrclStrn!' Hintergrundfarbe des Graphen srclStrn' srclStrn'√pictureDepth as Integer srclStrnK' Die gewünschte Farbtiefe des Graphen in bit (1, 2, 4, 8, 16 oder 32). srclStrnN' Es wird nicht auf falsche Werte überprüft! Evtl. gibt es Exceptions bei srclStrn' ungültigen Werten.srclStrn' srclStrn'defaultGraphColor as Color srclStrn?' Diese Farbe wird für Graphen verwendet, die nicht mittels srclStrn9' SetGraphColor eine andere eingestellt bekommen haben srclStrn' srclStrn'defaultPenHeight as IntegersrclStrn'defaultPenWidth as Integer srclStrn%' Standardstiftgröße der Graphen srclStrn' srclStrn'clipMinHeight as Integer srclStrn'clipMinWidth as IntegersrclStrnP' Minimale Größe des Graphikclips. Normalerweise ist der Clip genauso großsrclStrnM' wie der Canvas selbst. Sollte der Canvas schmaler oder niedriger als die srclStrnG' hiermit festgelegten Werte sein, wird er entsprechend dieser Werte srclStrn"' verbreitert und/oder erhöht. srclStrn' srclStrn'clippingName as String srclStrnL' Used to set the filename for a picture-clipping. If you want to set thesrclStrnN' clippingName individually for each clipping, you should set this property srclStrn' in the 'DragHook()' event. srclStrn' srclStrn' srclStrnK'--- Scales --------------------------------------------------------------- srclStrn' srclStrn'√scaleFont as String srclStrn'' Die Schriftart der X- und Y-Skalen srclStrn' srclStrn'√scaleFontSize as IntegersrclStrn+' Die Schriftgröße der X- und Y-Skalen srclStrn' srclStrn!'√drawVertScaleOnTop as Boolean srclStrnS' Wenn 'true' wird die vertikale Skala über den Graphen gezeichnet und verdeckt srclStrn' diesen teilweise. srclStrn' srclStrn"'√drawHorizScaleOnTop as Boolean srclStrnU' Wenn 'true' wird die horizontale Skala über den Graphen gezeichnet und verdeckt srclStrn' diesen teilweise. srclStrn' srclStrn'√scaleLineHeight as Integer srclStrn'√scaleLineWidth as Integer srclStrn(' Stiftgröße für die Skalenlinien.srclStrn' srclStrn+'--- Y-Axis ------------------------------- srclStrn' srclStrn'drawVertScale as Boolean srclStrn2' Hiermit Y-Achsenskala (de-)aktiviert werden. srclStrn' srclStrn'rightSideScale as Boolean srclStrnN' Wenn die Skala rechts stehen soll, muß 'rightSideScale' auf true gesetzt srclStrn/' sein, sonst auf false (Standardwert: true) srclStrn' srclStrn!'scaleOffsetHorizontal as Integer srclStrnG' Anzahl der Pixel, die die Skala nach rechts verschoben werden soll srclStrn>' Um nach links zu schieben, hier negative Werte einsetzten srclStrn' srclStrn!'√minVertLineSpacing as Integer srclStrn@' Der minimale Abstand zwischen zwei Skalenteilen (in Pixeln)srclStrn' srclStrn'vertScaleColor as ColorsrclStrn1' Farbe der Skalenstriche und der Beschriftung srclStrn' srclStrn+'--- X-Axis ------------------------------- srclStrn' srclStrn"'√scaleOffsetVertical as Integer srclStrnI' Anzahl der Pixel, die die Datums-/Zeitangaben der X-Achse nach unten srclStrn:' verschoben werden. Auch negative Werte sind möglich. srclStrn' srclStrn"'√minHorizLineSpacing as Integer srclStrn@' Der minimale Abstand zwischen zwei Datumslinien (in Pixeln)srclStrn' srclStrn'√shortLineHeight as Integer srclStrnK' Gibt die Länge der Monats-/Wochen-/Tages-/Stundenlinien in Pixeln an, srclStrnR' die nicht mit Skalenbeschriftung versehen werden (die Linien mit Beschriftung srclStrnL' haben immer volle Länge). Wenn 'shortLineHeight' auf '-1' gesetzt wirdsrclStrn4' (Standardwert), haben alle Linien volle Länge.srclStrnL' Verkürzte Linien werden immer bündig mit dem unteren Rand gezeichnet.srclStrn' srclStrn'drawMonthLines as Boolean srclStrn'drawWeekLines as Boolean srclStrn'drawDayLines as BooleansrclStrn'drawHourLines as Boolean srclStrnH' Hiermit können die ganzen Trennliniengruppen (de-)aktiviert werdensrclStrn' srclStrn'monthColor as ColorsrclStrn'weekColor as Color srclStrn'dayColor as Color srclStrn 'hourColor srclStrn' Die Farben der Trennlinien srclStrn' srclStrn'√drawBars as Boolean srclStrnT' Wenn 'true' werden ein oder mehrere Tage im Wechsel mit einer Farbe schattiert.srclStrnX' Die Position der Balken wird so gewählt, daß ein schattierter Bereich beim erstensrclStrnR' Tag, dessen Wochentag dem in 'FirstWeekDay' festgelegten entspricht, beginnt. srclStrn' srclStrn'√barColor as Color srclStrn5' Die Farbe der mit 'DrawBars' aktivierten Balken. srclStrn' srclStrn'√daysForOneBar as IntegersrclStrnU' Anzahl der Tage, die ein schattierter Balken breit sein soll. (Siehe 'DrawBars') srclStrn' srclStrn'√firstWeekDay as Integer srclStrnZ' Hier kann eingestellt werden, welcher Wochentag als erster Tag der Woche gelten soll. srclStrnW' (1 = Sonntag bis 7 = Samstag) Standard ist 2 (Montag). Diese Information wird für srclStrnT' Die Wochentrennlinien und die schattierten Balken (siehe 'DrawBars') benötigt.srclStrn' srclStrn'√drawStartEndDate as Boolean srclStrnQ' Wenn 'true' werden der erste und der letzte Tag mit einer Skalenbeschriftung srclStrn' versehen. srclStrn' srclStrn'√startEndDateColor as Color srclStrnT' Farbe für die Beschriftung des ersten und Letzten Tages. (Wird überschrieben,srclStrn;' fallse 'StartEndDateAutoColor' auf 'true' gesetzt ist. srclStrn' srclStrn$'√startEndDateAutoColor as BooleansrclStrnQ' Wenn 'true' wird die Farbe des Start-/enddates anhand des Tages eingefärbt: srclStrnK' Entsprechend 'monthColor', wenn es sich um einen Monatsersten handelt, srclStrnH' entsprechend 'weekColor', wenn es sich um einen Tag handelt, dessensrclStrnP' Wochentag gleich dem in 'FirstWeekDay' festgelegten ist, sonst entsprechendsrclStrn' 'dayColor' srclStrn' srclStrnM'--- Warnings --------------------------------------------------------------- srclStrn' srclStrn!'√unknownErrorWarning as String srclStrnQ' Dieser Text wird gezeichnet, falls eine Exception vom Typ 0 auftritt. (Siehe srclStrn#' Methode 'A2----ExceptionTypes' srclStrnV' Für diesen Text gelten die Attribute, die für 'noPointsWarning' gesetzt wurden. srclStrnP' Hintergrundfarbe ist grundsätzlich weiß, Textfarbe grundsätzlich schwarzsrclStrn' srclStrn'√lowMemoryWarning as String srclStrnR' Dieser Text wird gezeichnet, falls nicht genug Speicher zur Verfügung steht. srclStrnV' Für diesen Text gelten die Attribute, die für 'noPointsWarning' gesetzt wurden. srclStrnP' Hintergrundfarbe ist grundsätzlich weiß, Textfarbe grundsätzlich schwarzsrclStrn' srclStrn'NoPointsWarning as String srclStrnB' Dieser Text wird gezeichnet, falls keine Punkte an den Canvas srclStrn' übergeben wurden srclStrn' srclStrn'noPointsWarningFont as String srclStrnR' Schriftart für die keine-Punkte-Warnung™ (überprüft auch, ob die Schrift srclStrnO' überhaupt vorhanden ist und setzt ggf. auf Geneva - hier auch vielen Dank srclStrn-' an das Beispiel aus der RealBasic-Hilfe) srclStrnK' Jetzt anders Positioniert: Das erste Zeichen erscheint nach dem ersten srclStrnL' zehntel der Canvas-Breite und nach dem ersten Drittel der Canvas-Höhe.srclStrn6' Die Textbreite entspricht 7/10 der Canvas-Breite. srclStrn' srclStrn#'noPointsWarningFontSize as Integer srclStrn' Das ist wohl klar srclStrn' srclStrn#'noPointsWarningBkgndColor as Color srclStrn+' Die gewünschte extra-Hintergrundfarbe srclStrn' srclStrn"'noPointsWarningFontColor as Color srclStrn6' Die Schriftfarbe für die keine-Punkte-Warnung™ srclStrn' srclStrnM'--- Legend ----------------------------------------------------------------- srclStrn' srclStrn'drawLegend as Boolean srclStrn*' Darf die Legende eingeblendet werden? srclStrn' srclStrn'legendBkgndColor as Color srclStrn!' Hintergrundfarbe der Legende srclStrn' srclStrn'legendFont as String srclStrnR' Schriftart der Legende (wenn die Schriftart nicht vorhanden ist, wird sie auf srclStrnM' Geneva gesetzt) - die Farbe entspricht grundsätzlich der entsprechenden srclStrn' Graphenfarbe srclStrn' srclStrn'legendFontSize as Integer srclStrn$' Schriftgröße für die LegendesrclStrn' srclStrn'legendBold as Boolean srclStrn'legendItalic as BooleansrclStrn'legendUnderline as Boolean srclStrn!' Schriftstil für die Legende srclStrn' srclStrn'√legendPictureTop as Integer srclStrnJ' Abstand von der Canvas-Oberkante zur Oberkante der Legende in Pixeln. srclStrn' srclStrn' srclStrn'• Neue Events ••••••••••••••••••••••••••••••••••••••••••••••••••• srclStrn' srclStrn'DragHook( d As DragItem ) srclStrnL' Here you can add items to the DragItem about to be dragged by the user.srclStrnQ' To set the filename of the picture-clipping use the 'clippingName'-property. srclStrn' srclStrn)'DragPaintHook( p As Picture ) As Picture srclStrnV' Here you get the picture about to be dragged. You can even return another picture srclStrnY' to be dragged. Any picture you return will replace the original drag picture. If NIL srclStrn7' is returned, the original picture will be dragged. srclStrn' srclStrnR'DrawDateHook( theDate as Date, isXaxis as Boolean, isYaxis as Boolean ) as String srclStrnR'DrawTimeHook( theDate as Date, isXaxis as Boolean, isYaxis as Boolean ) as String srclStrnT'DrawDoubleHook( Value as Double, isXaxis as Boolean, isYaxis as Boolean ) as StringsrclStrnJ' In diesen Events können die Skalen-Zeichenroutinen angewiesen werden srclStrnM' einen bestimmten String statt des Standardstrings (Shortdate, Shorttime, srclStrnM' bzw. Double) anzuzeigen. Es wird jeweils noch mit angegeben, für welche srclStrn' Achse der Aufruf erfolgt. srclStrn' srclStrnL'√ExceptionThrown( Type as Integer, Module as Integer, Freeze as Boolean )srclStrnQ' Falls im CanvasPlotter eine Exception auftritt wird dieses Event aufgerufen. srclStrnN' Eigentlich sollten alle Exceptions CanvasPlotter-intern gehandlet werden. srclStrn9' Die Daten hier sind in erster Linie zur Information. srclStrnK' Type ist die Art der Exception. (Siehe Methode 'A2----ExceptionTypes') srclStrnI' Module ist die Methode, in der die Exception aufgetreten ist. (Siehe srclStrn%' Methode 'A3----ExceptionModules' srclStrnO' Freeze gibt an, ob Mausbewegungen, Mausklicks, -drags etc. überhaupt noch srclStrnR' bearbeitet werden. Dies wird intern abgeschaltet, falls der Speicher wirklich srclStrnO' knapp wird. Die Standard Canvas-Events werden weiterhin durchgereicht. Die srclStrnJ' Events 'MouseUpOnGraph' und 'MouseOverGraph' werden jedoch nicht mehr srclStrnN' aufgerufen. Beim nächsten erfolgreichen Aufruf von 'Plot()' werden diese srclStrn' Events wieder aktiviert. srclStrn' srclStrn'√MemoryTooLow() srclStrnV' Wird aufgerufen, falls der Speicher so knapp ist, daß kein Graph mehr gezeichnet srclStrnO' werden konnte. Stattdessen wurde die 'noMemoryWarning'-Warnung gezeichnet. srclStrn' srclStrn>'MouseOverGraph( Graph as Integer, X as Integer, Y as Integer, srclStrnD' GraphColor as Color, GraphName as Name )srclStrnK' Wird aufgerufen, wenn sich der Mauszeiger über einem Graphen befindet srclStrnH' (funtioniert NUR, wenn 'drawLegend' nicht auf false gesetzt wurde!)srclStrn' srclStrn?'MouseUpOnGraph( Graph as Integer, X as Integer, Y as Integer ) srclStrnD' GraphColor as Color, GraphName as Name )srclStrn<' Wird aufgerufen, wenn der User auf einen Graphen klicktsrclStrnH' (funtioniert NUR, wenn 'drawLegend' nicht auf false gesetzt wurde!)srclStrn' srclStrn'Open() srclStrn8' Dient zum Einstellen gewünschter Properties (s.o.)srclStrn' srclStrn;'√PaintHook( p As Picture, IsPictureClipping as Boolean ) srclStrnO' Gibt die Möglichkeit, das Bild noch zu verändern, bevor es in den Canvas srclStrnM' gezeichnet wird. Das Bild ist zu diesem Zeitpunkt schon komplett fertig. srclStrnU' IsPictureClipping gibt an, ob es sich bei dem Bild um ein Clipping handelt, oder srclStrn/' ob es für den Canvas selbst bestimmt ist. srclStrnP' Veränderungen wirken sich jedoch nicht auf die Masken aus, die intern dazusrclStrnR' benutzt werden, festzustellen, ob sich der Cursor auf einem Graphen befindet. srclStrn' srclStrn'Redrawn( hasData as Boolean ) srclStrnI' Wird bei jedem Plot des Graphen aufgerufen (egal ob Paint-Event oder srclStrn'' per Hand über die 'Plot'-Methode) srclStrnN' hasData ist false, falls keine Punkte vorhanden waren, also nichts außer srclStrn<' der keine-Punkte-Warnung™ angezeigt wird - sonst truesrclStrn' srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LMethGrupLnameStrnDoDrawHourlines CompStrnVsblInt sorcGrupLEncoInt srclStrn"Sub DoDrawHourlines(p as Graphics) srclStrndim zwischendatum as date srclStrndim x as integersrclStrndim auchDenText as boolean srclStrnsrclStrnp.forecolor = hourColor srclStrnp.TextFont = scaleFont srclStrnp.TextSize = scaleFontSize srclStrnp.penHeight = scaleLineHeight srclStrnp.penWidth = scaleLineWidth srclStrnsrclStrn6if plotHorizPoints * 1800 > p.TextHeight then //3600/2 srclStrnauchDenText = true srclStrnend if srclStrnsrclStrnzwischendatum = new datesrclStrnTzwischendatum.totalSeconds = enddate.TotalSeconds-Modulo(enddate.totalseconds, 3600)srclStrnsrclStrn%x=GetXCoordFromDate(zwischendatum, p) srclStrnsrclStrnwhile x >= leftmargin srclStrnsrclStrnif auchdentext then srclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrn7DoDrawXScaleTime(zwischendatum, p, hourColor, x, false) srclStrnelsesrclStrn@if shortLineHeight > 0 and shortLineHeight < plotableHeight thensrclStrn //shortline srclStrnJp.drawline x,p.height-bottomMargin-shortLineHeight,x,p.height-bottomMargin srclStrnelsesrclStrn;p.drawline x,topMargin,x,GetStartEndDateScaleLineEndY(p, x) srclStrnend if srclStrnend if srclStrnsrclStrn>zwischendatum.totalseconds = zwischendatum.totalseconds - 3600 srclStrnif zwischendatum.hour = 0 then srclStrn>zwischendatum.totalSeconds = zwischendatum.totalSeconds - 3600 srclStrnend if srclStrnsrclStrn'x = GetXCoordFromDate(zwischendatum, p) srclStrnwendsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(13, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LMethGrupLnameStrn FontAvailable CompStrnVsblInt sorcGrupLEncoInt srclStrn5Function FontAvailable(FontName as String) As boolean srclStrnDim i as IntegersrclStrnFor i=0 to FontCount-1 srclStrnIf Font(i)=FontName ThensrclStrn Return True srclStrnEnd If srclStrnNextsrclStrn Return FalsesrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(19, 0, exc)srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnFontName as String rsltStrnboolean EndGInt LMethGrup|LnameStrn OverGraph CompStrnVsblInt sorcGrupLEncoInt srclStrnFSub OverGraph(Graph as CanvasPlotterGraph, X as Integer, Y as Integer) srclStrnsrclStrnJMouseOverGraph Graph.GetGraphNumber,X,Y,Graph.GetColor, Graph.GetGraphName srclStrnsrclStrnDif not legendDrawn or legendGraphNumber <> Graph.GetGraphNumber thensrclStrnDoDrawLegend( Graph ) srclStrnend if srclStrnsrclStrnif drawNearestPoint thensrclStrnMarkNearestPoint( Graph, X, Y ) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(21, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn7Graph as CanvasPlotterGraph, X as Integer, Y as Integer rsltStrnEndGInt LMethGrup@LnameStrn SetGraphNameCompStrnVsblInt sorcGrupLEncoInt srclStrn2Sub SetGraphName(Graph as Integer, Name as String) srclStrn"dim theGraph as CanvasPlotterGraph srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(46,2) srclStrnend if srclStrnsrclStrn$theGraph = GetGraphFromNumber(Graph)srclStrnif theGraph <> nil then srclStrntheGraph.SetGraphName(Name) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(46, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn Graph as Integer, Name as StringrsltStrnEndGInt LMethGrupLnameStrnGetGraphFromNumber CompStrnVsblInt sorcGrup4LEncoInt srclStrnDFunction GetGraphFromNumber(number as Integer) As CanvasPlotterGraphsrclStrndim i,temp as integer srclStrnsrclStrntemp = ubound(graphs) srclStrnfor i = 0 to temp srclStrn)if graphs(i).GetGraphNumber = number then srclStrnreturn graphs(i)srclStrnend if srclStrnnextsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(20, 0, exc)srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnnumber as Integer rsltStrnCanvasPlotterGraph EndGInt LMethGrup 4LnameStrn DoDrawOneLine CompStrnVsblInt sorcGruppLEncoInt srclStrn?Sub DoDrawOneLine(Graph as CanvasPlotterGraph, p() as Graphics) srclStrndim i,j, dx, dy,temp as integer srclStrn(dim xstart,ystart,xende,yende as integersrclStrndim quotient as double srclStrndim a, b as double srclStrndim ersterlauf as boolean srclStrndim datum as date srclStrnsrclStrnxende=leftmargin //anfangswert srclStrnyende =0srclStrnersterlauf=true srclStrnsrclStrn*for i = 0 to (Graph.GetNumberOfPoints()-1) srclStrn xstart= xende srclStrnystart = yende srclStrnif xAxisIsDateB thensrclStrn datum = Graph.GetPoint(i).xValuesrclStrn&xende = GetXCoordFromDate(datum, p(0)) srclStrnelsesrclStrnGa = (Graph.GetPoint(i).xValue - Graph.GetPoint(0).xValue)*plotableWidth srclStrnOb = Graph.GetPoint(Graph.GetNumberOfPoints-1).xValue - Graph.GetPoint(0).xValue srclStrn if b=0 then srclStrn quotient = 0srclStrnelsesrclStrnquotient = a/b srclStrnend if srclStrnxende = leftmargin + quotient srclStrnend if srclStrnsrclStrnsrclStrnif yAxisIsDateB thensrclStrn datum = Graph.GetPoint(i).yValuesrclStrn'yende = GetYCoordFromDate(datum, p(0)) srclStrnelsesrclStrn:yende = GetYCoordFromValue(Graph.GetPoint(i).yValue, p(0)) srclStrnend if srclStrnsrclStrnif not ersterlauf then srclStrntemp = ubound(p)srclStrnfor j = 0 to temp srclStrn%dx = CalculateOffset( p(j).penwidth ) srclStrn&dy = CalculateOffset( p(j).penheight ) srclStrn3p(j).drawline xstart-dx,ystart-dy,xende-dx,yende-dy srclStrnnextsrclStrnelsesrclStrntemp = ubound(p)srclStrnfor j = 0 to temp srclStrn%dx = CalculateOffset( p(j).penwidth ) srclStrn&dy = CalculateOffset( p(j).penheight ) srclStrn4p(j).drawline xende-dx, yende-dy, xende-dx, yende-dysrclStrnnextsrclStrnend if srclStrnersterlauf = false srclStrnnextsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(29, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn,Graph as CanvasPlotterGraph, p() as GraphicsrsltStrnEndGInt LMethGrupLLnameStrnSetGraphPenWidthCompStrnVsblInt sorcGrupLEncoInt srclStrn8Sub SetGraphPenWidth(graph as integer, width as integer)srclStrn"dim theGraph as CanvasPlotterGraph srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(48,2) srclStrnend if srclStrnsrclStrn$theGraph = GetGraphFromNumber(Graph)srclStrnif theGraph <> nil then srclStrntheGraph.SetPenwidth(width) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(48, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn"graph as integer, width as integer rsltStrnEndGInt LMethGrupXLnameStrnSetGraphPenHeight CompStrnVsblInt sorcGrupLEncoInt srclStrn:Sub SetGraphPenHeight(graph as Integer, height as Integer) srclStrn"dim theGraph as CanvasPlotterGraph srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(47,2) srclStrnend if srclStrnsrclStrn$theGraph = GetGraphFromNumber(Graph)srclStrnif theGraph <> nil then srclStrntheGraph.SetPenheight(height) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(47, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn#graph as Integer, height as Integer rsltStrnEndGInt LMethGrup8LnameStrnResetGraphPenWidth CompStrnVsblInt sorcGrupLEncoInt srclStrn(Sub ResetGraphPenWidth(graph as integer)srclStrn"dim theGraph as CanvasPlotterGraph srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(43,2) srclStrnend if srclStrnsrclStrn$theGraph = GetGraphFromNumber(Graph)srclStrnif theGraph <> nil then srclStrn%theGraph.SetPenwidth(DefaultPenwidth) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(43, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrngraph as integerrsltStrnEndGInt LMethGrup<LnameStrnResetGraphPenHeight CompStrnVsblInt sorcGrupLEncoInt srclStrn)Sub ResetGraphPenHeight(graph as Integer) srclStrn"dim theGraph as CanvasPlotterGraph srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(42,2) srclStrnend if srclStrnsrclStrn$theGraph = GetGraphFromNumber(Graph)srclStrnif theGraph <> nil then srclStrn'theGraph.SetPenheight(DefaultPenheight) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(42, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrngraph as IntegerrsltStrnEndGInt LMethGrupLnameStrn RemoveLegendCompStrnVsblInt sorcGrupLLEncoInt srclStrnSub RemoveLegend() srclStrndim p as picturesrclStrnsrclStrnif backdrop = nil then srclStrn&raise new CanvasPlotterException(22,3) srclStrnend if srclStrnsrclStrnGp = newPicture(legendPictureWidth,legendPictureHeight,pictureDepthTemp) srclStrnif p = nil then srclStrn&raise new CanvasPlotterException(22,1) srclStrnend if srclStrnsrclStrnFp.graphics.drawpicture backdrop, -legendPictureLeft, -legendPictureTop srclStrnsrclStrn;graphics.drawPicture p, legendPictureLeft, legendPictureTop srclStrnsrclStrnlegendDrawn = false srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(22, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LMethGrupLnameStrnDoDrawVertScale CompStrnVsblInt sorcGrupLEncoInt srclStrn"Sub DoDrawVertScale(p as Graphics) srclStrndim rechts, unten as integersrclStrndim i as integersrclStrndim y as integersrclStrn#dim wertedifferenz, ywert as double srclStrn0dim pow, untergrenze, AnzahlDerStellen as doublesrclStrndim schriftrechts as integersrclStrndim stringtodraw as string srclStrndim datum as date srclStrnsrclStrndatum = new datesrclStrnsrclStrn!rechts = leftmargin+plotableWidth srclStrn unten = topmargin+plotableHeightsrclStrnsrclStrnif rightSideScale then srclStrn.schriftrechts = rechts + scaleOffsetHorizontal srclStrnelsesrclStrn2schriftrechts = leftmargin + scaleOffsetHorizontal srclStrnend if srclStrnsrclStrnp.foreColor = vertScaleColorsrclStrnp.TextFont = scaleFont srclStrnp.TextSize = scaleFontSize srclStrnp.penHeight = scaleLineHeight srclStrnp.penWidth = scaleLineWidth srclStrnsrclStrnif plotableHeight <> 0 then srclStrnFwertedifferenz = ((AbsMax-AbsMin)* minVertLineSpacing)/plotableHeight srclStrnelsesrclStrnwertedifferenz = 0 srclStrnend if srclStrnsrclStrnif wertedifferenz <> 0 then srclStrn%if yAxisIsDateB or yScaleIsTimeB then srclStrn(if wertedifferenz > 60*60*24*365.24 thensrclStrnKwertedifferenz = wertedifferenz - Modulo (wertedifferenz, 60*60*24*365.24) srclStrn%elseif wertedifferenz > 60*60*24 then srclStrn?wertedifferenz = wertedifferenz - wertedifferenz mod (60*60*24) srclStrn,elseif wertedifferenz > 60*60 then //stundensrclStrn 60*15 then //viertelstunden srclStrn 60*5 then //fünfminutensrclStrn;wertedifferenz = wertedifferenz - wertedifferenz mod (60*5) srclStrnelseif wertedifferenz > 60 then srclStrn9wertedifferenz = wertedifferenz - wertedifferenz mod (60) srclStrnend srclStrn,untergrenze = Modulo(absmin, wertedifferenz)srclStrnelsesrclStrnPAnzahlDerStellen = floor( log(wertedifferenz)/log(10) )// Anzahl der Stellen - 1srclStrn9pow = ceil( wertedifferenz / power(10,AnzahlDerStellen) ) srclStrn2wertedifferenz = pow * power(10, AnzahlDerStellen) srclStrn,untergrenze = Modulo(absmin, wertedifferenz)srclStrnend if srclStrn'end if srclStrnsrclStrni = 1 srclStrnsrclStrn'if wertedifferenz = 0 then srclStrn'return srclStrn'end if srclStrn while true srclStrn-ywert = absmin-untergrenze+(i*wertedifferenz) srclStrn*//y = unten-(yWert-AbsMin)*plotVertPoints srclStrn y = GetYCoordFromValue(ywert, p)srclStrn5if y < topmargin or y < topmargin+2*p.textascent then srclStrnexitsrclStrnend if srclStrnif y <= unten-p.textascent then srclStrnif yAxisIsDateB thensrclStrndatum.totalSeconds = ywert srclStrn/stringtodraw = DrawDateHook(datum, false, true) srclStrnif stringtodraw = "" then srclStrnstringtodraw = datum.shortdate srclStrnend if srclStrnelsesrclStrn1stringtodraw = DrawDoubleHook(ywert, false, true) srclStrnif stringtodraw = "" then srclStrn!stringtodraw = format(ywert, "#") srclStrnend if srclStrnend if srclStrn$p.drawline(leftmargin, y, rechts, y)srclStrnp.foreColor = BkgndColorsrclStrnRDoDrawStringBorder(stringtodraw, p, schriftrechts-p.stringwidth(stringToDraw),y-1) srclStrnp.foreColor = vertScaleColorsrclStrnGp.drawstring stringToDraw,schriftrechts-p.stringwidth(stringToDraw),y-1 srclStrnend if srclStrni = i+1 srclStrnwendsrclStrnend if //wertedifferenz <> 0srclStrnsrclStrnif yAxisIsDateB thensrclStrndatum.totalSeconds = absmin srclStrn/stringtodraw = DrawDateHook(datum, false, true) srclStrnif stringtodraw = "" then srclStrnstringtodraw = datum.shortdate srclStrnend if srclStrnelsesrclStrn2stringtodraw = DrawDoubleHook(absmin, false, true) srclStrnif stringtodraw = "" then srclStrn"stringtodraw = format(absmin, "#") srclStrnend if srclStrnend if srclStrn,p.drawline(leftmargin, unten, rechts, unten)srclStrnp.foreColor = BkgndColorsrclStrnVDoDrawStringBorder(stringtodraw, p, schriftrechts-p.stringwidth(stringToDraw),unten-1) srclStrnp.foreColor = vertScaleColorsrclStrnKp.drawstring stringToDraw,schriftrechts-p.stringwidth(stringToDraw),unten-1 srclStrnsrclStrnif absmin <> absmax thensrclStrnif yAxisIsDateB thensrclStrndatum.totalSeconds = absmax srclStrn/stringtodraw = DrawDateHook(datum, false, true) srclStrnif stringtodraw = "" then srclStrnstringtodraw = datum.shortdate srclStrnend if srclStrnelsesrclStrn2stringtodraw = DrawDoubleHook(absmax, false, true) srclStrnif stringtodraw = "" then srclStrn"stringtodraw = format(absmax, "#") srclStrnend if srclStrnend if srclStrn4p.drawline(leftmargin, topmargin, rechts, topmargin)srclStrnp.foreColor = BkgndColorsrclStrneDoDrawStringBorder(stringtodraw, p, schriftrechts-p.stringwidth(stringToDraw),topmargin+p.textascent) srclStrnp.foreColor = vertScaleColorsrclStrnZp.drawstring stringToDraw,schriftrechts-p.stringwidth(stringToDraw),topmargin+p.textascent srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(10, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LMethGrup|LnameStrnPower CompStrnVsblInt sorcGrupLEncoInt srclStrn>Function Power(basis as double, exponent as integer) As double srclStrn'dim i as integer srclStrn'dim erg as double srclStrn' srclStrn'erg = 1srclStrn' srclStrn'for i = 1 to exponent srclStrn'erg = erg*basissrclStrn'next srclStrn' srclStrn 'return erg srclStrnsrclStrnif exponent = 0 thensrclStrnreturn 1srclStrnelsesrclStrnreturn pow(basis, exponent) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(39, 0, exc)srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn$basis as double, exponent as integerrsltStrndouble EndGInt LMethGrupLnameStrn DoDrawBars CompStrnVsblInt sorcGrupLEncoInt srclStrnSub DoDrawBars(p as Graphics) srclStrndim zwischendatum as date srclStrndim x, a as integer srclStrnsrclStrnp.forecolor = barcolor srclStrnsrclStrnzwischendatum = new datesrclStrn3zwischendatum.totalSeconds = startdate.totalseconds srclStrnzwischendatum.hour=0srclStrnzwischendatum.minute=0 srclStrnzwischendatum.second=0 srclStrnsrclStrn*a = FirstWeekDay - zwischendatum.dayofweek srclStrn if a < 0 then srclStrn.a = a+7 // Tage bis zum nächsten FirstWeekDay srclStrnend if srclStrnHa = ( a mod (2*DaysForOneBar) ) // zwischendatum nach rechts verschiebensrclStrnif a > DaysForOneBar then srclStrnBa = a - (2*DaysForOneBar) // zwischendatum nach links verschieben srclStrnend if srclStrnsrclStrnAzwischendatum.totalSeconds = zwischendatum.totalSeconds + a*86400 srclStrnsrclStrn:while (zwischendatum.totalseconds <= enddate.totalseconds) srclStrn6x=max(leftmargin, GetXCoordFromDate(zwischendatum, p)) srclStrnsrclStrnp.fillrect x, topMargin, min(leftmargin+plotableWidth-x, GetXCoordFromTotalseconds(zwischendatum.totalSeconds+86400*DaysForOneBar, p)-x), plotableHeightsrclStrnsrclStrnNzwischendatum.totalSeconds = zwischendatum.totalSeconds + 172800*DaysForOneBar srclStrnwendsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn+raise new CanvasPlotterException(6, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LMethGrupdLnameStrnDoDrawStartEndDate CompStrnVsblInt sorcGrupLEncoInt srclStrn%Sub DoDrawStartEndDate(p as Graphics) srclStrnsrclStrnp.forecolor = StartEndDateColor srclStrnp.TextFont = scaleFont srclStrnp.TextSize = scaleFontSize srclStrnsrclStrn// erst das startdate srclStrnif StartEndDateAutoColor then srclStrnif startdate.day = 1 then srclStrnStartEndDateColor = monthColor srclStrn.elseif startdate.dayofweek = FirstWeekDay then srclStrnStartEndDateColor = weekColor srclStrnelsesrclStrnStartEndDateColor = dayColorsrclStrnend if srclStrnend if srclStrnsrclStrnCDoDrawXScaleDate(startdate, p, StartEndDateColor, leftmargin, true) srclStrnsrclStrn// jetzt das enddatesrclStrn6if startdate.totalseconds <> enddate.totalseconds then srclStrnif StartEndDateAutoColor then srclStrnif enddate.day = 1 then srclStrnStartEndDateColor = monthColor srclStrn,elseif enddate.dayofweek = FirstWeekDay thensrclStrnStartEndDateColor = weekColor srclStrnelsesrclStrnStartEndDateColor = dayColorsrclStrnend if srclStrnend if srclStrnsrclStrnYDoDrawXScaleDate(enddate, p, StartEndDateColor, p.width-rightMargin-p.textheight-1, true) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(11, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LMethGrup0LnameStrnModulo CompStrnVsblInt sorcGrupxLEncoInt srclStrn9Function Modulo(eins as double, zwei as double) As double srclStrn*return eins - ( floor(eins / zwei) * zwei) srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(37, 0, exc)srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrneins as double, zwei as double rsltStrndouble EndGInt LMethGrup`LnameStrnGetYValueFromCoord CompStrnVsblInt sorcGrupLEncoInt srclStrn4Function GetYValueFromCoord(Y as Integer) As VariantsrclStrnUreturn (absmax-absmin)/(height-topmargin-bottommargin)*(height-y-bottommargin)+absmin srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(36, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn Y as IntegerrsltStrnVariant EndGInt LMethGrupLnameStrnGetXValueFromCoord CompStrnVsblInt sorcGrupLEncoInt srclStrn4Function GetXValueFromCoord(X as integer) As variantsrclStrnzreturn (enddate.totalseconds-startdate.totalseconds)/(width-leftmargin-rightmargin)*(-leftmargin+x)+startdate.totalseconds srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(34, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn X as integerrsltStrnvariant EndGInt LMethGrup8LnameStrnGetYCoordFromValue CompStrnVsblInt sorcGruptLEncoInt srclStrnGFunction GetYCoordFromValue(Value as Variant, g as Graphics) As integer srclStrndim i as integersrclStrni = absmax-absmin srclStrn if i = 0 then srclStrnreturn g.height - bottommargin srclStrnelsesrclStrn^return -(value-absmin)/(absmax-absmin)*(g.height-topmargin-bottommargin)+g.height-bottommargin srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(35, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnValue as Variant, g as Graphics rsltStrninteger EndGInt LMethGrup8LnameStrnGetXCoordFromDate CompStrnVsblInt sorcGrup|LEncoInt srclStrn?Function GetXCoordFromDate(d as date, g as Graphics) As integer srclStrn;if not (enddate.totalseconds = startdate.totalseconds) then srclStrnreturn (d.totalseconds-startdate.totalseconds)/ (enddate.totalseconds-startdate.totalseconds)*(g.width-leftmargin-rightmargin)+ leftmargin+1srclStrnelsesrclStrnreturn leftmargin srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(32, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnd as date, g as GraphicsrsltStrninteger EndGInt LMethGrupdLnameStrnRotate CompStrnVsblInt sorcGrupxLEncoInt srclStrnfSub Rotate(source as Picture, dest as graphics, top as integer, left as integer, clockwise as boolean) srclStrndim pix as colorsrclStrndim i,j as integer srclStrndim w, h as integer srclStrnsrclStrnw = source.width-1 srclStrnh = source.height-1 srclStrnsrclStrnif clockwise = true thensrclStrnsrclStrnfor i = 0 to w srclStrnfor j = 0 to h srclStrn pix = source.graphics.pixel(i,j)srclStrnif pix <> rgb(255,255,255) then srclStrn"dest.pixel(top-j+h,left+i+1) = pix srclStrnend if srclStrnnextsrclStrnnextsrclStrnsrclStrnelsesrclStrnsrclStrnfor i = 0 to w srclStrnfor j = 0 to h srclStrn pix = source.graphics.pixel(i,j)srclStrnif pix <> rgb(255,255,255) then srclStrn dest.pixel(top+j,left+w-i) = pixsrclStrnend if srclStrnnextsrclStrnnextsrclStrnsrclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(23, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnZsource as Picture, dest as graphics, top as integer, left as integer, clockwise as boolean rsltStrnEndGInt LMethGrupHLnameStrnGetXCoordFromTotalseconds CompStrnVsblInt sorcGrup|LEncoInt srclStrnLFunction GetXCoordFromTotalseconds(secs as double, g as Graphics) As integersrclStrn6if enddate.totalseconds <> startdate.totalseconds then srclStrnreturn (secs-startdate.totalseconds)/ (enddate.totalseconds-startdate.totalseconds)*(g.width-leftmargin-rightmargin)+ leftmargin+1 srclStrnelsesrclStrnreturn leftmargin srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(33, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnsecs as double, g as Graphics rsltStrninteger EndGInt LMethGrupLnameStrnDoDrawStringBorder CompStrnVsblInt sorcGrupLEncoInt srclStrnYSub DoDrawStringBorder(theString as String, Dest as Graphics, X as Integer, Y as Integer) srclStrn!dest.drawstring theString, x-1, y srclStrn!dest.drawstring theString, x, y+1 srclStrn!dest.drawstring theString, x, y-1 srclStrn!dest.drawstring theString, x+1, y srclStrnsrclStrn#dest.drawstring theString, x-1, y-1 srclStrn#dest.drawstring theString, x-1, y+1 srclStrn#dest.drawstring theString, x+1, y-1 srclStrn#dest.drawstring theString, x+1, y+1 srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(12, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnAtheString as String, Dest as Graphics, X as Integer, Y as Integer rsltStrnEndGInt LMethGruphLnameStrnReset CompStrnVsblInt sorcGrup LEncoInt srclStrn Sub Reset() srclStrnsrclStrnif statusIsPlotting thensrclStrn&raise new CanvasPlotterException(40,2) srclStrnend if srclStrnsrclStrn&/// General Graphics ///-------------- srclStrn topMargin=10srclStrnbottomMargin=10 srclStrn leftMargin=10 srclStrnrightMargin=10 srclStrnsrclStrnDrawOutline = false srclStrnOutlineColor = rgb(0,0,0) srclStrnsrclStrnBkgndColor = rgb(255,255,255) srclStrnsrclStrnPictureDepth = screen(0).depth srclStrnsrclStrn'DefaultGraphColor = hsv(0.086, 0.99, 1) srclStrnsrclStrnDefaultPenHeight = 2srclStrnDefaultPenWidth = 2 srclStrnsrclStrnclipMinHeight = 200 srclStrnclipMinWidth = 300 srclStrn///---------------------------- srclStrnsrclStrnsrclStrnsrclStrn/// Scales ///--------------srclStrnscaleFont = "Geneva"srclStrnscaleFontSize = 9 srclStrndrawVertScaleOnTop = false srclStrndrawHorizScaleOnTop = false srclStrnscaleLineWidth = 1 srclStrnscaleLineHeight = 1 srclStrnsrclStrn /// Y-Axis srclStrndrawVertScale = truesrclStrnrightSideScale = true srclStrnscaleOffsetHorizontal = -2 srclStrnminVertLineSpacing = 50 srclStrnvertScaleColor = rgb(0,0,0) srclStrnsrclStrn /// X-Axis srclStrnscaleOffsetVertical = -2srclStrnminHorizLineSpacing = 5 srclStrnshortLineHeight = -1srclStrnsrclStrndrawMonthLines = true srclStrnmonthColor = RGB(70,70,150) srclStrnDrawWeekLines = truesrclStrnweekColor = rgb(140,140,220)srclStrnDrawDayLines = true srclStrndayColor = rgb(175,175,255) srclStrnDrawHourLines = truesrclStrnhourColor = rgb(200,200,255)srclStrnDrawBars = true srclStrnBarColor = rgb(240,240,240) srclStrndaysForOneBar = 1 srclStrn/firstWeekDay = 2 // 1 = Sunday 7 = Saturday srclStrnsrclStrndrawStartEndDate = true srclStrnstartEndDateColor = dayColorsrclStrnstartEndDateAutoColor = truesrclStrn///---------------------------- srclStrnsrclStrnsrclStrnsrclStrn/// Warnings ///-------------- srclStrn>unknownErrorWarning = "Ein unbekannter Fehler ist aufgetreten" srclStrn)lowMemoryWarning = "Nicht genug Speicher" srclStrn%noPointsWarning = "Keine Datensätze" srclStrnnoPointsWarningFont = "Geneva" srclStrnnoPointsWarningFontSize = 9 srclStrn%noPointsWarningBkgndColor = FillColor srclStrn%noPointsWarningFontColor = rgb(0,0,0) srclStrn///---------------------------- srclStrnsrclStrnsrclStrnsrclStrn/// Legend ///--------------srclStrndrawLegend = true srclStrnlegendFont = "Geneva" srclStrnlegendFontSize = 9 srclStrnlegendBold = true srclStrnlegendItalic = falsesrclStrnlegendUnderline = false srclStrnlegendBkgndColor = BkgndColor srclStrn legendPictureTop = topMargin + 5srclStrn///---------------------------- srclStrnsrclStrnsrclStrndrawNearestPoint = true srclStrnnearestPointMaxDistance = 8 srclStrn$nearestPointRect = new Rect(0,0,0,0)srclStrnsrclStrnsrclStrnsrclStrn7//lastCanvasHeight = height // um redraws zu verhindern srclStrn//lastCanvasWidth = width srclStrnsrclStrnClear() srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(40, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LMethGrup<LnameStrnDoDrawXScaleDateCompStrnVsblInt sorcGrupPLEncoInt srclStrnjSub DoDrawXScaleDate(theDate as Date, dest as Graphics, theColor as Color, x as integer, force as boolean) srclStrndim datecopy as datesrclStrndim stringToDraw as string srclStrnsrclStrn(if force=false and DrawStartEndDate thensrclStrndest.textfont = scalefont srclStrndest.textsize = scalefontsize srclStrn\if x <= leftmargin + dest.textheight or x >= dest.width-rightMargin-(2*dest.textheight) thensrclStrnreturn srclStrnend if srclStrnend if srclStrnsrclStrndatecopy = new date srclStrnsrclStrn,datecopy.totalSeconds = theDate.totalSecondssrclStrn2stringToDraw = DrawDateHook(datecopy, true, false) srclStrnif stringToDraw = "" then srclStrn stringToDraw = theDate.shortdatesrclStrnend if srclStrnsrclStrn1DoDrawXScaleText(stringToDraw, dest, theColor, x) srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(16, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnTtheDate as Date, dest as Graphics, theColor as Color, x as integer, force as booleanrsltStrnEndGInt LMethGrupLnameStrnDoDrawXScaleTextCompStrnVsblInt sorcGrupLEncoInt srclStrnZSub DoDrawXScaleText(theText as String, dest as Graphics, theColor as Color, x as integer) srclStrndim text as picture srclStrnsrclStrnOtext = newpicture(dest.stringWidth(theText),dest.textheight(),PictureDepthTemp) srclStrnsrclStrnif text = nil then srclStrn&raise new CanvasPlotterException(17,1) srclStrnend if srclStrnsrclStrn"text.graphics.textfont = scaleFont srclStrn&text.graphics.textsize = scaleFontSize srclStrn"text.graphics.foreColor = theColor srclStrn?text.graphics.drawstring theText,0,0+text.graphics.textascent() srclStrnsrclStrnTRotate(text,dest, x, scaleoffsetvertical+dest.height-bottommargin-text.width, false)srclStrnsrclStrn text = nil srclStrnsrclStrn Exception exc srclStrn text = nil srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(17, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnDtheText as String, dest as Graphics, theColor as Color, x as integerrsltStrnEndGInt LMethGrup@LnameStrnDoDrawXScaleTimeCompStrnVsblInt sorcGrupTLEncoInt srclStrnjSub DoDrawXScaleTime(theTime as Date, dest as Graphics, theColor as Color, x as integer, force as boolean) srclStrndim datecopy as datesrclStrndim stringToDraw as string srclStrnsrclStrn(if force=false and DrawStartEndDate thensrclStrndest.textfont = scalefont srclStrndest.textsize = scalefontsize srclStrn_if x <= leftmargin + dest.textheight-2 or x > dest.width-rightMargin-(2*dest.textheight)-1 then srclStrnreturn srclStrnend if srclStrnend if srclStrnsrclStrndatecopy = new date srclStrnsrclStrn,datecopy.totalSeconds = theTime.totalSecondssrclStrn2stringToDraw = DrawTimeHook(datecopy, true, false) srclStrnif stringToDraw = "" then srclStrn stringToDraw = theTime.shorttimesrclStrnend if srclStrnsrclStrn1DoDrawXScaleText(stringToDraw, dest, theColor, x) srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(18, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnTtheTime as Date, dest as Graphics, theColor as Color, x as integer, force as booleanrsltStrnEndGInt LMethGrup4LnameStrnDoDrawNoMemoryWarning CompStrnVsblInt sorcGrupLEncoInt srclStrnSub DoDrawNoMemoryWarning() srclStrnsrclStrnlastCanvasHeight = height srclStrnlastCanvasWidth = width srclStrnsrclStrnbackdrop = nil srclStrn Freeze = true srclStrnif visible then srclStrn'backdrop = newPicture(width, height, 1) srclStrnelsesrclStrnlastCanvasHeight = -1 srclStrnlastCanvasWidth = -1srclStrnreturn srclStrnend if srclStrnsrclStrnif backdrop = nil then srclStrn'raise new CanvasPlotterException(25, 1) srclStrnend if srclStrnsrclStrn0backdrop.graphics.textfont = noPointsWarningFontsrclStrn4backdrop.graphics.textsize = noPointsWarningFontSizesrclStrnzbackdrop.graphics.drawstring lowMemoryWarning,graphics.width\10,graphics.height\3+graphics.textascent, graphics.width/10*7 srclStrn.graphics.drawpicture backdrop, 0,0//////////// srclStrnMemoryTooLow() srclStrnsrclStrn Exception exc srclStrnbackdrop = nil srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(25, 0, exc) srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LMethGruplLnameStrnA2_ExceptionTypes CompStrnVsblInt sorcGrupLEncoInt srclStrnSub A2_ExceptionTypes() srclStrn' 0: RealBasic exception srclStrnJ' If a type 0 exception occurs, you probably are in big trouble and I srclStrn<' would recommend to quit your app as soon as possible.srclStrn?' 1: Picture could not be created (probably due to low memory) srclStrnI' Will be handled internally by trying to reduce memory consumption. srclStrn>' (see 'UseLessMemory()'-method in 'A1----Documentation') srclStrnM' 2: Plotting in progress (probably a thread tried to call one of the public srclStrnJ' methods - except for the Get...()-Methods - while CanvasPlotter was srclStrn)' still drawing the current picture) srclStrnK' The current drawing will be finished correctly. All methods you call srclStrn6' while CanvasPlotter is working will be ignored. srclStrn' 3: Picture missing srclStrn' 4: Wrong Rect bounds srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LMethGrup LnameStrnA3_ExceptionModules CompStrnVsblInt sorcGrup LEncoInt srclStrnSub A3_ExceptionModules() srclStrn'-1: ExceptionHandler srclStrn' 0: No exception srclStrn' 1: Plot (with parameters)srclStrn' 2: DoDrawInitsrclStrn' 3: DoDrawBackground srclStrn' 4: AddPoint srclStrn ' 5: Clear srclStrn' 6: DoDrawBarssrclStrn' 7: DoDrawLines srclStrn' 8: DoDrawMonthlines srclStrn' 9: UseLessMemory srclStrn'10: DoDrawVertScalesrclStrn'11: DoDrawStartEndDate srclStrn'12: DoDrawStringBorder srclStrn'13: DoDrawHourlinessrclStrn'14: DoDrawDaylines srclStrn'15: DoDrawWeeklinessrclStrn'16: DoDrawXScaleDate srclStrn'17: DoDrawXScaleText srclStrn'18: DoDrawXScaleTime srclStrn'19: FontAvailable srclStrn'20: GetGraphFromNumber srclStrn'21: OverGraph srclStrn'22: RemoveLegend srclStrn '23: Rotate srclStrn'24: MouseDrag srclStrn'25: DoDrawNoMemoryWarning srclStrn'26: MouseMove srclStrn '27: MouseUpsrclStrn'28: MouseExit srclStrn'29: DoDrawOneLine srclStrn'30: GetExceptionModule srclStrn'31: GetExceptionType srclStrn'32: GetXCoordFromDate srclStrn'33: GetXCoordFromTotalseconds srclStrn'34: GetXValueFromCoord srclStrn'35: GetYCoordFromValue srclStrn'36: GetYValueFromCoord srclStrn '37: Modulo srclStrn'38: Plot (no parameters) srclStrn '39: Power srclStrn '40: Reset srclStrn'41: ResetGraphColorsrclStrn'42: ResetGraphPenHeightsrclStrn'43: ResetGraphPenWidth srclStrn'44: SetEnddate srclStrn'45: SetGraphColor srclStrn'46: SetGraphName srclStrn'47: SetGraphPenWidth srclStrn'48: SetGraphPenHeight srclStrn'49: SetStartdate srclStrn '50: Paint srclStrn'51: MouseDown srclStrn '52: Open srclStrn'53: GetPictureDepthsrclStrn'54: GetExtrema srclStrn'55: DoDrawUnknownErrorWarning srclStrn'56: DoDrawHorizScale srclStrn!'57: GetStartEndDateScaleLineEndY srclStrn'58: GetNumberOfGraphs srclStrn'59: GetGraphNameFromIndex srclStrn'60: GetGraphColorFromIndex srclStrn'61: GetLegendDraw srclStrn'62: GetExceptionTime srclStrn'63: GetGraphNumberFromIndexsrclStrn'64: MarkNearestPoint srclStrn'65: DoDrawNearestPointValuesrclStrn'66: UnMarkNearestPoint srclStrn'67: DoDrawLegend srclStrn '68: DisposesrclStrn '69: SuspendsrclStrn '70: Resume srclStrn'71: CalculateOffsetsrclStrn'72: GetYCoordFromDate srclStrn'73: SortGraphXaxis srclStrn'74: SortXaxis srclStrn' srclStrnP'Exceptions in module 9 (UseLessMemory) and especially -1 (ExceptionHandler) aresrclStrnV'really bad and should never occur. (Probably your whole application will crash before srclStrn)'getting an exception in module -1 or 9.) srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LMethGrupLnameStrnGetExceptionTypeCompStrnVsblInt sorcGrupdLEncoInt srclStrn&Function GetExceptionType() As integer srclStrnreturn exceptionLastTypesrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(31, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt LMethGrup LnameStrnGetExceptionModule CompStrnVsblInt sorcGruphLEncoInt srclStrn(Function GetExceptionModule() As integersrclStrnreturn ExceptionLastModule srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(30, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt LMethGrupLnameStrnExceptionHandlerCompStrnVsblInt sorcGrup dLEncoInt srclStrn-Sub ExceptionHandler(exc as RuntimeException) srclStrnstatusIsPlotting = falsesrclStrnExceptionLastType = 0 srclStrnExceptionLastModule = 0 srclStrnExceptionLastTime = new datesrclStrn&if exc isa CanvasPlotterException then srclStrn4ExceptionLastType = CanvasPlotterException(exc).typesrclStrn:ExceptionLastModule = CanvasPlotterException(exc).myModule srclStrnsrclStrnsrclStrn'ExceptionType = 0 srclStrn'ExceptionModule = 0srclStrnsrclStrnif ExceptionLastType = 1 then srclStrnif exceptionWhileDrag then srclStrnexceptionWhileDrag = false srclStrnAExceptionThrown ExceptionLastType, ExceptionLastModule,"", Freeze srclStrnreturn srclStrnend if srclStrnsrclStrn0if ExceptionLastModule = 9 then // UseLessMemorysrclStrnAExceptionThrown ExceptionLastType, ExceptionLastModule,"", Freeze srclStrn!DoDrawNoMemoryWarning() // Uh oh! srclStrn Löschen srclStrnlastCanvasWidth = width srclStrnbackdrop = nil srclStrn$graphics.clearrect 0,0,width, heightsrclStrnAExceptionThrown ExceptionLastType, ExceptionLastModule,"", Freeze srclStrnMemoryTooLow() srclStrn>elseif ExceptionLastModule = 55 then // DrawUnkownErrorWarning srclStrn Freeze = true srclStrnBlastCanvasHeight = height // jetzt ist alles Verloren => Löschen srclStrnlastCanvasWidth = width srclStrnbackdrop = nil srclStrn$graphics.clearrect 0,0,width, heightsrclStrnAExceptionThrown ExceptionLastType, ExceptionLastModule,"", Freeze srclStrnelsesrclStrnAExceptionThrown ExceptionLastType, ExceptionLastModule,"", Freeze srclStrnUseLessMemory() srclStrnend if srclStrnsrclStrn!elseif ExceptionLastType = 0 then srclStrnJif CanvasPlotterException(exc).realException isa IllegalCastException then srclStrnEExceptionThrown ExceptionLastType, ExceptionLastModule, "ICE", Freeze srclStrnLelseif CanvasPlotterException(exc).realException isa NilObjectException thensrclStrnEExceptionThrown ExceptionLastType, ExceptionLastModule, "NOE", Freeze srclStrnNelseif CanvasPlotterException(exc).realException isa OutOfBoundsException then srclStrnFExceptionThrown ExceptionLastType, ExceptionLastModule, "OOBE", Freeze srclStrnPelseif CanvasPlotterException(exc).realException isa StackOverflowException thensrclStrnEExceptionThrown ExceptionLastType, ExceptionLastModule, "SOE", Freeze srclStrnOelseif CanvasPlotterException(exc).realException isa TypeMismatchException then srclStrnEExceptionThrown ExceptionLastType, ExceptionLastModule, "TME", Freeze srclStrnelsesrclStrnFExceptionThrown ExceptionLastType, ExceptionLastModule, "unkn", Freeze srclStrnend if srclStrnsrclStrnDoDrawUnknownErrorWarning() srclStrnsrclStrnelsesrclStrnAExceptionThrown ExceptionLastType, ExceptionLastModule,"", Freeze srclStrnend if srclStrnsrclStrn6else // no CanvasPlotterException (should not happen!) srclStrnFExceptionThrown ExceptionLastType, ExceptionLastModule, "unkn", Freeze srclStrnend if srclStrnsrclStrnsrclStrn Exception srclStrn Freeze = true srclStrnExceptionThrown 0,-1,"",truesrclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnexc as RuntimeException rsltStrnEndGInt LMethGrupLnameStrnGetPictureDepth CompStrnVsblInt sorcGrupdLEncoInt srclStrn%Function GetPictureDepth() As Integer srclStrnreturn PictureDepthTemp srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(53, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt LMethGrupLnameStrn GetExtrema CompStrnVsblInt sorcGrupLEncoInt srclStrnSub GetExtrema()srclStrndim i,temp as integer srclStrnsrclStrnif ubound(graphs) >= 0 then srclStrnabsmax = graphs(0).getabsmaxsrclStrnabsmin = graphs(0).getabsminsrclStrn= minHorizLineSpacing then srclStrn0DoDrawHourlines(p)//,plotHorizPoints/24*3*86400)srclStrnend if srclStrnEif DrawDayLines and plotHorizPoints*86400 >= minHorizLineSpacing then srclStrn,DoDrawDaylines(p)//,plotHorizPoints*3*86400)srclStrnend if srclStrnQif DrawWeekLines and plotHorizPoints*604800 >= minHorizLineSpacing then //86400*7 srclStrn.DoDrawWeeklines(p)//,plotHorizPoints*30*86400) srclStrnend if srclStrnTif DrawMonthLines and plotHorizPoints*2592000 >= minHorizLineSpacing then //86400*30srclStrnDoDrawMonthlines(p) srclStrnend if srclStrnif DrawStartEndDate thensrclStrnDoDrawStartEndDate(p) srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(56, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn p as Graphics rsltStrnEndGInt LMethGrup(LnameStrnGetStartEndDateScaleLineEndYCompStrnVsblInt sorcGrup`LEncoInt srclStrnMFunction GetStartEndDateScaleLineEndY(p as Graphics, x as integer) As integer srclStrndim datecopy as datesrclStrndim stringToDraw as String srclStrnsrclStrndatecopy = new date srclStrnsrclStrndif drawstartenddate and (p.width-rightmargin-p.textheight <= x or x <= leftmargin+p.textheight) thensrclStrn// verkürzte Linie ZeichnensrclStrn9if x <= leftmargin+p.textheight then //dann das startdate srclStrn.datecopy.totalSeconds = startdate.totalSeconds srclStrn2stringToDraw = DrawDateHook(datecopy, true, false) srclStrnif stringToDraw = "" then srclStrn"stringToDraw = startdate.shortdate srclStrnend if srclStrnelse // das enddate srclStrn,datecopy.totalSeconds = enddate.totalSecondssrclStrn2stringToDraw = DrawDateHook(datecopy, true, false) srclStrnif stringToDraw = "" then srclStrn stringToDraw = enddate.shortdatesrclStrnend if srclStrnend if srclStrnsrclStrnNreturn p.height-bottomMargin-p.stringWidth(stringToDraw)+scaleoffsetvertical-3 srclStrnend if srclStrnsrclStrnreturn p.height-bottommarginsrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(57, 0, exc)srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnp as Graphics, x as integer rsltStrninteger EndGInt LMethGrupLnameStrnGetNumberOfGraphs CompStrnVsblInt sorcGrupdLEncoInt srclStrn'Function GetNumberOfGraphs() As Integer srclStrnreturn ubound(Graphs)+1 srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(58, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt LMethGrupLnameStrnGetGraphColorFromIndex CompStrnVsblInt sorcGrupLEncoInt srclStrn:Function GetGraphColorFromIndex(index As Integer) As Color srclStrn+if index < 0 or index > ubound(Graphs) then srclStrnreturn rgb(0,0,0) srclStrnelsesrclStrnreturn Graphs(index).GetColor srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(60, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnindex As IntegerrsltStrnColor EndGInt LMethGrupLnameStrnGetGraphNameFromIndex CompStrnVsblInt sorcGrupLEncoInt srclStrn:Function GetGraphNameFromIndex(index as Integer) As String srclStrn+if index < 0 or index > ubound(Graphs) then srclStrn return "" srclStrnelsesrclStrn!return Graphs(index).GetGraphName srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(59, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnindex as IntegerrsltStrnString EndGInt LMethGrupLnameStrnGetLegendDrawn CompStrnVsblInt sorcGrup`LEncoInt srclStrn$Function GetLegendDrawn() As BooleansrclStrnreturn DrawLegendTemp srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(61, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnBoolean EndGInt LMethGrupLnameStrnGetExceptionTimeCompStrnVsblInt sorcGrup`LEncoInt srclStrn#Function GetExceptionTime() As date srclStrnreturn ExceptionLastTimesrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(62, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrndateEndGInt LMethGrupLnameStrnGetGraphNumberFromIndex CompStrnVsblInt sorcGrupLEncoInt srclStrn=Function GetGraphNumberFromIndex(index as Integer) As Integer srclStrn+if index < 0 or index > ubound(Graphs) then srclStrnreturn 0srclStrnelsesrclStrn#return Graphs(index).GetGraphNumber srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(63, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnindex as IntegerrsltStrnInteger EndGInt LMethGrupLnameStrnMarkNearestPointCompStrnVsblInt sorcGrupLEncoInt srclStrnMSub MarkNearestPoint(Graph as CanvasPlotterGraph, X as Integer, Y as Integer) srclStrndim xPos as Double srclStrndim d,e as date srclStrn*dim candidateX, candidateY,temp as integer srclStrn#dim candidate as CanvasPlotterPoint srclStrndim dx, dy as integer srclStrndim durchmesser as integer srclStrndim i as integersrclStrnsrclStrnxPos = GetXValueFromCoord(X)srclStrnsrclStrn"temp = Graph.GetNumberOfPoints()-1 srclStrnfor i = 0 to temp srclStrnd = Graph.GetPoint(i).xValuesrclStrnif d.totalSeconds > xPos then srclStrni=i+1///////////srclStrnexitsrclStrnend if srclStrnnextsrclStrnsrclStrn i=i-1 //wg ende der for schleifesrclStrn$//i = min( i, ubound(Graph.Points) )srclStrnsrclStrnif i <> 0 then srclStrne = Graph.GetPoint(i-1).xValue srclStrn1if d.totalSeconds-xPos > xPos-e.totalSeconds then srclStrni = i-1 srclStrnd = e srclStrnend if srclStrnend if srclStrnsrclStrncandidate = Graph.GetPoint(i) srclStrnBcandidateX = GetXCoordFromTotalseconds( d.totalSeconds, graphics ) srclStrnif yAxisIsDateB thensrclStrnd = candidate.yValuesrclStrn-candidateY = GetYCoordFromDate( d, graphics ) srclStrnelsesrclStrn>candidateY = GetYCoordFromValue( candidate.yValue, graphics ) srclStrnend if srclStrnsrclStrndx = candidateX-X srclStrndy = candidateY-Y srclStrnsrclStrn8if sqrt( dx*dx + dy*dy ) <= nearestPointMaxDistance thensrclStrnif nearestPointIsMarked thensrclStrnPif nearestPointIndex = i and nearestPointGraphNumber = Graph.GetGraphNumber thensrclStrnreturn srclStrnend if srclStrnUnMarkNearestPoint()srclStrnsrclStrnt'if nearestPointBounds(1) <= legendPictureTop+legendPictureHeight and nearestPointBounds(3) >= legendPictureTop thensrclStrnu'if nearestPointBounds(0) <= legendPictureLeft+legendPictureWidth and nearestPointBounds(2) >= legendPictureLeft then srclStrn'DoDrawLegend(Graph)srclStrn'end if srclStrn'end if srclStrnsrclStrntif nearestPointRect.Top <= legendPictureTop+legendPictureHeight and nearestPointRect.Bottom >= legendPictureTop thensrclStrnuif nearestPointRect.Left <= legendPictureLeft+legendPictureWidth and nearestPointRect.Right >= legendPictureLeft then srclStrnDoDrawLegend(Graph) srclStrnend if srclStrnend if srclStrnsrclStrnend if srclStrnnearestPointIndex = i srclStrn.nearestPointGraphNumber = Graph.GetGraphNumber srclStrn#graphics.forecolor = Graph.GetColor srclStrnsrclStrnHnearestPointRect.Left(candidateX-1-CalculateOffset( graph.getpenwidth ))srclStrnHnearestPointRect.Top(candidateY-1-CalculateOffset( graph.getpenheight ))srclStrn+nearestPointRect.Width(Graph.GetPenWidth+2) srclStrn-nearestPointRect.Height(Graph.GetPenHeight+2) srclStrnngraphics.fillrect nearestPointRect.Left, nearestPointRect.Top, nearestPointRect.Width, nearestPointRect.Height srclStrnif ClickSound <> nil then srclStrnClickSound.Play srclStrnend if srclStrnYDoDrawNearestPointValue( candidate.yValue, X, Y, candidateX, candidateY, Graph.GetColor ) srclStrnnearestPointIsMarked = true srclStrnelsesrclStrnif nearestPointIsMarked thensrclStrnUnMarkNearestPoint()srclStrnsrclStrnt'if nearestPointBounds(1) <= legendPictureTop+legendPictureHeight and nearestPointBounds(3) >= legendPictureTop thensrclStrnu'if nearestPointBounds(0) <= legendPictureLeft+legendPictureWidth and nearestPointBounds(2) >= legendPictureLeft then srclStrn'DoDrawLegend(Graph)srclStrn'end if srclStrn'end if srclStrnsrclStrntif nearestPointRect.Top <= legendPictureTop+legendPictureHeight and nearestPointRect.Bottom >= legendPictureTop thensrclStrnuif nearestPointRect.Left <= legendPictureLeft+legendPictureWidth and nearestPointRect.Right >= legendPictureLeft then srclStrnDoDrawLegend(Graph) srclStrnend if srclStrnend if srclStrnsrclStrnend if srclStrnend if srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(64, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrn7Graph as CanvasPlotterGraph, X as Integer, Y as Integer rsltStrnEndGInt LMethGrup4LnameStrnUnMarkNearestPoint CompStrnVsblInt sorcGrupLEncoInt srclStrnSub UnMarkNearestPoint()srclStrn'dim w, h as integersrclStrndim p as picturesrclStrnsrclStrnif backdrop = nil then srclStrn'raise new CanvasPlotterException(66, 3) srclStrnend if srclStrnsrclStrnQp = newPicture(nearestPointRect.Width, nearestPointRect.Height, pictureDepthTemp) srclStrnif p = nil then srclStrn&raise new CanvasPlotterException(66,1) srclStrnend if srclStrnsrclStrnRp.graphics.drawpicture backdrop, -(nearestPointRect.Left), -(nearestPointRect.Top) srclStrnsrclStrnCgraphics.drawpicture p, nearestPointRect.Left, nearestPointRect.Top srclStrnsrclStrnnearestPointIsMarked = falsesrclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(66, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt LMethGrup 8LnameStrnDoDrawNearestPointValue CompStrnVsblInt sorcGrup ,LEncoInt srclStrnSub DoDrawNearestPointValue(value as variant, mouseX as Integer, mouseY as Integer, theX as Integer, theY as Integer, theColor as Color)srclStrn dim d as date srclStrndim w, h, x, y as integer srclStrndim stringtodraw as string srclStrn"dim oldright, oldbottom as integer srclStrnsrclStrnif yAxisIsDateB thensrclStrn d = value srclStrn+stringtodraw = DrawDateHook(d, false, true) srclStrnif stringtodraw = "" then srclStrnstringtodraw = d.shortdate srclStrnend if srclStrnelsesrclStrn1stringtodraw = DrawDoubleHook(value, false, true) srclStrnif stringtodraw = "" then srclStrn!stringtodraw = format(value, "#") srclStrnend if srclStrnend if srclStrnsrclStrngraphics.textfont = legendFont srclStrn"graphics.textsize = legendFontSize srclStrn$graphics.underline = legendUnderlinesrclStrngraphics.bold = legendBold srclStrngraphics.italic = legendItalic srclStrnsrclStrn&w = graphics.stringwidth(stringtodraw) srclStrnh = graphics.textheight srclStrnsrclStrnx = max(leftmargin, mouseX-w-3) srclStrnif theY < height\3 then srclStrn1y = nearestPointRect.Bottom+1+graphics.textascent srclStrnif x+w >= mouseX then srclStrn y = y + 12 srclStrnend if srclStrnelsesrclStrn0y = nearestPointRect.Top-h-1+graphics.textascentsrclStrnend if srclStrnsrclStrnsrclStrngraphics.forecolor = bkgndColor srclStrn/DoDrawStringBorder stringtodraw, graphics, x, y srclStrnsrclStrngraphics.forecolor = theColor srclStrn&graphics.drawstring stringtodraw, x, y srclStrnsrclStrn!oldright = nearestPointRect.Right srclStrn#oldbottom = nearestPointRect.Bottom srclStrn8nearestPointRect.Left(min( nearestPointRect.Left, x-1 ))srclStrnJnearestPointRect.Top(min( nearestPointRect.Top, y-graphics.textascent-1 )) srclStrn>'if not nearestPointRect.SetRight(max( oldright, x+w+1 )) then srclStrn('raise new CanvasPlotterException(65, 4)srclStrn'end if srclStrnT'if not nearestPointRect.SetBottom(max( oldbottom, y-graphics.textascent+h+1 )) thensrclStrn('raise new CanvasPlotterException(65, 4)srclStrn'end if srclStrn.nearestPointRect.Right(max( oldright, x+w+1 )) srclStrnDnearestPointRect.Bottom(max( oldbottom, y-graphics.textascent+h+1 ))srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrn raise exc srclStrnelsesrclStrn,raise new CanvasPlotterException(65, 0, exc)srclStrnend if srclStrnEnd Sub EndGInt LEncoInt AlasStrnflagInt shrdInt parmStrnkvalue as variant, mouseX as Integer, mouseY as Integer, theX as Integer, theY as Integer, theColor as Color rsltStrnEndGInt LMethGrup|LnameStrnGetYCoordFromDate CompStrnVsblInt sorcGrupLEncoInt srclStrnEFunction GetYCoordFromDate(theDate as Date, g as Graphics) As Integer srclStrnJreturn g.height-bottommargin-(thedate.totalseconds-AbsMin)*plotVertPoints srclStrnsrclStrn Exception exc srclStrn&if exc isa CanvasPlotterException then srclStrnExceptionHandler excsrclStrnelsesrclStrn7ExceptionHandler new CanvasPlotterException(72, 0, exc) srclStrnend if srclStrn End FunctionEndGInt LEncoInt AlasStrnflagInt shrdInt parmStrntheDate as Date, g as Graphics rsltStrnInteger EndGInt LMethGrup @LnameStrn DoDrawLegendCompStrnVsblInt sorcGrup LEncoInt srclStrn-Sub DoDrawLegend(Graph as CanvasPlotterGraph) srclStrndim stringtodraw as string srclStrndim legendPicture as PicturesrclStrnsrclStrn1stringtodraw = DrawLegendHook(Graph.GetGraphName) srclStrnsrclStrnif stringToDraw = "" then srclStrn!stringToDraw = Graph.GetGraphName srclStrnelseif stringtodraw = " " then srclStrnreturn srclStrnend if srclStrnsrclStrngraphics.textfont = legendFont srclStrn"graphics.textsize = legendFontsize srclStrngraphics.bold = legendBold srclStrngraphics.italic = legendItalic srclStrnsrclStrnhlegendPicture = newPicture(graphics.stringwidth(stringToDraw)+5,graphics.TextHeight+2, PictureDepthTemp)srclStrnsrclStrnif legendPicture = nil then srclStrn'raise new CanvasPlotterException(67, 1) srclStrnend if srclStrnsrclStrngraphics.bold = false srclStrngraphics.italic = false srclStrnsrclStrnlif LegendDrawn and (legendPicture.widthnameStrnnoPointsWarningFontSize CompStrnVsblInt sorcGrupLM?EncoInt srclStrn"noPointsWarningFontSize As integer srclStrnEndGInt M?EncoInt declStrn"noPointsWarningFontSize As integer flagInt shrdInt EndGInt M>PropGrupM@nameStrnnoPointsWarningBkgndColor CompStrnVsblInt sorcGrupLMAEncoInt srclStrn"noPointsWarningBkgndColor As Color srclStrnEndGInt MAEncoInt declStrn"noPointsWarningBkgndColor As Color flagInt shrdInt EndGInt M@PropGrupMBnameStrnnoPointsWarningFontColorCompStrnVsblInt sorcGrupLMCEncoInt srclStrn!noPointsWarningFontColor As Color srclStrnEndGInt MCEncoInt declStrn!noPointsWarningFontColor As Color flagInt shrdInt EndGInt MBPropGrupMDnameStrn graphMask(0)CompStrnVsblInt sorcGrup@MEEncoInt srclStrngraphMask(0) As picture srclStrnEndGInt MEEncoInt declStrngraphMask(0) As picture flagInt shrdInt EndGInt MDPropGrupMFnameStrnlegendPictureLeft CompStrnVsblInt sorcGrupDMGEncoInt srclStrnlegendPictureLeft As IntegersrclStrnEndGInt MGEncoInt declStrnlegendPictureLeft As IntegerflagInt shrdInt EndGInt MFPropGrupMHnameStrnlegendPictureTopCompStrnVsblInt sorcGrupDMIEncoInt srclStrnlegendPictureTop As Integer srclStrnEndGInt MIEncoInt declStrnlegendPictureTop As Integer flagInt shrdInt EndGInt MHPropGrupMJnameStrn legendDrawn CompStrnVsblInt sorcGrup@MKEncoInt srclStrnlegendDrawn As Boolean srclStrnEndGInt MKEncoInt declStrnlegendDrawn As Boolean flagInt shrdInt EndGInt MJPropGrupMLnameStrn legendFont CompStrnVsblInt sorcGrup<MMEncoInt srclStrnlegendFont As StringsrclStrnEndGInt MMEncoInt declStrnlegendFont As StringflagInt shrdInt EndGInt MLPropGrupMNnameStrnlegendFontSize CompStrnVsblInt sorcGrupDMOEncoInt srclStrnlegendFontSize As Integer srclStrnEndGInt MOEncoInt declStrnlegendFontSize As Integer flagInt shrdInt EndGInt MNPropGrupMPnameStrnlegendBkgndColorCompStrnVsblInt sorcGrupDMQEncoInt srclStrnlegendBkgndColor As Color srclStrnEndGInt MQEncoInt declStrnlegendBkgndColor As Color flagInt shrdInt EndGInt MPPropGrupMRnameStrn drawLegend CompStrnVsblInt sorcGrup@MSEncoInt srclStrndrawLegend As Boolean srclStrnEndGInt MSEncoInt declStrndrawLegend As Boolean flagInt shrdInt EndGInt MRPropGrupMTnameStrn Graphs(0) CompStrnVsblInt sorcGrupHMUEncoInt srclStrnGraphs(0) As CanvasPlotterGraph srclStrnEndGInt MUEncoInt declStrnGraphs(0) As CanvasPlotterGraph flagInt shrdInt EndGInt MTPropGrupMVnameStrn mouseDownAtXCompStrnVsblInt sorcGrup@MWEncoInt srclStrnmouseDownAtX As Integer srclStrnEndGInt MWEncoInt declStrnmouseDownAtX As Integer flagInt shrdInt EndGInt MVPropGrupMXnameStrn mouseDownAtYCompStrnVsblInt sorcGrup@MYEncoInt srclStrnmouseDownAtY As Integer srclStrnEndGInt MYEncoInt declStrnmouseDownAtY As Integer flagInt shrdInt EndGInt MXPropGrupMZnameStrn legendBold CompStrnVsblInt sorcGrup@M[EncoInt srclStrnlegendBold As boolean srclStrnEndGInt M[EncoInt declStrnlegendBold As boolean flagInt shrdInt EndGInt MZPropGrupM\nameStrn legendItalicCompStrnVsblInt sorcGrup@M]EncoInt srclStrnlegendItalic As boolean srclStrnEndGInt M]EncoInt declStrnlegendItalic As boolean flagInt shrdInt EndGInt M\PropGrupM^nameStrnlegendUnderline CompStrnVsblInt sorcGrupDM_EncoInt srclStrnlegendUnderline As boolean srclStrnEndGInt M_EncoInt declStrnlegendUnderline As boolean flagInt shrdInt EndGInt M^PropGrupM`nameStrnminVertLineSpacing CompStrnVsblInt sorcGrupHMaEncoInt srclStrnminVertLineSpacing As Integer srclStrnEndGInt MaEncoInt declStrnminVertLineSpacing As Integer flagInt shrdInt EndGInt M`PropGrupMbnameStrnrightSideScale CompStrnVsblInt sorcGrupDMcEncoInt srclStrnrightSideScale As Boolean srclStrnEndGInt McEncoInt declStrnrightSideScale As Boolean flagInt shrdInt EndGInt MbPropGrupMdnameStrnscaleOffsetVertical CompStrnVsblInt sorcGrupHMeEncoInt srclStrnscaleOffsetVertical As Integer srclStrnEndGInt MeEncoInt declStrnscaleOffsetVertical As Integer flagInt shrdInt EndGInt MdPropGrupMfnameStrnscaleOffsetHorizontal CompStrnVsblInt sorcGrupHMgEncoInt srclStrn scaleOffsetHorizontal As IntegersrclStrnEndGInt MgEncoInt declStrn scaleOffsetHorizontal As IntegerflagInt shrdInt EndGInt MfPropGrupMhnameStrnvertScaleColor CompStrnVsblInt sorcGrup@MiEncoInt srclStrnvertScaleColor As Color srclStrnEndGInt MiEncoInt declStrnvertScaleColor As Color flagInt shrdInt EndGInt MhPropGrupMjnameStrnDrawMonthLines CompStrnVsblInt sorcGrupDMkEncoInt srclStrnDrawMonthLines As boolean srclStrnEndGInt MkEncoInt declStrnDrawMonthLines As boolean flagInt shrdInt EndGInt MjPropGrupMlnameStrn DrawWeekLines CompStrnVsblInt sorcGrup@MmEncoInt srclStrnDrawWeekLines As booleansrclStrnEndGInt MmEncoInt declStrnDrawWeekLines As booleanflagInt shrdInt EndGInt MlPropGrupMnnameStrn DrawDayLinesCompStrnVsblInt sorcGrup@MoEncoInt srclStrnDrawDayLines As boolean srclStrnEndGInt MoEncoInt declStrnDrawDayLines As boolean flagInt shrdInt EndGInt MnPropGrupMpnameStrn DrawHourLines CompStrnVsblInt sorcGrup@MqEncoInt srclStrnDrawHourLines As booleansrclStrnEndGInt MqEncoInt declStrnDrawHourLines As booleanflagInt shrdInt EndGInt MpPropGrupMrnameStrn drawVertScale CompStrnVsblInt sorcGrup@MsEncoInt srclStrndrawVertScale As booleansrclStrnEndGInt MsEncoInt declStrndrawVertScale As booleanflagInt shrdInt EndGInt MrPropGrupMtnameStrntypesDetermined CompStrnVsblInt sorcGrupDMuEncoInt srclStrntypesDetermined As Boolean srclStrnEndGInt MuEncoInt declStrntypesDetermined As Boolean flagInt shrdInt EndGInt MtPropGrupMvnameStrn xAxisIsDateBCompStrnVsblInt sorcGrup@MwEncoInt srclStrnxAxisIsDateB As Boolean srclStrnEndGInt MwEncoInt declStrnxAxisIsDateB As Boolean flagInt shrdInt EndGInt MvPropGrupMxnameStrn yAxisIsDateBCompStrnVsblInt sorcGrup@MyEncoInt srclStrnyAxisIsDateB As Boolean srclStrnEndGInt MyEncoInt declStrnyAxisIsDateB As Boolean flagInt shrdInt EndGInt MxPropGrupMznameStrnshortLineHeight CompStrnVsblInt sorcGrupDM{EncoInt srclStrnshortLineHeight As Integer srclStrnEndGInt M{EncoInt declStrnshortLineHeight As Integer flagInt shrdInt EndGInt MzPropGrupM|nameStrnBarColorCompStrnVsblInt sorcGrup<M}EncoInt srclStrnBarColor As Color srclStrnEndGInt M}EncoInt declStrnBarColor As Color flagInt shrdInt EndGInt M|PropGrupM~nameStrnDrawBarsCompStrnVsblInt sorcGrup<MEncoInt srclStrnDrawBars As Boolean srclStrnEndGInt MEncoInt declStrnDrawBars As Boolean flagInt shrdInt EndGInt M~PropGrupMnameStrn DaysForOneBar CompStrnVsblInt sorcGrup@MEncoInt srclStrnDaysForOneBar As IntegersrclStrnEndGInt MEncoInt declStrnDaysForOneBar As IntegerflagInt shrdInt EndGInt MPropGrupMnameStrnDrawStartEndDateCompStrnVsblInt sorcGrupDMEncoInt srclStrnDrawStartEndDate As Boolean srclStrnEndGInt MEncoInt declStrnDrawStartEndDate As Boolean flagInt shrdInt EndGInt MPropGrupMnameStrnstartEndDateColor CompStrnVsblInt sorcGrupDMEncoInt srclStrnstartEndDateColor As Color srclStrnEndGInt MEncoInt declStrnstartEndDateColor As Color flagInt shrdInt EndGInt MPropGrupMnameStrn scaleFont CompStrnVsblInt sorcGrup<MEncoInt srclStrnscaleFont As String srclStrnEndGInt MEncoInt declStrnscaleFont As String flagInt shrdInt EndGInt MPropGrupMnameStrn yScaleIsTimeB CompStrnVsblInt sorcGrup@MEncoInt srclStrnyScaleIsTimeB As booleansrclStrnEndGInt MEncoInt declStrnyScaleIsTimeB As booleanflagInt shrdInt EndGInt MPropGrupMnameStrnminHorizLineSpacing CompStrnVsblInt sorcGrupHMEncoInt srclStrnminHorizLineSpacing As Integer srclStrnEndGInt MEncoInt declStrnminHorizLineSpacing As Integer flagInt shrdInt EndGInt MPropGrupMnameStrn pictureDepthCompStrnVsblInt sorcGrup@MEncoInt srclStrnpictureDepth As Integer srclStrnEndGInt MEncoInt declStrnpictureDepth As Integer flagInt shrdInt EndGInt MPropGrupMnameStrn scaleFontSize CompStrnVsblInt sorcGrup@MEncoInt srclStrnscaleFontSize As integersrclStrnEndGInt MEncoInt declStrnscaleFontSize As integerflagInt shrdInt EndGInt MPropGrupMnameStrn FirstWeekDayCompStrnVsblInt sorcGrup@MEncoInt srclStrnFirstWeekDay As Integer srclStrnEndGInt MEncoInt declStrnFirstWeekDay As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnlowMemoryWarningCompStrnVsblInt sorcGrupDMEncoInt srclStrnlowMemoryWarning As string srclStrnEndGInt MEncoInt declStrnlowMemoryWarning As string flagInt shrdInt EndGInt MPropGrupMnameStrnFreeze CompStrnVsblInt sorcGrup<MEncoInt srclStrnFreeze As boolean srclStrnEndGInt MEncoInt declStrnFreeze As boolean flagInt shrdInt EndGInt MPropGrupMnameStrnExceptionLastType CompStrnVsblInt sorcGrupDMEncoInt srclStrnExceptionLastType As integersrclStrnEndGInt MEncoInt declStrnExceptionLastType As integerflagInt shrdInt EndGInt MPropGrupMnameStrndrawLegendTemp CompStrnVsblInt sorcGrupDMEncoInt srclStrndrawLegendTemp As boolean srclStrnEndGInt MEncoInt declStrndrawLegendTemp As boolean flagInt shrdInt EndGInt MPropGrupMnameStrnpictureDepthTempCompStrnVsblInt sorcGrupDMEncoInt srclStrnpictureDepthTemp As integer srclStrnEndGInt MEncoInt declStrnpictureDepthTemp As integer flagInt shrdInt EndGInt MPropGrupMnameStrnstatusIsExceptionPlot CompStrnVsblInt sorcGrupHMEncoInt srclStrn statusIsExceptionPlot As booleansrclStrnEndGInt MEncoInt declStrn statusIsExceptionPlot As booleanflagInt shrdInt EndGInt MPropGrupMnameStrnLastCanvasHeightCompStrnVsblInt sorcGrupDMEncoInt srclStrnLastCanvasHeight As Integer srclStrnEndGInt MEncoInt declStrnLastCanvasHeight As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnLastCanvasWidth CompStrnVsblInt sorcGrupDMEncoInt srclStrnLastCanvasWidth As Integer srclStrnEndGInt MEncoInt declStrnLastCanvasWidth As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnlegendPictureWidth CompStrnVsblInt sorcGrupHMEncoInt srclStrnlegendPictureWidth As integer srclStrnEndGInt MEncoInt declStrnlegendPictureWidth As integer flagInt shrdInt EndGInt MPropGrupMnameStrnlegendPictureHeight CompStrnVsblInt sorcGrupHMEncoInt srclStrnlegendPictureHeight As Integer srclStrnEndGInt MEncoInt declStrnlegendPictureHeight As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnunknownErrorWarning CompStrnVsblInt sorcGrupHMEncoInt srclStrnunknownErrorWarning As String srclStrnEndGInt MEncoInt declStrnunknownErrorWarning As String flagInt shrdInt EndGInt MPropGrupMnameStrnExceptionLastModule CompStrnVsblInt sorcGrupHMEncoInt srclStrnExceptionLastModule As Integer srclStrnEndGInt MEncoInt declStrnExceptionLastModule As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnstartEndDateAutoColor CompStrnVsblInt sorcGrupHMEncoInt srclStrn startEndDateAutoColor As BooleansrclStrnEndGInt MEncoInt declStrn startEndDateAutoColor As BooleanflagInt shrdInt EndGInt MPropGrupMnameStrndrawVertScaleOnTop CompStrnVsblInt sorcGrupHMEncoInt srclStrndrawVertScaleOnTop As boolean srclStrnEndGInt MEncoInt declStrndrawVertScaleOnTop As boolean flagInt shrdInt EndGInt MPropGrupMnameStrnscaleLineWidth CompStrnVsblInt sorcGrupDMEncoInt srclStrnscaleLineWidth As Integer srclStrnEndGInt MEncoInt declStrnscaleLineWidth As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnscaleLineHeight CompStrnVsblInt sorcGrupDMEncoInt srclStrnscaleLineHeight As Integer srclStrnEndGInt MEncoInt declStrnscaleLineHeight As Integer flagInt shrdInt EndGInt MPropGrupMnameStrndrawHorizScaleOnTop CompStrnVsblInt sorcGrupHMEncoInt srclStrndrawHorizScaleOnTop As boolean srclStrnEndGInt MEncoInt declStrndrawHorizScaleOnTop As boolean flagInt shrdInt EndGInt MPropGrupMnameStrnstatusIsPlottingCompStrnVsblInt sorcGrupDMEncoInt srclStrnstatusIsPlotting As Boolean srclStrnEndGInt MEncoInt declStrnstatusIsPlotting As Boolean flagInt shrdInt EndGInt MPropGrupMnameStrnuserMouseDownReturn CompStrnVsblInt sorcGrupHMEncoInt srclStrnuserMouseDownReturn As Boolean srclStrnEndGInt MEncoInt declStrnuserMouseDownReturn As Boolean flagInt shrdInt EndGInt MPropGrupMnameStrn ClippingNameCompStrnVsblInt sorcGrup@MEncoInt srclStrnClippingName As String srclStrnEndGInt MEncoInt declStrnClippingName As String flagInt shrdInt EndGInt MPropGrupMnameStrnExceptionLastTime CompStrnVsblInt sorcGrupDMEncoInt srclStrnExceptionLastTime As date srclStrnEndGInt MEncoInt declStrnExceptionLastTime As date flagInt shrdInt EndGInt MPropGrupMnameStrnlegendGraphNumber CompStrnVsblInt sorcGrupDMEncoInt srclStrnlegendGraphNumber As IntegersrclStrnEndGInt MEncoInt declStrnlegendGraphNumber As IntegerflagInt shrdInt EndGInt MPropGrupMnameStrndrawNearestPointCompStrnVsblInt sorcGrupDMEncoInt srclStrndrawNearestPoint As Boolean srclStrnEndGInt MEncoInt declStrndrawNearestPoint As Boolean flagInt shrdInt EndGInt MPropGrupMnameStrnnearestPointMaxDistance CompStrnVsblInt sorcGrupLMEncoInt srclStrn"nearestPointMaxDistance As Integer srclStrnEndGInt MEncoInt declStrn"nearestPointMaxDistance As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnnearestPointIsMarkedCompStrnVsblInt sorcGrupHMEncoInt srclStrnnearestPointIsMarked As Boolean srclStrnEndGInt MEncoInt declStrnnearestPointIsMarked As Boolean flagInt shrdInt EndGInt MPropGrupMnameStrnnearestPointRectCompStrnVsblInt sorcGrup@MEncoInt srclStrnnearestPointRect As RectsrclStrnEndGInt MEncoInt declStrnnearestPointRect As RectflagInt shrdInt EndGInt MPropGrupMnameStrnnearestPointIndex CompStrnVsblInt sorcGrupDMEncoInt srclStrnnearestPointIndex As IntegersrclStrnEndGInt MEncoInt declStrnnearestPointIndex As IntegerflagInt shrdInt EndGInt MPropGrupMnameStrn ClickSound CompStrnVsblInt sorcGrup<MEncoInt srclStrnClickSound As Sound srclStrnEndGInt MEncoInt declStrnClickSound As Sound flagInt shrdInt EndGInt MPropGrupMnameStrnnearestPointGraphNumber CompStrnVsblInt sorcGrupLMEncoInt srclStrn"nearestPointGraphNumber As Integer srclStrnEndGInt MEncoInt declStrn"nearestPointGraphNumber As Integer flagInt shrdInt EndGInt MPropGrupMnameStrnexceptionWhileDrag CompStrnVsblInt sorcGrupHMEncoInt srclStrnexceptionWhileDrag As Boolean srclStrnEndGInt MEncoInt declStrnexceptionWhileDrag As Boolean flagInt shrdInt EndGInt MPropGrupMnameStrn isSuspended CompStrnVsblInt sorcGrup@MEncoInt srclStrnisSuspended As boolean srclStrnEndGInt MEncoInt declStrnisSuspended As boolean flagInt shrdInt EndGInt MVwBhGrup'MVwPrGrupXMNameStrnNameVsblInt PrGpStrnID typeStrnString CPifStrnCanvas EndGInt MVwPrGrup\MNameStrnIndex VsblInt PrGpStrnID typeStrnInteger CPifStrnCanvas EndGInt MVwPrGrupHMNameStrnSuper VsblInt PrGpStrnID CPifStrnCanvas EndGInt MVwPrGrup\MNameStrnLeftVsblInt PrGpStrnPositiontypeStrnInteger CPifStrnCanvas EndGInt MVwPrGrup\MNameStrnTop VsblInt PrGpStrnPositiontypeStrnInteger CPifStrnCanvas EndGInt MVwPrGruppMNameStrnWidth VsblInt PrGpStrnPositionPValStrn100 typeStrnInteger CPifStrnCanvas EndGInt MVwPrGruppMNameStrnHeight VsblInt PrGpStrnPositionPValStrn100 typeStrnInteger CPifStrnCanvas EndGInt MVwPrGrup`MNameStrnLockLeftVsblInt PrGpStrnPositiontypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrup`MNameStrnLockTop VsblInt PrGpStrnPositiontypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrupdMNameStrn LockRight VsblInt PrGpStrnPositiontypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrupdMNameStrn LockBottom VsblInt PrGpStrnPositiontypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGruplMNameStrn TabPanelIndex PrGpStrnPositionPValStrn0 typeStrnInteger CPifStrnCanvas EndGInt MVwPrGruppMNameStrnTabIndexVsblInt PrGpStrnPositionPValStrn0 typeStrnInteger CPifStrnCanvas EndGInt MVwPrGruptMNameStrnVisible VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrupMNameStrnHelpTag VsblInt PrGpStrn Appearance typeStrnString vbETStrnMultiLineEditor CPifStrnCanvas EndGInt MVwPrGrup|MNameStrnAutoDeactivate VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGruptMNameStrnEnabled VsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrupxMNameStrn UseFocusRingVsblInt PrGpStrn Appearance PValStrnTruetypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrupxMNameStrnBackdropVsblInt PrGpStrn Appearance typeStrnPicture vbETStrnPicture CPifStrnCanvas EndGInt MVwPrGrupdMNameStrn AcceptFocus VsblInt PrGpStrnBehaviortypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrupdMNameStrn AcceptTabs VsblInt PrGpStrnBehaviortypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrupxMNameStrnEraseBackground VsblInt PrGpStrnBehaviorPValStrnTruetypeStrnBoolean CPifStrnCanvas EndGInt MVwPrGrup4MNameStrn InitialParent CPifStrnCanvas EndGInt MVwPrGrupTMNameStrn LeftMargin PrGpStrnBehaviorPValStrn0 typeStrninteger EndGInt MVwPrGrupTMNameStrn rightMargin PrGpStrnBehaviorPValStrn0 typeStrninteger EndGInt MVwPrGrupTMNameStrn topMargin PrGpStrnBehaviorPValStrn0 typeStrninteger EndGInt MVwPrGrupTMNameStrn bottomMarginPrGpStrnBehaviorPValStrn0 typeStrninteger EndGInt MVwPrGrupXMNameStrn monthColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrup`MNameStrnDefaultGraphColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupXMNameStrn BkgndColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupXMNameStrnDefaultPenHeightPrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt MVwPrGrupXMNameStrnDefaultPenWidth PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt MVwPrGrupXMNameStrn weekColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupTMNameStrndayColorPrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupdMNameStrnnoPointsWarning PrGpStrnBehaviortypeStrnString vbETStrnMultiLineEditor EndGInt MVwPrGrupTMNameStrn DrawOutline PrGpStrnBehaviorPValStrn0 typeStrnBoolean EndGInt MVwPrGrupXMNameStrn outlineColorPrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupXMNameStrn hourColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupXMNameStrn ClipMinHeight PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt MVwPrGrupTMNameStrn ClipMinWidthPrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt MVwPrGruphMNameStrnnoPointsWarningFont PrGpStrnBehaviortypeStrnString vbETStrnMultiLineEditor EndGInt MVwPrGrup`MNameStrnnoPointsWarningFontSize PrGpStrnBehaviorPValStrn0 typeStrninteger EndGInt MVwPrGruphMNameStrnnoPointsWarningBkgndColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupdMNameStrnnoPointsWarningFontColorPrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt MVwPrGrupXMNameStrnlegendPictureTopPrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt MVwPrGrup`MNameStrn legendFont PrGpStrnBehaviortypeStrnString vbETStrnMultiLineEditor EndGInt MVwPrGrupXMNameStrnlegendFontSize PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt MVwPrGrup\NNameStrnlegendBkgndColorPrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt NVwPrGrupTNNameStrn drawLegend PrGpStrnBehaviorPValStrn0 typeStrnBoolean EndGInt NVwPrGrupTNNameStrn legendBold PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt NVwPrGrupTNNameStrn legendItalicPrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt NVwPrGrupXNNameStrnlegendUnderline PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt NVwPrGrup\NNameStrnminVertLineSpacing PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrupXNNameStrnrightSideScale PrGpStrnBehaviorPValStrn0 typeStrnBoolean EndGInt NVwPrGrup\NNameStrnscaleOffsetVertical PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrup`NNameStrnscaleOffsetHorizontal PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrup\N NameStrnvertScaleColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt N VwPrGrupXN NameStrnDrawMonthLines PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt N VwPrGrupXN NameStrn DrawWeekLines PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt N VwPrGrupTN NameStrn DrawDayLinesPrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt N VwPrGrupXN NameStrn DrawHourLines PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt N VwPrGrupXNNameStrn drawVertScale PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt NVwPrGrupXNNameStrnshortLineHeight PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrupTNNameStrnBarColorPrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt NVwPrGrupPNNameStrnDrawBarsPrGpStrnBehaviorPValStrn0 typeStrnBoolean EndGInt NVwPrGrupXNNameStrn DaysForOneBar PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrupXNNameStrnDrawStartEndDatePrGpStrnBehaviorPValStrn0 typeStrnBoolean EndGInt NVwPrGrup`NNameStrnstartEndDateColor PrGpStrnBehaviorPValStrn&h000000typeStrnColor EndGInt NVwPrGrup`NNameStrn scaleFont PrGpStrnBehaviortypeStrnString vbETStrnMultiLineEditor EndGInt NVwPrGrupXNNameStrn yScaleIsTimeB PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt NVwPrGrup\NNameStrnminHorizLineSpacing PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrupTNNameStrn pictureDepthPrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrupXNNameStrn scaleFontSize PrGpStrnBehaviorPValStrn0 typeStrninteger EndGInt NVwPrGrupTNNameStrn FirstWeekDayPrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrupdNNameStrnlowMemoryWarningPrGpStrnBehaviortypeStrnstring vbETStrnMultiLineEditor EndGInt NVwPrGruphNNameStrnunknownErrorWarning PrGpStrnBehaviortypeStrnString vbETStrnMultiLineEditor EndGInt NVwPrGrup`NNameStrnstartEndDateAutoColor PrGpStrnBehaviorPValStrn0 typeStrnBoolean EndGInt NVwPrGrup\NNameStrndrawVertScaleOnTop PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt NVwPrGrupXNNameStrnscaleLineWidth PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NVwPrGrupXN NameStrnscaleLineHeight PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt N VwPrGrup\N!NameStrndrawHorizScaleOnTop PrGpStrnBehaviorPValStrn0 typeStrnboolean EndGInt N!VwPrGrup`N"NameStrn ClippingNamePrGpStrnBehaviortypeStrnString vbETStrnMultiLineEditor EndGInt N"VwPrGrupXN#NameStrndrawNearestPointPrGpStrnBehaviorPValStrn0 typeStrnBoolean EndGInt N#VwPrGrup`N$NameStrnnearestPointMaxDistance PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt N$VwPrGrupTN%NameStrn ClickSound PrGpStrnBehaviorPValStrn0 typeStrnSound EndGInt N%EndGInt MPadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjHNameStrnRectContInt paswStrnbClsInt flagInt bNtrInt CompStrnMethGrupN&nameStrnHeight CompStrnVsblInt sorcGrup4N'EncoInt srclStrnSub Height(h as Integer)srclStrn:'Change the Rect's Height by moving its bottom and leaving srclStrn3'the top fixed. if h < 0, the new height will be 0. srclStrnsrclStrnintBottom = intTop + h srclStrnsrclStrnValidateValues srclStrnsrclStrnEnd Sub EndGInt N'EncoInt AlasStrnflagInt shrdInt parmStrn h as IntegerrsltStrnEndGInt N&MethGrupN(nameStrnWidth CompStrnVsblInt sorcGrup8N)EncoInt srclStrnSub Width(w as Integer) srclStrn='Change the Rect's Width by moving its right side and leaving srclStrn7'the left side fixed. If w < 0 the new width will be 0. srclStrnsrclStrnMe.Right(Left + w) srclStrnsrclStrnValidateValues srclStrnsrclStrnEnd Sub EndGInt N)EncoInt AlasStrnflagInt shrdInt parmStrn w as IntegerrsltStrnEndGInt N(MethGrupN*nameStrnHeight CompStrnVsblInt sorcGrupN+EncoInt srclStrnFunction Height() As IntegersrclStrnA'The current height of the Rect as given by the difference of its srclStrn'bottom and top parameters. srclStrnsrclStrnreturn Bottom - Top srclStrnsrclStrn End FunctionEndGInt N+EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt N*MethGrupN,nameStrnWidth CompStrnVsblInt sorcGrupN-EncoInt srclStrnFunction Width() As integer srclStrnA'The current height of the Rect as given by the difference of its srclStrn'bottom and top parameters. srclStrn'Can be a negative value. srclStrnsrclStrnreturn Right - Left srclStrn End FunctionEndGInt N-EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrninteger EndGInt N,MethGruppN.nameStrn Constructor CompStrnVsblInt sorcGrupN/EncoInt srclStrn]Sub Constructor(myLeft as Integer, myTop as Integer, myHeight as Integer, myWidth as Integer) srclStrn 'Constructor: srclStrn@'Constructs the Rect from the given co-ordinates of its corners.srclStrnsrclStrn Top(myTop) srclStrnMe.Left(myLeft) srclStrnMe.Right(myLeft + myWidth) srclStrnBottom(myTop + myHeight)srclStrnsrclStrnEnd Sub EndGInt N/EncoInt AlasStrnflagInt shrdInt parmStrnLmyLeft as Integer, myTop as Integer, myHeight as Integer, myWidth as IntegerrsltStrnEndGInt N.MethGrupDN0nameStrn Constructor CompStrnVsblInt sorcGrupN1EncoInt srclStrnSub Constructor(obj as Object) srclStrn 'Constructor: srclStrn4'Constructs the Rect from one parameter. This can besrclStrn='. integer: for using predefined modes (not yet implemented). srclStrn%'. string: for using predefined mode. srclStrn '. object: srclStrnA' .RectControl: Rect with the size and shape of the RectControl srclStrnA' at the position of the RectControl in global co-ordniates. srclStrn8' .Point: Zero-size Rect at the location of the Point.srclStrn ' .Rect: Clone the given Rect.srclStrn@' .Window: Rect of the Window's size at the Window's position.srclStrn<' .Screen: Rect with its borders being the borders of the srclStrn' given Screen.srclStrn<' .MemoryBlock: (Warning: This only works for MemoryBlockssrclStrn@' containing a Mac Toolbox style Rect structure). Rect withsrclStrn<' dimensions and location given my a Toolbox style RectsrclStrn' structure. srclStrn8' .SystemClass: Passing the System Object generates a srclStrnB' zero-size Rect at the current position fo the mouse cursor. srclStrnsrclStrnDim rc as RectControl srclStrnDim pt as Point srclStrnDim rt as Rect srclStrnDim wn as WindowsrclStrnDim sc as ScreensrclStrnDim mb as MemoryBlock srclStrnDim i as IntegersrclStrnDim s as String srclStrnsrclStrnsrclStrn'select case VarType(obj) srclStrn'case 2 // Integer srclStrn>'// perhaps define integer constats for predefines modes later srclStrn' srclStrn'case 8 // String srclStrn7'// perhaps introduce additional predefines modes later srclStrn's = objsrclStrn'select case s srclStrn'case "MainScreen" srclStrn'Rect(Screen(0))srclStrn'case "TopWindow" srclStrn'Rect(Window(0))srclStrn 'end select srclStrnsrclStrn'case 13 // Object srclStrnif obj isA RectControl then srclStrnrc = RectControl(obj) srclStrn!Me.Left(rc.Window.Left + rc.Left) srclStrnTop(rc.Window.Top + rc.Top) srclStrnWidth(rc.Width) srclStrnHeight(rc.Height) srclStrnsrclStrnelseif obj isA Point then srclStrnpt = Point(obj) srclStrn Me.Left(pt.x) srclStrnMe.Right(pt.x) srclStrn Top(pt.y) srclStrn Bottom(pt.y)srclStrnsrclStrn"// Workaround for Rects (stupid!): srclStrn2// use extra function from RectPointAssist module. srclStrnelseif obj isA Rect thensrclStrnrt = Object2Rect(obj) srclStrnMe.Left(rt.left)srclStrn Top(rt.top) srclStrnMe.Right(rt.right) srclStrnBottom(rt.bottom) srclStrnsrclStrn// Workaround for Windows: srclStrn// Cycle through all Windows... srclStrnelseif obj isA Window then srclStrnfor i = 0 to WindowCount-1 srclStrnif obj = Window(i) then srclStrnwn = Window(i) srclStrnexitsrclStrnend if srclStrnnextsrclStrnsrclStrnMe.Left(wn.left)srclStrn Top(wn.top) srclStrnWidth(wn.width) srclStrnHeight(wn.height) srclStrnsrclStrn// Workaround for screens: srclStrn-// (Cycling through all Screens doesn't work) srclStrn// always use Screen (0)srclStrnelseif obj isA Screen then srclStrn'for i = 0 to ScreenCount -1srclStrn'if obj = Screen(i) thensrclStrn'sc = Screen(i) srclStrn'exit srclStrn'end if srclStrn'next srclStrnsrclStrnsc = Screen(0) srclStrnMe.Left(sc.left)srclStrn Top(sc.top) srclStrnWidth(sc.width) srclStrnHeight(sc.height) srclStrnsrclStrnelseif obj isA MemoryBlock then srclStrnmb = MemoryBlock(obj) srclStrn*// Tacitly assume it's a TB_Rect structure srclStrnTop(mb.Short(0))srclStrnMe.Left(mb.Short(2))srclStrnBottom(mb.Short(4)) srclStrnMe.Right(mb.Short(6)) srclStrnsrclStrn-' Doesn't seem to work in current RB versions srclStrn!'elseif obj isA System.Class then srclStrn6'// If the System Object is passed, use Mouse position srclStrn'Me.Left(System.MouseX) srclStrn'Top(System.MouseY) srclStrn'Me.Right(left) srclStrn 'Bottom(top)srclStrnsrclStrnend if srclStrnsrclStrn 'end select srclStrnsrclStrnEnd Sub EndGInt N1EncoInt AlasStrnflagInt shrdInt parmStrn obj as Object rsltStrnEndGInt N0MethGrupN2nameStrnTB_Rect CompStrnVsblInt sorcGrupN3EncoInt srclStrn!Function TB_Rect() As MemoryBlock srclStrn1'Return a Macintosh Toolbox style Rect structure srclStrn"'corresponding to the Rect's data. srclStrnsrclStrndim m as MemoryBlocksrclStrnsrclStrnm = NewMemoryBlock(8) srclStrnsrclStrnif m <> nil thensrclStrnm.Short(0) = TopsrclStrnm.Short(2) = Left srclStrnm.Short(4) = Bottom srclStrnm.Short(6) = Right srclStrnend if srclStrnsrclStrnreturn msrclStrnsrclStrn End FunctionEndGInt N3EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrn MemoryBlock EndGInt N2MethGrupN4nameStrnTopLeft CompStrnVsblInt sorcGrupN5EncoInt srclStrnFunction TopLeft() As Point srclStrn1'A Point containing the position of the top left srclStrn'vertex of the Rect.srclStrnsrclStrnreturn (new Point(Left,Top))srclStrnsrclStrn End FunctionEndGInt N5EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnPoint EndGInt N4MethGrupN6nameStrn BottomRight CompStrnVsblInt sorcGrupN7EncoInt srclStrnFunction BottomRight() As Point srclStrn5'A Point containing the position of the bottom right srclStrn'vertex of the Rect.srclStrnsrclStrn return (new Point(Right,Bottom))srclStrnsrclStrn End FunctionEndGInt N7EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnPoint EndGInt N6MethGrupTN8nameStrnClone CompStrnVsblInt sorcGrupN9EncoInt srclStrnFunction Clone() As RectsrclStrn'A copy of the Rect.srclStrnsrclStrn-return (new Rect(Me.TopLeft, Me.BottomRight)) srclStrnsrclStrn End FunctionEndGInt N9EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnRectEndGInt N8MethGrupN:nameStrn Constructor CompStrnVsblInt sorcGrup\N;EncoInt srclStrn)Sub Constructor(TL as Point, BR as Point) srclStrn 'Contructor:srclStrn4'Constructs the Rect from the given TopLeft (TL) andsrclStrn'BottomRight (BR) Points. srclStrnsrclStrn Me.Left(TL.x) srclStrn Top(TL.y) srclStrnMe.Right(BR.x) srclStrn Bottom(BR.y)srclStrnsrclStrnEnd Sub EndGInt N;EncoInt AlasStrnflagInt shrdInt parmStrnTL as Point, BR as PointrsltStrnEndGInt N:MethGrupNnameStrnAreaCompStrnVsblInt sorcGrupN?EncoInt srclStrnFunction Area() As Integer srclStrn/'The Area spanned by the Rect in square pixels. srclStrnsrclStrnreturn Width * Height srclStrnsrclStrn End FunctionEndGInt N?EncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt N>MethGrupN@nameStrn Transpose CompStrnVsblInt sorcGrupNAEncoInt srclStrnSub Transpose() srclStrn#'Swap Height and Width of the Rect. srclStrnsrclStrnDim a as integersrclStrnsrclStrn a = Height srclStrn Height(Width) srclStrnWidth(a)srclStrnsrclStrnEnd Sub EndGInt NAEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt N@MethGrupNBnameStrn Translate CompStrnVsblInt sorcGrupNCEncoInt srclStrn)Sub Translate(X as Integer, Y as Integer) srclStrn#' Move the Rect by the vector (X,Y) srclStrnsrclStrnMe.Left(Left + X) srclStrnMe.Right(Right + X) srclStrn Top(Top + Y)srclStrnBottom(Bottom + Y) srclStrnsrclStrnEnd Sub EndGInt NCEncoInt AlasStrnflagInt shrdInt parmStrnX as Integer, Y as Integer rsltStrnEndGInt NBMethGrupdNDnameStrn Translate CompStrnVsblInt sorcGrupNEEncoInt srclStrnSub Translate(p as Point) srclStrn2'Move the Rect by the vector given by the Point p. srclStrnsrclStrnTranslate(p.X, p.Y) srclStrnsrclStrnEnd Sub EndGInt NEEncoInt AlasStrnflagInt shrdInt parmStrn p as Point rsltStrnEndGInt NDMethGrupNFnameStrnScale CompStrnVsblInt sorcGruphNGEncoInt srclStrn/Sub Scale(Xfactor as Double, Yfactor as Double) srclStrn:'Scale the Rect by the given Factors, leaving its TopLeft srclStrn?'vertex fixed. Absolute Values of Xfactor and Yfactor are used. srclStrnsrclStrn Width(round(Width*abs(Xfactor)))srclStrn#Height(round(Height *abs(Yfactor))) srclStrnsrclStrnEnd Sub EndGInt NGEncoInt AlasStrnflagInt shrdInt parmStrn$Xfactor as Double, Yfactor as DoublersltStrnEndGInt NFMethGrupDNHnameStrnLeftCompStrnVsblInt sorcGrupNIEncoInt srclStrnFunction Left() As Integer srclStrn'The current left of the Rect. srclStrnsrclStrnreturn intLeft srclStrnsrclStrn End FunctionEndGInt NIEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt NHMethGrupNJnameStrnLeftCompStrnVsblInt sorcGrup,NKEncoInt srclStrnSub Left(l as Integer) srclStrn?'Set the Rect's left. In case this gives a negative-width Rect, srclStrnI'the width will be corrected to 0, leaving the top left corner untouched. srclStrnsrclStrn intLeft = l srclStrnValidateValues srclStrnEnd Sub EndGInt NKEncoInt AlasStrnflagInt shrdInt parmStrn l as IntegerrsltStrnEndGInt NJMethGrupNLnameStrnValidateValues CompStrnVsblInt sorcGrup|NMEncoInt srclStrnSub ValidateValues()srclStrn?'Only allow Rectangles with with non-negative height and width. srclStrnD'If necessary, correct Values to get a zero height or width, leavingsrclStrn='the top left Corner untouched. Increment CorrectionCount for srclStrn'each change made. srclStrnsrclStrnif intTop > intBottom then srclStrnintBottom = intTop srclStrn$CorrectionCount = CorrectionCount +1srclStrnend if srclStrnif intLeft > intRight then srclStrnintRight = intLeft srclStrn$CorrectionCount = CorrectionCount +1srclStrnend if srclStrnsrclStrnEnd Sub EndGInt NMEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnEndGInt NLMethGrupNNnameStrnRight CompStrnVsblInt sorcGrup,NOEncoInt srclStrnSub Right(r as Integer) srclStrn@'Set the Rect's right. In case this gives a negative-width Rect,srclStrnI'the width will be corrected to 0, leaving the top left corner untouched. srclStrnsrclStrn intRight = rsrclStrnValidateValues srclStrnEnd Sub EndGInt NOEncoInt AlasStrnflagInt shrdInt parmStrn r as IntegerrsltStrnEndGInt NNMethGrupHNPnameStrnRight CompStrnVsblInt sorcGrupNQEncoInt srclStrnFunction Right() As Integer srclStrn'The current right of the Rect. srclStrnsrclStrnreturn intRight srclStrnsrclStrn End FunctionEndGInt NQEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt NPMethGrupHNRnameStrnBottom CompStrnVsblInt sorcGrupNSEncoInt srclStrnFunction Bottom() As IntegersrclStrn 'The current bottom of the Rect.srclStrnsrclStrnreturn intBottomsrclStrnsrclStrn End FunctionEndGInt NSEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt NRMethGrupNTnameStrnBottom CompStrnVsblInt sorcGrup@NUEncoInt srclStrnSub Bottom(b as Integer)srclStrnB'Set the Rect's bottom. In case this gives a negative-height Rect, srclStrnJ'the height will be corrected to 0, leaving the top left corner untouched. srclStrnsrclStrn intBottom = b srclStrnValidateValues srclStrnsrclStrnEnd Sub EndGInt NUEncoInt AlasStrnflagInt shrdInt parmStrn b as IntegerrsltStrnEndGInt NTMethGrupDNVnameStrnTop CompStrnVsblInt sorcGrupNWEncoInt srclStrnFunction Top() As Integer srclStrn'The current top of the Rect. srclStrnsrclStrn return intTop srclStrnsrclStrn End FunctionEndGInt NWEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnInteger EndGInt NVMethGrupNXnameStrnTop CompStrnVsblInt sorcGrup,NYEncoInt srclStrnSub Top(t as Integer) srclStrn?'Set the Rect's top. In case this gives a negative-height Rect, srclStrnJ'the height will be corrected to 0, leaving the top left corner untouched. srclStrnsrclStrn intTop = t srclStrnValidateValues srclStrnEnd Sub EndGInt NYEncoInt AlasStrnflagInt shrdInt parmStrn t as IntegerrsltStrnEndGInt NXPropGrupNZnameStrnintTop CompStrnVsblInt sorcGrup<N[EncoInt srclStrnintTop As Integer srclStrnEndGInt N[EncoInt declStrnintTop As Integer flagInt shrdInt EndGInt NZPropGrupN\nameStrnintLeft CompStrnVsblInt sorcGrup<N]EncoInt srclStrnintLeft As Integer srclStrnEndGInt N]EncoInt declStrnintLeft As Integer flagInt shrdInt EndGInt N\PropGrupN^nameStrnintRightCompStrnVsblInt sorcGrup<N_EncoInt srclStrnintRight As Integer srclStrnEndGInt N_EncoInt declStrnintRight As Integer flagInt shrdInt EndGInt N^PropGrupN`nameStrn intBottom CompStrnVsblInt sorcGrup<NaEncoInt srclStrnintBottom As IntegersrclStrnEndGInt NaEncoInt declStrnintBottom As IntegerflagInt shrdInt EndGInt N`PropGrupNbnameStrnCorrectionCount CompStrnVsblInt sorcGrupDNcEncoInt srclStrnCorrectionCount As Integer srclStrnEndGInt NcEncoInt declStrnCorrectionCount As Integer flagInt shrdInt EndGInt NbVwBhGrupNdVwPrGrupDNeNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt NeVwPrGrup`NfNameStrnIndex VsblInt PrGpStrnID PValStrn 2147483648 CPifStrnObject EndGInt NfVwPrGrupHNgNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt NgVwPrGrupXNhNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt NhVwPrGrupXNiNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt NiVwPrGrupXNjNameStrnCorrectionCount PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt NjEndGInt NdPadnPadn********************************************************************************************************************************************************************************************BlokpObjNameStrnPoint ContInt paswStrnbClsInt flagInt bNtrInt CompStrnMethGrup<NknameStrn Constructor CompStrnVsblInt sorcGrupNlEncoInt srclStrn/Sub Constructor(myX as Integer, myY as Integer) srclStrnx =myX srclStrny = myY srclStrnEnd Sub EndGInt NlEncoInt AlasStrnflagInt shrdInt parmStrnmyX as Integer, myY as Integer rsltStrnEndGInt NkMethGrupNmnameStrnTB_PointCompStrnVsblInt sorcGrup<NnEncoInt srclStrn"Function TB_Point() As MemoryBlock srclStrndim m as MemoryBlocksrclStrnsrclStrnm = NewMemoryBlock(4) srclStrnsrclStrnif m <> nil thensrclStrnm.Short(0) = y srclStrnm.Short(2) = x srclStrnend if srclStrnsrclStrnreturn msrclStrn End FunctionEndGInt NnEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrn MemoryBlock EndGInt NmMethGrupdNonameStrn Constructor CompStrnVsblInt sorcGrupNpEncoInt srclStrnSub Constructor(obj as Object) srclStrndim p as point srclStrn dim r as Rect srclStrnsrclStrnGif (obj isA RectControl) OR (obj isA Window) OR (obj isA Screen) then srclStrnr = new Rect(obj) srclStrnx = r.Centre.X srclStrny = r.Centre.Y srclStrnelseif obj isA Point then srclStrn6// Workaround because typecasting is not possible here srclStrn"// Requires RectPointAssist Module srclStrnp = Object2Point(obj) srclStrnx = p.X srclStrny = p.Y srclStrnelseif obj isA Rect thensrclStrn r = Rect(obj) srclStrnx = r.Centre.X srclStrny = r.Centre.Y srclStrnend if srclStrnsrclStrnEnd Sub EndGInt NpEncoInt AlasStrnflagInt shrdInt parmStrn obj as Object rsltStrnEndGInt NoMethGrup,NqnameStrnClone CompStrnVsblInt sorcGrupNrEncoInt srclStrnFunction Clone() As Point srclStrnsrclStrnreturn (new Point(Me.X, Me.Y)) srclStrnsrclStrn End FunctionEndGInt NrEncoInt AlasStrnflagInt shrdInt parmStrnrsltStrnPoint EndGInt NqPropGrupNsnameStrnx CompStrnVsblInt sorcGrup4NtEncoInt srclStrn x As IntegersrclStrnEndGInt NtEncoInt declStrn x As IntegerflagInt shrdInt EndGInt NsPropGrupNunameStrny CompStrnVsblInt sorcGrup4NvEncoInt srclStrn y As IntegersrclStrnEndGInt NvEncoInt declStrn y As IntegerflagInt shrdInt EndGInt NuVwBhGrupNwVwPrGrupDNxNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt NxVwPrGrup`NyNameStrnIndex VsblInt PrGpStrnID PValStrn 2147483648 CPifStrnObject EndGInt NyVwPrGrupHNzNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt NzVwPrGrupXN{NameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt N{VwPrGrupXN|NameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt N|VwPrGrupLN}NameStrnx PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt N}VwPrGrupLN~NameStrny PrGpStrnBehaviorPValStrn0 typeStrnInteger EndGInt N~EndGInt NwPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjNameStrnRectPointAssist ContInt paswStrnbClsInt flagInt bNtrInt CompStrnMethGrupNnameStrn Object2Rect CompStrnVsblInt sorcGrupNEncoInt srclStrn+Function Object2Rect(obj as Object) As Rect srclStrnif obj isA Rect thensrclStrnreturn Rect(obj)srclStrnelsesrclStrn return nil srclStrnend if srclStrn End FunctionEndGInt NEncoInt AlasStrnflagInt shrdInt parmStrn obj as Object rsltStrnRectEndGInt NMethGrupNnameStrn Object2PointCompStrnVsblInt sorcGrupNEncoInt srclStrn-Function Object2Point(obj as Object) As Point srclStrnif obj isA Point then srclStrnreturn Point(obj) srclStrnelsesrclStrn return nil srclStrnend if srclStrn End FunctionEndGInt NEncoInt AlasStrnflagInt shrdInt parmStrn obj as Object rsltStrnPoint EndGInt NVwBhGrupNVwPrGrupDNNameStrnNameVsblInt PrGpStrnID CPifStrnObject EndGInt NVwPrGrup`NNameStrnIndex VsblInt PrGpStrnID PValStrn 2147483648 CPifStrnObject EndGInt NVwPrGrupHNNameStrnSuper VsblInt PrGpStrnID CPifStrnObject EndGInt NVwPrGrupXNNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt NVwPrGrupXNNameStrnTop VsblInt PrGpStrnPositionPValStrn0 CPifStrnObject EndGInt NEndGInt NPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpSndL֬7NameStrnclikContInt paswStrnpathStrnMKalle:Users:ssp:Developer:z-old-earthlingsoft:SETI Checker ƒ:Ressourcen:clik ppthStrn@..\Developer\z-old-earthlingsoft\SETI Checker ƒ\Ressourcen\clikalisStrnsKalleH+Lclik5*sfilmovr Ressourcen{LLL11&|uLKalle:Users:ssp:Developer:z-old-earthlingsoft:SETI Checker :Ressourcen:clik clik KalleGUsers/ssp/Developer/z-old-earthlingsoft/SETI Checker ƒ/Ressourcen/clik/ alisStrnsKalleH+Lclik5*sfilmovr Ressourcen{LLL11&|uLKalle:Users:ssp:Developer:z-old-earthlingsoft:SETI Checker :Ressourcen:clik clik KalleGUsers/ssp/Developer/z-old-earthlingsoft/SETI Checker ƒ/Ressourcen/clik/ PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpUIsWnStGrup NOTabGrupNContInt eSptInt $EndGInt NOTabGrup4NContInt R\AltEInt LSptInt EEstInt EndGInt NOTabGrupXNContInt R\LSptInt RSptInt ScrXInt ScrYInt lstHInt @lstVInt @EndGInt NLsLcStrn(Home) rEdtRect2}EndGInt NPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************EOF!