bravesoftdz / gwchart Goto Github PK
View Code? Open in Web Editor NEWThis project forked from richardwinston/gwchart
source code for GWChart
This project forked from richardwinston/gwchart
source code for GWChart
Compiling GW_Chart requires making some changes to the source code of the TChart (version 6.01) component from Steema Software (http://www.steema.com). The required changes are as follows. In the interface section of TeEngine.pas add a new type after the declaration of TSeriesClick. The new type is as follows. TOnDrawAxisLabel = procedure( Sender: TChartAxis; X, Y, Z: integer; AxisLabel: string; var DrawLabel: boolean) of object; In the interface section of TeEngine.pas in the private section of TCustomAxisPanel add the following. FOnDrawAxisLabel: TOnDrawAxisLabel; In the interface section of TeEngine.pas in the protected section of TCustomAxisPanel add the following. property OnDrawAxisLabel: TOnDrawAxisLabel read FOnDrawAxisLabel write FOnDrawAxisLabel; In the implementation section of TeEngine.pas in the implementation of procedure TChartAxis.DrawAxisLabel add the following new local variable at the end of the list of local variables. DrawLabel: boolean; In the implementation section of TeEngine.pas in the implementation of procedure TChartAxis.DrawAxisLabel after the line "y:=y+Delta" replace if FLabelsExponent then DrawExponentLabel else ParentChart.Canvas.TextOut3D(X,Y,tmpZ,tmpSt2); with DrawLabel := True; if Assigned(ParentChart.OnDrawAxisLabel) then begin ParentChart.OnDrawAxisLabel( self, X, Y, tmpZ, tmpSt2, DrawLabel); end; if DrawLabel then begin if FLabelsExponent then DrawExponentLabel else ParentChart.Canvas.TextOut3D(X,Y,tmpZ,tmpSt2); end In the implementation section of TeEngine.pas in the implementation of procedure TChartAxis.DrawAxisLabel after the line "if (Angle=90) or (Angle=270) then x:=x+Delta;" replace ParentChart.Canvas.RotateLabel3D(X,Y,tmpZ,tmpSt2,Angle); with DrawLabel := True; if Assigned(ParentChart.OnDrawAxisLabel) then begin ParentChart.OnDrawAxisLabel( self, X, Y, tmpZ, tmpSt2, DrawLabel); end; if DrawLabel then begin ParentChart.Canvas.RotateLabel3D(X,Y,tmpZ,tmpSt2,Angle); end In the implementation section of TeEngine.pas change the body of Function TChartValueLists.Get from result:=List^[Index]; to if Index < 0 then begin result := nil; end else begin result:=List^[Index]; end; In the interface section of Chart.pas add the following to the published section of TChart. property OnDrawAxisLabel; In the implementation section of TeEngine.pas in the implementation of procedure TSeriesPointer.PrepareCanvas in the next to the last line replace ACanvas.AssignBrushColor(Brush,tmp,ColorValue); with ACanvas.AssignBrushColor(Brush,ColorValue,tmp); In TeeEditCha.pas change all instances of '.hlp' to '.chm'. In TEngine.pas, in TSeriesPointer.DrawPointer, the code for drawing a cirle should be changed from EllipseWithZ(PXMinus,PYMinus,PXPlus,PYPlus,GetStartZ) to EllipseWithZ(PXMinus,PYMinus,PXPlus,PYPlus,GetMiddleZ) In TEngine.pas, in TSeriesPointer.DrawPointer, the following lines in DrawDiagonalCross should be changed: from LineWithZ(PXMinus, PYMinus, PXPlus+1,PYPlus+1,GetStartZ); LineWithZ(PXPlus, PYMinus, PXMinus-1,PYPlus+1,GetStartZ); to LineWithZ(PXMinus, PYMinus, PXPlus+1,PYPlus+1,GetMiddleZ); LineWithZ(PXPlus, PYMinus, PXMinus-1,PYPlus+1,GetMiddleZ); In TEngine.pas, in TSeriesPointer.DrawPointer, the following lines in DrawCross should be changed: from VertLine3D(PX,PYMinus,PYPlus+1,GetStartZ); HorizLine3D(PXMinus,PXPlus+1,PY,GetStartZ); to VertLine3D(PX,PYMinus,PYPlus+1,GetMiddleZ); HorizLine3D(PXMinus,PXPlus+1,PY,GetMiddleZ); In BubbleCh.pas, in the implementation of TBubbleSeries.DrawLegendShape, change the implementation to var tmp : Integer; // rbw begin change AChart: TCustomChart; LocalRect: TRect; // rbw end change begin LocalRect := Rect; With Rect do tmp:=Math.Min((Right-Left),(Bottom-Top)); // rbw begin change tmp := tmp div 3; Dec(LocalRect.Top, tmp); Dec(LocalRect.Bottom, tmp); if Assigned(ParentChart) and (ParentChart is TCustomChart) then begin AChart := TCustomChart(ParentChart); if Assigned(AChart.OnGetSymbolSize) then begin AChart.OnGetSymbolSize(AChart, ValueIndex, tmp); end; end; // rbw end change With TPointerAccess(Pointer) do begin ChangeHorizSize(tmp); ChangeVertSize(tmp); end; // rbw begin change // inherited; inherited DrawLegendShape(ValueIndex, LocalRect); // rbw end change end; In Chart.pas, add TChartGetSymbolSizeEvent = procedure (Sender: TCustomChart; const ValueIndex: integer; var SymbolSize: integer) of object; after TChartAllowScrollEvent=Procedure( Sender:TChartAxis; Var AMin,AMax:Double; Var AllowScroll:Boolean ) of object; In Chart.pas, in the declaration of TCustomChart, add a new private field FOnGetSymbolSize : TChartGetSymbolSizeEvent; and a new public property property OnGetSymbolSize:TChartGetSymbolSizeEvent read FOnGetSymbolSize write FOnGetSymbolSize; In Chart.pas in the declaration of TChart add a new published properties property OnDrawAxisLabel; property OnGetSymbolSize; In Chart.pas, Change the implmentation of TCustomChartLegend.CalcItemHeight to // rbw begin change var LocalChart: TCustomChart; SymbolSize: integer; ValueIndex: integer; ASeries: TChartSeries; tmp: integer; Changed: boolean; // rbw end change begin result:=ParentChart.Canvas.FontHeight; if HasCheckBoxes then result:=Math.Max(6+TeeCheckBoxSize,result); // rbw begin change if ParentChart is TCustomChart then begin LocalChart := TCustomChart(ParentChart); if Assigned(LocalChart.OnGetSymbolSize) then begin ASeries := GetLegendSeries; SymbolSize := (result-4) div 3; tmp := SymbolSize; Changed := False; for ValueIndex := 0 to ASeries.Count do begin LocalChart.OnGetSymbolSize(LocalChart, ValueIndex, tmp); if tmp > SymbolSize then begin SymbolSize := tmp; Changed := True; end; end; if Changed then begin result := SymbolSize*3; end; end; end; // rbw end change Inc(result,FVertSpacing); if Vertical and DividingLines.Visible then { 5.02 } Inc(result,DividingLines.Width); end; In TEngine.pas, in TSeriesPointer.DrawPointer, in DrawDiagonalCross, change LineWithZ(PXMinus, PYMinus, PXPlus+1,PYPlus+1,GetStartZ); LineWithZ(PXPlus, PYMinus, PXMinus-1,PYPlus+1,GetStartZ); to LineWithZ(PXMinus, PYMinus, PXPlus+1,PYPlus+1,GetMiddleZ); LineWithZ(PXPlus, PYMinus, PXMinus-1,PYPlus+1,GetMiddleZ); In TEngine.pas, in TSeriesPointer.DrawPointer, in DrawCross, change VertLine3D(PX,PYMinus,PYPlus+1,GetStartZ); HorizLine3D(PXMinus,PXPlus+1,PY,GetStartZ); to VertLine3D(PX,PYMinus,PYPlus+1,GetMiddleZ); HorizLine3D(PXMinus,PXPlus+1,PY,GetMiddleZ); In TEngine.pas, in TSeriesPointer.DrawPointer, change psCircle: if Is3D then if Self.FDraw3D and SupportsFullRotation then Sphere(PX,PY,GetMiddleZ,tmpHoriz) else EllipseWithZ(PXMinus,PYMinus,PXPlus,PYPlus,GetStartZ) else Ellipse(PXMinus,PYMinus,PXPlus,PYPlus); to psCircle: if Is3D then if Self.FDraw3D and SupportsFullRotation then Sphere(PX,PY,GetMiddleZ,tmpHoriz) else // RBW begin change // EllipseWithZ(PXMinus,PYMinus,PXPlus,PYPlus,GetStartZ) EllipseWithZ(PXMinus,PYMinus,PXPlus,PYPlus,GetMiddleZ) // RBW end change else Ellipse(PXMinus,PYMinus,PXPlus,PYPlus);
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.