Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.049 c
2-1130767781
stud
2005-10-31 17:09
2005.11.20
получить код ошибки


2-1130604971
Alex7
2005-10-29 20:56
2005.11.20
свойство "Parent"


1-1130422795
френк
2005-10-27 18:19
2005.11.20
Как отловить закрытие TPopupMenu?


2-1130392505
Zaletchik
2005-10-27 09:55
2005.11.20
Изменение позиции в файле поБИТно


2-1130502856
Oxid Burn
2005-10-28 16:34
2005.11.20
Timer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский