Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Вниз

График. 


dimonf   (2002-01-15 14:40) [0]

Народ, какой компанент мне лудьше использовать, чтобы выводить график? Мне его нужно маштабировать и просматривать с помощю ScrolBar-ов. Как мне это сделать? Пробовал Chart, но ничего не получилось. :(



MBo   (2002-01-15 14:44) [1]

что именно не получилось?
его и без скроллбаров можно прокручивать и масштабировать



Digitman   (2002-01-15 15:25) [2]

TChart прекрасно масштабирует изображение. Внимательно читай описание к его методам



dimonf   (2002-01-15 15:51) [3]

Вот что я делал:

procedure TMDIChild.ScrollBar2Change(Sender: TObject);
var Difer:Double;
begin
With Chart1.BottomAxis do
Begin
Difer:=Maximum-Minimum;
Maximum:=Chart1.MaxXValue(Chart1.BottomAxis)-ScrollBar2.Position;
Minimum:=Maximum-Difer;
end;
end;

procedure TMDIChild.ScrollBar1Change(Sender: TObject);
var Difer:Double;
begin
Chart1.BottomAxis.SetMinMax(ScrollBar1.Position,10);
ScrollBar2.PageSize:=Trunc((ScrollBar1.Position/935)*ScrollBar2.Max);
end;

Но все время выскакивает ошибка Maximum>=Minimum. В чем проблема?



EAlexander   (2002-01-15 16:03) [4]

в том, что Maximun получаемся меньше Minimum :)



dimonf   (2002-01-15 17:19) [5]

Дак как же мне быть? Может кто делал что-нибуть подобное? Подскажите!!!



MBo   (2002-01-16 08:28) [6]

>Chart1.BottomAxis.SetMinMax(ScrollBar1.Position,10);
очевидно ScrollBar1.Position>10



Boris   (2002-01-16 12:04) [7]

TParser version 10.1
На Torry есть вроде бы. Если нет, пиши, вышлю мылом



Boris   (2002-01-16 12:07) [8]

http://www.fi.muni.cz/~xkovalc/czindex.htm



Sleepyhead   (2002-01-16 16:14) [9]

RTFM.

TChartAxis.SetMinMax

procedure SetMinMax(AMin, AMax: Double);

Unit

TeEngine

Description

The SetMinMax method changes the current Axis Minimum and Maximum scales. The TChartAxis.Automatic property is set to False.



Sleepyhead   (2002-01-16 16:23) [10]

Вообще-то, странноватое использование TScrollBar....

В TeeChart есть специальный компонент для прокручивания графиков, называется TChartScrollBar. Они именно для этого и предназначен!

Вот пример использования TChartScrollBar (недостающее легко восстанавливается).

{$I TeeDefs.inc}
unit Chart_ScrollBar;

interface

uses
{$IFNDEF LINUX}
Windows, Messages,
{$ENDIF}
SysUtils, Classes,
{$IFDEF CLX}
QGraphics, QControls, QForms, QDialogs, QExtCtrls, QStdCtrls, QComCtrls,
{$ELSE}
Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls,
{$ENDIF}
Base, TeEngine, Series, TeeScroB, TeeProcs, Chart;

type
TChartScrollBarForm = class(TBaseForm)
ChartScrollBar1: TChartScrollBar;
Series1: TFastLineSeries;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ChartScrollBar1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

{$IFNDEF CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF}

procedure TChartScrollBarForm.FormCreate(Sender: TObject);
begin
inherited;
Series1.FillSampleValues(1000);

{ show the first 100 points... }
Chart1.BottomAxis.SetMinMax(0,99);

{ adjust the ScrollBar }
ChartScrollBar1.RecalcPosition;
end;

procedure TChartScrollBarForm.Button1Click(Sender: TObject);
begin
ChartScrollBar1.Position:=ChartScrollBar1.Max; { go to end }
end;

procedure TChartScrollBarForm.Button2Click(Sender: TObject);
begin
ChartScrollBar1.Position:=ChartScrollBar1.Min; { go to begin }
end;

procedure TChartScrollBarForm.ChartScrollBar1Change(Sender: TObject);
begin
{ enable / disable the "go to begin" and "go to end" buttons... }
Button1.Enabled:=ChartScrollBar1.Position < ChartScrollBar1.Max;
Button2.Enabled:=ChartScrollBar1.Position > ChartScrollBar1.Min;
end;

initialization
RegisterClass(TChartScrollBarForm);
end.




dimonf   (2002-01-16 20:38) [11]

Ребята, я не очень понял, что такое TChartScrollBar?
Это клас или какой-то визуальный компанент?
Я работаю на Delphi5 под Win2000. Может под D5 такого нет?
Если нет, то где можно достать? В Справке про этот компанент ничего нет. На torry - тоже. Как быть???



dimonf   (2002-01-16 22:22) [12]

Кстати, DBChart чем нибуть отличаеться от Chart? Я имею введу кроме того, что DBChart работает с данными из база а Chart с любыми другими данными.



MBo   (2002-01-17 07:55) [13]

может, объяснишь, что точно тебе требуется и почему не подходит
штатная прокрутка правой кнопкой и zoom левой?



Andrey3   (2002-01-17 08:39) [14]

2 dimonf
Перед тем, как устанавливать значение для
Chart1.BottomAxis.Maximum
надо убедиться, что будет выполнено условие
Maximum > Minimum,
например, сделать так:
Minimum := -(очень большое число)



dimonf   (2002-01-17 09:00) [15]

У моего начальства есть программа, где манипуляции с графиком осуществляют два ScrollBar-а. Один с права(вертикальный)-масштабирует график, другой внизу(горизонтальный)-передвигает влево, право - масштабируемый график. Эта программа написана под DOS.
Меня попросили переделать под Win и сделать тоже самое. Вот я и гумлюсь над данной проблемой :(
Но стандартные методы их не устраивают. Я предлагал сделать три кнопки - одна передвигает график влево, вторая масштабирует, третья передвигает вправо. Не нравиться. :(((
Вот и маюсь :(



MBo   (2002-01-17 09:59) [16]


var i:integer;
delta:double;
cmin,cmax,koef:double;

procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to 100 do series1.addxy(i,sin(0.1*i));
chart1.bottomaxis.SetMinMax(30,60);
cmin:=series1.MinXValue;
cmax:=series1.MaxXValue;
end;

procedure TForm1.ScrollBar2Change(Sender: TObject);
var amin,amax:double;
begin
delta:=chart1.BottomAxis.Maximum-chart1.BottomAxis.Minimum;
koef:=(1-cmin/(cmax-delta))/(scrollbar2.max-scrollbar2.min);
amin:=cmin+scrollbar2.position*koef*(cmax-delta);
amax:=amin+delta;
chart1.bottomaxis.SetMinMax(amin,amax);
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
var c,zoom,d:double;
begin
zoom:=scrollbar1.position*0.1;
label1.caption:=floattostr(zoom);
delta:=chart1.BottomAxis.Maximum-chart1.BottomAxis.Minimum;
c:=chart1.BottomAxis.Minimum+delta/2;
chart1.bottomaxis.SetMinMax(c-zoom*(cmax-cmin)/2,c+zoom*(cmax-cmin)/2);
end;



MBo   (2002-01-17 10:00) [17]

и все-таки потыкай левой и правой кнопкой в график




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.023 c
1-8830            ТеньЛуны              2002-01-15 11:14  2002.02.04  
Пару дней назад...


1-8895            Socol                 2002-01-16 15:18  2002.02.04  
Скрытые файлы.


1-8945            kserg@ukr.net         2002-01-18 13:12  2002.02.04  
Как программно перевести фокус в ячейку StringGrid.Cells


1-8840            .: Joiro :.           2002-01-19 13:12  2002.02.04  
Как


1-8883            Deutschmann           2002-01-16 12:04  2002.02.04  
Масштабирование щрифтов