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

Вниз

TChart не строит ординату больше 1817   Найти похожие ветки 

 
physic ©   (2005-02-20 14:37) [0]

вот простейший код, до ординаты 1817 все в порядке, а потом: Invalid Pointer Operation

procedure TForm1.Button1Click(Sender: TObject);
begin
chart1.Series[0].AddXY(1,1818);
end;


 
olookin ©   (2005-02-20 15:06) [1]

physic ©   (20.02.05 14:37)

Это известный баг TChart. Так как исходников нет, то выяснить причину нельзя.


 
physic ©   (2005-02-20 15:12) [2]

ох...ть!!!!!!! а что мне делать?!! неужели через канву?!!
а ты не мог бы поподробнее описать баг, может, я его обойду?


 
olookin ©   (2005-02-20 15:18) [3]

[2] physic ©   (20.02.05 15:12)

Спасает ситуацию следующее:

procedure TForm1.Button1Click(Sender: TObject);
begin
 Chart1.Series[0].AddXY(0,0);
 Chart1.Series[0].AddXY(10,10000);
 Chart1.Series[0].XValues.Delete(0);
end;


 
physic ©   (2005-02-20 15:38) [4]

Спасибо, только не мог бы ты описать идею этого метода, а то он не работает в моей программе. И где можно прочесть про остальные глюки (если они есть)?

procedure TMainForm.plot_btnClick(Sender: TObject);
var
 baseline: real;
 k: integer;
begin
 series_base.Clear;
 series_base.addxy(0,0);  
 for k:=spedt_From.Value to spedt_to.Value do
   begin
     baseline:=base(100000,0,100,k);
     series_base.addxy(k,baseline);
   end;
 series_base.XValues.Delete(0); //первая точка остается почему-то
end;


 
olookin ©   (2005-02-20 15:48) [5]

[4] physic ©   (20.02.05 15:38)

А k в каком диапазоне меняется?


 
physic ©   (2005-02-20 15:54) [6]

k меняется от 1 до 256 или 1000, по-разному
если попытаться удалить первую точку после цикла, то появляется непонятная точка (1,0) вместо (1,100000), а если сделать это до цикла, то все в порядке
спасибо огромное, я неделю искал ответ


 
physic ©   (2005-02-20 16:09) [7]

возникла еще одна проблемка: поскольку первая точка была (0,0), то чарт ее не забыл (хоть и удалил), и при построении графика всегда начинает ординату с нуля. но поскольку у меня эта базовая линия строится на фоне спектра, то получается идиотское масштабирование


 
olookin ©   (2005-02-20 16:33) [8]

[7] physic ©   (20.02.05 16:09)

Масштабируй сам:

procedure ChartMinMax(NChart: TChart);
var i,ra,la,ba: integer;
   maxr,minr,tmpr,minl,maxl,tmpl,minb,maxb,tmpb: double;
begin
 with NChart do begin la:=0; ra:=0; ba:=0;
 for i:=0 to SeriesCount-1 do
 if (Series[i].Active) and (Series[i].XValues.Count<>0) then begin
 if Series[i].VertAxis=aLeftAxis then begin tmpl:=Series[i].MinYValue;
 if la=0 then minl:=tmpl; if minl>tmpl then minl:=tmpl;
 tmpl:=Series[i].MaxYValue;
 if la=0 then maxl:=tmpl; if maxl<tmpl then maxl:=tmpl; Inc(la); end;
 if Series[i].VertAxis=aRightAxis then begin tmpr:=Series[i].MinYValue;
 if ra=0 then minr:=tmpr; if minr>tmpr then minr:=tmpr;
 tmpr:=Series[i].MaxYValue;
 if ra=0 then maxr:=tmpr; if maxr<tmpr then maxr:=tmpr; Inc(ra); end;
 if Series[i].HorizAxis=aBottomAxis then begin tmpb:=Series[i].MinXValue;
 if ba=0 then minb:=tmpb; if minb>tmpb then minb:=tmpb;
 tmpb:=Series[i].MaxXValue;
 if ba=0 then maxb:=tmpb; if maxb<tmpb then maxb:=tmpb; Inc(ba); end; end;

 if la<>0 then begin
 tmpl:=(maxl-minl)*0.1; if tmpl=0 then tmpl:=10;
 maxl:=maxl+tmpl; minl:=minl-tmpl;
 LeftAxis.SetMinMax(minl,maxl); end else LeftAxis.SetMinMax(0,0);
 if ra<>0 then begin
 tmpr:=(maxr-minr)*0.1; if tmpr=0 then tmpr:=10;
 maxr:=maxr+tmpr; minr:=minr-tmpr;
 RightAxis.SetMinMax(minr,maxr); end else RightAxis.SetMinMax(0,0);
{  tmpb:=(maxb-minb)*0.1; if tmpb=0 then tmpb:=10;
 maxb:=maxb+tmpb; minb:=minb-tmpb; BottomAxis.SetMinMax(minb,maxb);} end;
end;


 
physic ©   (2005-02-20 17:04) [9]

я попробовал другую идею: вместо (0,0) задать (0,х), где х - близкая к минимуму спектра величина. вроде работает. однако остается проблема с перерисовкой графика при загрузке нового спектра: не могу удалить базовую линию, возникает List Index Error.

procedure TMainForm.FileOpen(Sender: TObject);
begin
 if OpenDialog.Execute then
 begin
 file_name:=OpenDialog.FileName;
 spectrum.Free;    
//  series_base.Clear;  //очистка базовой линии

 spedt_From.Enabled:=True;
 spedt_to.Enabled:=True;

 spectrum:=tspectrum_.TSpectrum.Create;
 spectrum.read_head(file_name, spectrum);
 spectrum.read_int_table(file_name, spectrum);

//  series_base.Clear;  //очистка базовой линии
 spectrum.plot_gr(spectrum, series_graph, spectrum.ftable, spedt_From.Value, spedt_to.Value);
 end;
end;


 
olookin ©   (2005-02-20 17:07) [10]

[9] physic ©   (20.02.05 17:04)

Честно говоря, по коду ничего не ясно. Может series_base не создана?


 
physic ©   (2005-02-20 17:08) [11]

она создана на этапе разработки приложения :)


 
olookin ©   (2005-02-20 17:09) [12]

[9] physic ©   (20.02.05 17:04)

Насчет масштабирования. Забыл, что есть просто методы Axis.SetMinMax()


 
physic ©   (2005-02-20 17:29) [13]

Отлично! С остальным разберусь.


 
physic ©   (2005-02-20 17:39) [14]

А кто-нибудь знает о подобных багах, но не при передаче координат, а при очистке графика? Может, я и с ним столкнулся.



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

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

Наверх




Память: 0.48 MB
Время: 0.034 c
1-1108546784
Серж
2005-02-16 12:39
2005.03.06
Unit и как с ним бороться?


1-1108643680
Ivolg
2005-02-17 15:34
2005.03.06
Мышь


4-1106387185
vvvaaa
2005-01-22 12:46
2005.03.06
Диалог из ресурса


14-1108560872
советчик
2005-02-16 16:34
2005.03.06
Рульный вопрос


14-1108639991
Doxygen
2005-02-17 14:33
2005.03.06
Pas2DOC





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