📄 jvchart.pas
字号:
destructor TJvChartOptions.Destroy;
begin
FreeAndNil(FPrimaryYAxis); //memory leak fix SEPT 21, 2004.WAP.
FreeAndNil(FSecondaryYAxis); //memory leak fix SEPT 21, 2004. WAP.
FreeAndNil(FXLegends);
FreeAndNil(FPenLegends);
FreeAndNil(FPenUnit);
FreeAndNil(FHeaderFont);
FreeAndNil(FLegendFont);
FreeAndNil(FAxisFont);
inherited Destroy;
end;
procedure TJvChartOptions.NotifyOptionsChange;
begin
if Assigned(FOwner) then
FOwner.NotifyOptionsChange;
end;
// Each pen can be associated with either the primary or secondary axis,
// this function decides which axis to return depending on the pen configuration:
function TJvChartOptions.GetPenAxis(Index: Integer): TJvChartYAxisOptions;
begin
if (Index < 0) or (Index >= Length(FPenSecondaryAxisFlag)) then
Result := FPrimaryYAxis // default
else
if FPenSecondaryAxisFlag[Index] then
Result := FSecondaryYAxis // alternate!
else
Result := FPrimaryYAxis; // default
end;
procedure TJvChartOptions.SetChartKind(AKind: TJvChartKind);
begin
if AKind <> FChartKind then
FChartKind := AKind;
end;
function TJvChartOptions.GetPenMarkerKind(Index: Integer): TJvChartPenMarkerKind;
begin
if (Index >= 0) and (Index < Length(FPenMarkerKind)) then
Result := FPenMarkerKind[Index]
else
Result := pmkNone;
end;
procedure TJvChartOptions.SetPenMarkerKind(Index: Integer; AMarkKind: TJvChartPenMarkerKind);
begin
if Index >= 0 then
begin
if Index >= Length(FPenMarkerKind) then
SetLength(FPenMarkerKind, Index + 1);
FPenMarkerKind[Index] := AMarkKind;
end;
end;
function TJvChartOptions.GetPenColor(Index: Integer): TColor;
begin
// Don't check for out of range values, since we use that on purpose in this
// function. Okay, ugly, but it works. -WP.
case Index of
jvChartAverageLineColorIndex:
Result := FAverageLineColor;
jvChartDivisionLineColorIndex: // horizontal and vertical division line color
Result := FDivisionLineColor;
jvChartShadowColorIndex: // legend shadow (light gray)
Result := FShadowColor;
jvChartAxisColorIndex:
Result := FAxisLineColor; // get property.
jvChartHintColorIndex:
Result := FHintColor; // Get property.
jvChartPaperColorIndex:
Result := FPaperColor; // Get property.
else
if Index < jvChartAverageLineColorIndex then
Result := clBtnFace
else
if Index >= 0 then
Result := FPenColors[Index]
else
Result := clNone; // I hope clNone is a good unknown value (ahuser). {{Good enough. -WP.}}
end;
end;
procedure TJvChartOptions.SetPenColor(Index: Integer; AColor: TColor);
begin
if (Index < 0) or (Index >= MAX_PEN) then
raise ERangeError.CreateRes(@RsEChartOptionsPenCountPenCountOutOf);
if Index >= Length(FPenColors) then
SetLength(FPenColors, Index + 1);
FPenColors[Index] := AColor;
end;
procedure TJvChartOptions.SetPenStyle(Index: Integer; APenStyle: TPenStyle);
begin
if (Index < 0) or (Index >= MAX_PEN) then
raise ERangeError.CreateRes(@RsEChartOptionsPenCountPenCountOutOf);
if Index >= Length(FPenStyles) then
SetLength(FPenStyles, Index + 1);
FPenStyles[Index] := APenStyle;
end;
function TJvChartOptions.GetPenStyle(Index: Integer): TPenStyle;
begin
if (Index >= 0) and (Index < Length(FPenStyles)) then
Result := FPenStyles[Index]
else
Result := psSolid;
end;
function TJvChartOptions.GetAverageValue(Index: Integer): Double;
begin
if Index < 0 then
raise ERangeError.CreateRes(@RsEGetAverageValueIndexNegative);
if Index >= Length(FAverageValue) then
Result := 0.0
else
Result := FAverageValue[Index];
end;
procedure TJvChartOptions.SetAverageValue(Index: Integer; AValue: Double);
begin
if Index < 0 then
raise ERangeError.CreateRes(@RsESetAverageValueIndexNegative);
if Index >= Length(FAverageValue) then
SetLength(FAverageValue, Index + 1);
FAverageValue[Index] := AValue;
end;
function TJvChartOptions.GetPenSecondaryAxisFlag(Index: Integer): Boolean;
begin
if (Index < 0) or (Index >= Length(FPenSecondaryAxisFlag)) then
Result := False
else
Result := FPenSecondaryAxisFlag[Index];
end;
procedure TJvChartOptions.SetPenSecondaryAxisFlag(Index: Integer; NewValue: Boolean);
begin
if (Index < 0) or (Index >= MAX_PEN) then
raise ERangeError.CreateRes(@RsEChartOptionsPenCountPenCountOutOf);
if Index >= Length(FPenSecondaryAxisFlag) then
SetLength(FPenSecondaryAxisFlag, Index + 1);
FPenSecondaryAxisFlag[Index] := NewValue;
end;
function TJvChartOptions.GetPenValueLabels(Index: Integer): Boolean;
begin
if (Index < 0) or (Index >= Length(FPenValueLabels)) then
Result := False
else
Result := FPenValueLabels[Index];
end;
procedure TJvChartOptions.SetPenValueLabels(Index: Integer; NewValue: Boolean);
begin
if (Index < 0) or (Index >= MAX_PEN) then
raise ERangeError.CreateRes(@RsEChartOptionsPenCountPenCountOutOf);
if Index >= Length(FPenValueLabels) then
SetLength(FPenValueLabels, Index + 1);
FPenValueLabels[Index] := NewValue;
end;
procedure TJvChartOptions.SetPenCount(Count: Integer);
begin
if (Count < 0) or (Count >= MAX_PEN) then
raise ERangeError.CreateRes(@RsEChartOptionsPenCountPenCountOutOf);
FPenCount := Count;
SetLength(FPenSecondaryAxisFlag, FPenCount + 1);
end;
function TJvChartOptions.GetPenLegends: TStrings;
begin
Result := FPenLegends as TStrings;
end;
procedure TJvChartOptions.SetPenLegends(Value: TStrings);
begin
FPenLegends.Assign(Value);
end;
function TJvChartOptions.GetPenUnit: TStrings;
begin
Result := FPenUnit as TStrings;
end;
procedure TJvChartOptions.SetPenUnit(Value: TStrings);
begin
FPenUnit.Assign(Value);
end;
function TJvChartOptions.GetXLegends: TStrings;
begin
Result := FXLegends as TStrings;
end;
procedure TJvChartOptions.SetXLegends(Value: TStrings);
begin
FXLegends.Assign(Value);
end;
procedure TJvChartOptions.SetHeaderFont(AFont: TFont);
begin
FHeaderFont.Assign(AFont);
end;
procedure TJvChartOptions.SetLegendFont(AFont: TFont);
begin
FLegendFont.Assign(AFont);
end;
procedure TJvChartOptions.SetAxisFont(AFont: TFont);
begin
FAxisFont.Assign(AFont);
end;
procedure TJvChartOptions.SetPrimaryYAxis(AssignFrom: TJvChartYAxisOptions);
begin
FPrimaryYAxis.Assign(AssignFrom);
end;
procedure TJvChartOptions.SetSecondaryYAxis(AssignFrom: TJvChartYAxisOptions);
begin
FSecondaryYAxis.Assign(AssignFrom);
end;
procedure TJvChartOptions.SetPaperColor(AColor: TColor);
begin
if AColor <> FPaperColor then
begin
FPaperColor := AColor;
if Assigned(FOwner) then
FOwner.Invalidate;
end;
end;
procedure TJvChartOptions.SetXStartOffset(Offset: Integer);
begin
//if not PrintInSession then
// if (Offset < 10) or (Offset > (FOwner.Width div 2)) then
// raise ERangeError.CreateRes(@RsEChartOptionsXStartOffsetValueOutO);
FXStartOffset := Offset;
end;
//=== { TJvChart } ===========================================================
{ GRAPH }
{**************************************************************************}
{ call this function : NEVER! }
{**************************************************************************}
constructor TJvChart.Create(AOwner: TComponent);
begin
inherited Create(AOwner); {by TImage...}
ControlStyle := ControlStyle + [csOpaque];
// XXX FLICKER REDUCTION: Set ControlStyle properly. -WP. APRIL 2004.
FPicture := TPicture.Create;
FCursorPosition := -1; // Invisible until CursorPosition is set >=0 to make it visible.
FMouseDownHintStrs := TStringList.Create;
{ logical font used for rotating text to show vertical labels }
FData := TJvChartData.Create;
FAverageData := TJvChartData.Create;
FFloatingMarker := TObjectList.Create; // NEW: collection of TJvChartFloatingMarker objects.
FFloatingMarker.OwnsObjects := True;
FOptions := TJvChartOptions.Create(Self);
CalcYEnd;
PrintInSession := False;
FOldYGap := 1;
FOldYOrigin := 0;
FStartDrag := False;
FMouseLegend := False;
FContainsNegative := False;
FMouseValue := 0;
FMousePen := 0;
{Set default values for component fields...}
if csDesigning in ComponentState then
begin
// default height and width
if not Assigned(Parent) then
begin
Width := 300;
Height := 300;
end;
end;
end;
{**************************************************************************}
{ call this function : NEVER! }
{**************************************************************************}
destructor TJvChart.Destroy;
begin
{Add code for destroying my own data...here}
FBitmap.Free;
{$IFDEF VCL}
if Ord(FYFontHandle) <> 0 then
DeleteObject(FYFontHandle); // vertical font object
{$ENDIF VCL}
FreeAndNil(FYFont);
FreeAndNil(FPicture);
FreeAndNil(FAverageData);
FreeAndNil(FOptions);
FreeAndNil(FData);
FreeAndNil(FFloatingMarker); // Destroy collection of TJvChartFloatingMarker objects. Destroys contained objects also.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -