Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-96408
FreeSide
2003-09-11 11:28
2003.09.29
Как программу на delphi сделать встраиваемой в Word?


1-96218
Yozch1
2003-09-16 22:59
2003.09.29
Как определить возможность работы с WebBrowser


14-96342
Mr@MsGuns
2003-09-09 20:10
2003.09.29
You ll never walk alone!


8-96307
a72
2003-06-02 14:41
2003.09.29
Компоненты для векторной графики


6-96335
IBSN
2003-08-01 11:05
2003.09.29
ClientSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский