Главная страница
    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
14-1130300029
SPeller
2005-10-26 08:13
2005.11.20
Подскажите браузер


2-1130968376
Duralei
2005-11-03 00:52
2005.11.20
прозрачное текстовое поле


14-1130311611
Sandman29
2005-10-26 11:26
2005.11.20
О возможности повторения в России сингапурского чуда


1-1130427029
rsy
2005-10-27 19:30
2005.11.20
Подсветка текста


2-1130622911
Takezhan
2005-10-30 01:55
2005.11.20
Отправка почты формата html





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