Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

TChart   Найти похожие ветки 

 
Dudee ©   (2005-10-31 21:22) [0]

Подскажите плз, как програмно добавить Series в TChart, чтоб на одних осях отображалось несколько графиков


 
Kolan ©   (2005-10-31 22:06) [1]

Что-то вроде этого:
Chart.AddSeries(FLineSeries);
Где FLineSeries: TLineSeries;

Вообще я для подобных вещей использую такие менеджеры. Тут можно много графиков сделать:

unit KAmplifierMonitorGraphManager;

interface
uses
 Windows, SysUtils, Graphics, Chart, Series, TeEngine, KAmplifierMonitorTypes, Math;
type

 TGraph = class(TObject)
 private
   FLineSeries: TLineSeries;
   FVisible: Boolean;
   FVeiwType: TViewType;
 protected
   function UseViewType(Value: Double): Double;
 public
   constructor Create(Chart: TChart; Color: TColor);
   destructor Destroy; override;
   procedure Clear;
   procedure AddXY(X, Y: Double);
   procedure Redraw;
   property Visible: Boolean read FVisible;
   property ViewType: TViewType read FVeiwType write FVeiwType;
 end;

 TGraphArray = array of TGraph;

 TGraphManager = class(TObject)
 private
   FChart: TChart;
   FGraphs: TGraphArray;
   FCurrentGraphNumber: Integer;
   FColorIndex: Integer;
   function GetGraphCount: Integer;
 protected
   function IsIndexExcists(Index: Integer): Boolean;
   function GetNextColor: TColor;
 public
   constructor Create(Chart: TChart);
   destructor Destroy; override;
   procedure AddGraph;
   procedure DrawArray(GraphMatrix: TDoublePointArray; DrawOnGraph: Integer);
   property GraphCount: Integer read GetGraphCount;
   function SetCurrentGraph(Index: Integer): Boolean;
   procedure SetNextGraph;
   procedure SetPriorGraph;
   procedure RedrawAll;
   //
   procedure DeBugSetRandomValues;
   //
 end;

implementation

{ TGraph }

procedure TGraph.AddXY(X, Y: Double);
begin
 FLineSeries.AddXY(UseViewType(X), UseViewType(Y));
 FVisible := True;
end;

procedure TGraph.Clear;
begin
 FLineSeries.Clear;
 FVisible := False;
end;

constructor TGraph.Create(Chart: TChart; Color: TColor);
begin
 FLineSeries := TLineSeries.Create(Chart);
 FLineSeries.SeriesColor := Color;
 Chart.AddSeries(FLineSeries);
 FVisible := False;
 FVeiwType := vtUsual;
end;

destructor TGraph.Destroy;
begin
 FLineSeries.Free;
 inherited;
end;

procedure TGraph.Redraw;
var
 Temp: TDoublePointArray;
 I: Integer;
begin
 //
 FVeiwType := vtLogarithmic;
 //
 if FVisible = True then
 begin
   SetLength(Temp, FLineSeries.Count);
   for I := 0 to FLineSeries.Count - 1 do
   begin
     Temp[I, 0] := FLineSeries.XValues.Value[I];
     Temp[I, 1] := FLineSeries.YValues.Value[I];
   end;

   FLineSeries.Clear;

   for I := 0 to Length(Temp) - 1 do
   begin
     AddXY(Temp[I, 0], Temp[I, 1]);
   end;
 end;
end;

function TGraph.UseViewType(Value: Double): Double;
begin
 Result := Value;
 try
   case FVeiwType of
     vtUsual: Result := Value;
     vtLogarithmic: Result := Log10(Value);
   end;
 except
 end;
end;

{ TGraphManager }

procedure TGraphManager.AddGraph;
begin
 SetLength(FGraphs, Length(FGraphs) + 1);
 FGraphs[High(FGraphs)] := TGraph.Create(FChart,  GetNextColor);
 if Length(FGraphs) = 1 then
   FCurrentGraphNumber := Low(FGraphs);
end;

constructor TGraphManager.Create(Chart: TChart);
begin
 FChart := Chart;
 FCurrentGraphNumber := -1;
 FColorIndex := 0;
end;

procedure TGraphManager.DeBugSetRandomValues;
var
 M: TDoublePointArray;
 I: Integer;
begin
 Randomize;
 SetLength(M, 3000 - 100);
 for I := Low(M) to High(M) do
 begin
   M[I, 0] := I;
   M[I, 1] := Random(I);
 end;
 DrawArray(M, FCurrentGraphNumber);
end;

destructor TGraphManager.Destroy;
var
 I: Integer;
begin
 for I := Low(FGraphs) to High(FGraphs) do
   FreeAndNil(FGraphs[I]);
 inherited;
end;

