Форум: "Начинающим";
Текущий архив: 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"у сказать, чтоб использовал функции и методы именно из этого модуля?
Нет тут другая идея. Ту смысл в том что менеджер получает указатель на Chartconstructor 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