Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
ВнизВопрос о TChart Sereis (или точнее о создани своего типа графико) Найти похожие ветки
← →
DrWeb (2003-09-11 15:41) [0]Доброго времени суток господа,
У меня к Вам такой вопрос: Пробовал ли кто ни-ть добавлять в стандартный TChart свои Series (тоесть создать свой вид графика)? Как это лучше всего сделать?
Я так понимаю что нужно создавать наследника от TChartSeries, но как это сделать лучше- не пойму :(.
Может есть у кого-то примерчик?
← →
DrWeb (2003-09-11 18:03) [1]никто не игрался с чартами?? :(
← →
DrWeb (2003-09-12 00:16) [2]Ладно, поставим вопрос другим образом:
У кого есть документация к TChart или кто знает, где ее можна скачать?
Вопрос жизни и смерти....
← →
Петр (2003-09-12 07:43) [3]Напиши мне свой е-mail, я тебе доки скину...
← →
DrWeb (2003-09-12 09:13) [4]Sergiy <at> tgaz.te.ua
← →
DrWeb (2003-09-14 14:34) [5]У меня такая проблема:
нашел в нете вот такой модуль:
unit CandleSeries;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
TeEngine, TeCanvas, Series;
type
TCandleSeries = class( TCustomSeries )
protected
FOpenValues: TChartValueList;
FHighValues: TChartValueList;
FLowValues: TChartValueList;
FCloseValues: TChartValueList;
FAscendingBrush, FDescendingBrush: TBrush;
FLinePen, FRectPen: TPen;
FCandleWidth: Double;
FPeriod: TDateTime;
procedure DrawValue( ValueIndex: integer ); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AddCandle( Time: TDateTime; O,H,L,C: Double );
procedure Clear; override;
published
property OpenValues: TChartValueList
read FOpenValues write FOpenValues;
property HighValues: TChartValueList
read FHighValues write FHighValues;
property LowValues: TChartValueList
read FLowValues write FLowValues;
property CloseValues: TChartValueList
read FCloseValues write FCloseValues;
property AscendingBrush: TBrush
read FAscendingBrush write FAscendingBrush;
property DescendingBrush: TBrush
read FDescendingBrush write FDescendingBrush;
property LinePen: TPen
read FLinePen write FLinePen;
property RectPen: TPen
read FRectPen write FRectPen;
property CandleWidth: Double // in %
read FCandleWidth write FCandleWidth;
property Period: TDateTime
read FPeriod write FPeriod;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Samples", [TCandleSeries]);
end;
{ TCandleSeries }
procedure TCandleSeries.AddCandle(Time: TDateTime; O, H, L, C: Double);
var
i: integer;
begin
i := XValues.AddChartValue( Time );
FOpenValues.AddChartValue( O );
FHighValues.AddChartValue( H );
FLowValues.AddChartValue( L );
FCloseValues.AddChartValue( C );
NotifyNewValue(Self, i);
end;
procedure TCandleSeries.Clear;
begin
FOpenValues.ClearList;
FHighValues.ClearList;
FLowValues.ClearList;
FCloseValues.ClearList;
XValues.ClearList;
inherited Clear;
end;
constructor TCandleSeries.Create(AOwner: TComponent);
begin
inherited Create( AOwner );
FOpenValues := TChartValueList.Create(Self, "Open");
FHighValues := TChartValueList.Create(Self, "High");
FLowValues := TChartValueList.Create(Self, "Low");
FCloseValues := TChartValueList.Create(Self, "Close");
FAscendingBrush := TBrush.Create;
FAscendingBrush.Color := clRed;
FDescendingBrush := TBrush.Create;
FDescendingBrush.Color := clBlue;
FLinePen := TPen.Create;
FRectPen := TPen.Create;
FCandleWidth := 100;
FPeriod := 1;
end;
destructor TCandleSeries.Destroy;
begin
FLinePen.Free;
FRectPen.Free;
FAscendingBrush.Free;
FDescendingBrush.Free;
inherited Destroy;
end;
procedure TCandleSeries.DrawValue(ValueIndex: integer);
var
Canvas: TCanvas3D;
X0,Y0,X1,Y1,W: integer;
HAxis,VAxis: TChartAxis;
Width: Extended;
begin
if FOpenValues.Count <= ValueIndex then Exit;
Canvas := ParentChart.Canvas;
with Canvas do begin
if HorizAxis = aTopAxis then
HAxis := ParentChart.TopAxis
else
HAxis := ParentChart.BottomAxis;
if VertAxis = aLeftAxis then
VAxis := ParentChart.LeftAxis
else
VAxis := ParentChart.RightAxis;
// High Low Line
Pen.Assign( FLinePen );
X0 := HAxis.CalcPosValue( XValues[ValueIndex] );
Y0 := VAxis.CalcPosValue( FLowValues[ValueIndex] );
Y1 := VAxis.CalcPosValue( FHighValues[ValueIndex] );
MoveTo( X0, Y1 );
LineTo( X0, Y0 );
// Candle Body
Pen.Assign( FRectPen );
Width := FPeriod * FCandleWidth / 100;
W := HAxis.CalcSizeValue( Width );
X0 := X0 - W div 2;
X1 := X0 + W;
Y0 := VAxis.CalcPosValue( FOpenValues[ValueIndex] );
Y1 := VAxis.CalcPosValue( FCloseValues[ValueIndex] );
if Y0 > Y1 then begin
Brush.Assign( FAscendingBrush );
Rectangle( X0, Y1, X1, Y0 );
end else begin
Brush.Assign( FDescendingBrush );
Rectangle( X0, Y0, X1, Y1 );
end;
end;
end;
end.
только вот не компилится он:
ругается на строчки
i := XValues.AddChartValue( Time );
FOpenValues.AddChartValue( O );
FHighValues.AddChartValue( H );
FLowValues.AddChartValue( L );
FCloseValues.AddChartValue( C );
и
FOpenValues.ClearList;
FHighValues.ClearList;
FLowValues.ClearList;
FCloseValues.ClearList;
XValues.ClearList;
в хелпе Delphi
нету описания методов AddChartValue и ClearList
хотя при поиске в dcu такие строчки встречаются...
Господа, что мне делать??
очень нужно
может кто подскажет?
← →
DrWeb (2003-09-15 00:13) [6]Что-то никто не откликается :( Может господин Зотов мне сможет помочь?
← →
DrWeb (2003-09-15 09:51) [7]никто так и не откликнулся :(
← →
DrWeb (2003-09-17 16:51) [8]мож кому пригодится:
выкрутился вот так:
unit CandleSeries;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
TeEngine, TeCanvas, Series;
type
TMySeries=class(TChartValueList)
end;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// уловка ;)
TCandleSeries = class( TCustomSeries )
protected
FOpenValues: TChartValueList;
FHighValues: TChartValueList;
FLowValues: TChartValueList;
FCloseValues: TChartValueList;
FAscendingBrush, FDescendingBrush: TBrush;
FLinePen, FRectPen: TPen;
FCandleWidth: Double;
FPeriod: TDateTime;
procedure DrawValue( ValueIndex: integer ); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AddCandle( Time: TDateTime; O,H,L,C: Double );
procedure Clear; override;
published
property OpenValues: TChartValueList
read FOpenValues write FOpenValues;
property HighValues: TChartValueList
read FHighValues write FHighValues;
property LowValues: TChartValueList
read FLowValues write FLowValues;
property CloseValues: TChartValueList
read FCloseValues write FCloseValues;
property AscendingBrush: TBrush
read FAscendingBrush write FAscendingBrush;
property DescendingBrush: TBrush
read FDescendingBrush write FDescendingBrush;
property LinePen: TPen
read FLinePen write FLinePen;
property RectPen: TPen
read FRectPen write FRectPen;
property CandleWidth: Double // in %
read FCandleWidth write FCandleWidth;
property Period: TDateTime
read FPeriod write FPeriod;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Samples", [TCandleSeries]);
end;
{ TCandleSeries }
procedure TCandleSeries.AddCandle(Time: TDateTime; O, H, L, C: Double);
var
i: integer;
begin
i := TMySeries(XValues).AddChartValue( Time );
// ^^^^^^^^^^^^^^^^^^
// только такая хитрость позволяет использовать AddChartValue
TMySeries(FOpenValues).AddChartValue( O );
//^^^^^^^^^^^^^^^^^^
TMySeries(FHighValues).AddChartValue( H );
//^^^^^^^^^^^^^^^^^^
TMySeries(FLowValues).AddChartValue( L );
//^^^^^^^^^^^^^^^^^^
TMySeries(FCloseValues).AddChartValue( C );
//^^^^^^^^^^^^^^^^^^
NotifyNewValue(Self, i);
end;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
procedure TCandleSeries.Clear;
begin
{ FOpenValues.ClearList;
FHighValues.ClearList;
FLowValues.ClearList;
FCloseValues.ClearList;
XValues.ClearList; }
// а метода ClearList у нас нету
// у кого есть предложения?
inherited Clear;
end;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
constructor TCandleSeries.Create(AOwner: TComponent);
begin
inherited Create( AOwner );
FOpenValues := TChartValueList.Create(Self, "Open");
FHighValues := TChartValueList.Create(Self, "High");
FLowValues := TChartValueList.Create(Self, "Low");
FCloseValues := TChartValueList.Create(Self, "Close");
FAscendingBrush := TBrush.Create;
FAscendingBrush.Color := clRed;
FDescendingBrush := TBrush.Create;
FDescendingBrush.Color := clBlue;
FLinePen := TPen.Create;
FRectPen := TPen.Create;
FCandleWidth := 100;
FPeriod := 1;
end;
destructor TCandleSeries.Destroy;
begin
FLinePen.Free;
FRectPen.Free;
FAscendingBrush.Free;
FDescendingBrush.Free;
inherited Destroy;
end;
procedure TCandleSeries.DrawValue(ValueIndex: integer);
var
Canvas: TCanvas3D;
X0,Y0,X1,Y1,W: integer;
HAxis,VAxis: TChartAxis;
Width: Extended;
begin
if FOpenValues.Count <= ValueIndex then Exit;
Canvas := ParentChart.Canvas;
with Canvas do begin
if HorizAxis = aTopAxis then
HAxis := ParentChart.TopAxis
else
HAxis := ParentChart.BottomAxis;
if VertAxis = aLeftAxis then
VAxis := ParentChart.LeftAxis
else
VAxis := ParentChart.RightAxis;
// High Low Line
Pen.Assign( FLinePen );
X0 := HAxis.CalcPosValue( XValues[ValueIndex] );
Y0 := VAxis.CalcPosValue( FLowValues[ValueIndex] );
Y1 := VAxis.CalcPosValue( FHighValues[ValueIndex] );
MoveTo( X0, Y1 );
LineTo( X0, Y0 );
// Candle Body
Pen.Assign( FRectPen );
Width := FPeriod * FCandleWidth / 100;
W := HAxis.CalcSizeValue( Width );
X0 := X0 - W div 2;
X1 := X0 + W;
Y0 := VAxis.CalcPosValue( FOpenValues[ValueIndex] );
Y1 := VAxis.CalcPosValue( FCloseValues[ValueIndex] );
if Y0 > Y1 then begin
Brush.Assign( FAscendingBrush );
Rectangle( X0, Y1, X1, Y0 );
end else begin
Brush.Assign( FDescendingBrush );
Rectangle( X0, Y0, X1, Y1 );
end;
end;
end;
end.
Ну, как, Есть у кого-либо любые соображения по поводу всего этого?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c