procedure TGraphManager.DrawArray(GraphMatrix: TDoublePointArray; DrawOnGraph: Integer);
var
 I: Integer;
begin
 if IsIndexExcists(DrawOnGraph) then
 begin
   FGraphs[DrawOnGraph].Clear;
   //
   FGraphs[DrawOnGraph].FVeiwType := vtUsual;
   //
   for I := Low(GraphMatrix) to High(GraphMatrix) do
     FGraphs[DrawOnGraph].AddXY(GraphMatrix[I, 0],   GraphMatrix[I, 1]);
 end;
end;

function TGraphManager.GetGraphCount: Integer;
begin
 Result := Length(FGraphs);
end;

function TGraphManager.GetNextColor: TColor;
begin
 if FColorIndex >= 15 then
   FColorIndex := 0
 else
   FColorIndex := FColorIndex + 1;

 case FColorIndex of
   0: Result := clOlive;
   1: Result := RGB(255,128,0);
   2: Result := clRed;
   3: Result := clBlue;
   4: Result := clGreen;
   5: Result := clBlack;
   6: Result := clTeal;
   7: Result := clLime;
   8: Result := clGray;
   9: Result := clMaroon;
   10: Result := clYellow;
   11: Result := clNavy;
   12: Result := clFuchsia;
   13: Result := clAqua;
   14: Result := clPurple;
   15: Result := clSkyBlue;
 else
   Result := clRed;
 end;
end;

function TGraphManager.IsIndexExcists(Index: Integer): Boolean;
begin
 Result := False;
 if (Index >= Low(FGraphs)) and (Index <= High(FGraphs)) then
   Result := True;
end;

procedure TGraphManager.RedrawAll;
var
 I: Integer;
begin
 for I := Low(FGraphs) to High(FGraphs) do
   FGraphs[I].Redraw;
end;

function TGraphManager.SetCurrentGraph(Index: Integer): Boolean;
begin
 Result := False;
 if IsIndexExcists(Index) then
 begin
   Result := True;
   FCurrentGraphNumber := Index;
 end;
end;

procedure TGraphManager.SetNextGraph;
begin
 if not SetCurrentGraph(FCurrentGraphNumber + 1) then
   SetCurrentGraph(Low(Fgraphs));
end;

procedure TGraphManager.SetPriorGraph;
begin
 if not SetCurrentGraph(FCurrentGraphNumber - 1) then
   SetCurrentGraph(High(Fgraphs));
end;

end.


 
Dudee ©   (2005-10-31 22:31) [2]

т.е. просто подключить модуль с этим текстом к проекту и использовать его функции? а как моему TChart"у сказать, чтоб использовал функции и методы именно из этого модуля?


 
Dudee ©   (2005-10-31 22:39) [3]

и где взять  KAmplifierMonitorTypes?


 
Dudee ©   (2005-10-31 22:39) [4]

и где взять  KAmplifierMonitorTypes? и определение некоторых типов из этого модуля, которые компилятор Delphi не находит?


 
Kolan ©   (2005-10-31 22:45) [5]

Да это для примера,хотя работает.


unit KAmplifierMonitorTypes;
interface
type

 TDoublePoint = array[0..1] of Double;
 TDoublePointArray = array of TDoublePoint;
 TViewType =
 (
   vtUsual,
   vtLogarithmic
 );
implementation

end.


Ты разбери пример, вопросы задай....


 
Kolan ©   (2005-10-31 22:48) [6]

т.е. просто подключить модуль с этим текстом к проекту и использовать его функции? а как моему TChart"у сказать, чтоб использовал функции и методы именно из этого модуля?

Нет тут другая идея. Ту смысл в том что менеджер получает указатель на Chart
constructor Create(Chart: TChart; Color: TColor);

А дальше всё только через менеджера. Стереть, нарисовать, добавить график итд. В этом модуле многого нет...


 
Dudee ©   (2005-11-01 16:36) [7]

а где взять полную версию, чтоб можно было нарисовать полноценные графики?


 
Kolan ©   (2005-11-01 21:51) [8]

Сам сделай. Ты их разабра(примеры).
Лови пример на мыло.



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.067 c
2-1130939495
kyn66
2005-11-02 16:51
2005.11.20
Контроль копирование файла с сайта на диск.


2-1130616943
Леха
2005-10-30 00:15
2005.11.20
Модуль Consts


2-1130849562
BFG9k
2005-11-01 15:52
2005.11.20
Закрытие программы в OnCreate


14-1130804324
Таблоид
2005-11-01 03:18
2005.11.20
Какие есть интересные англоязычные сайты по Delphi ?


1-1130308524
AngelOfDeath
2005-10-26 10:35
2005.11.20
Усовершенствование drag&amp;drop