![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как зоблокировать TChart на время рисвания на нем?
Kolan © (2007-02-06 10:31:00)Допустим я рисую так:
Clear; //Очищаю серию.
for I := Low(Arr) to High(Arr) do
AddXY(Arr[I].X, Arr[I].Y*1000);
Как заблокировать чарт на время рисования? То нужно что-то вроде:
//Заблокировал
Clear;
for I := Low(Arr) to High(Arr) do
AddXY(Arr[I].X, Arr[I].Y*1000);
//Разблокировал. И только тут нарисованое появилось на чарте.
Kolan (2007-02-06 15:56:00) [1]Может можно наследника сделать TChartSeries? Исходник есть.
Толкьо непонятный он:
{ Removes all points.
Triggers all events and notifications and repaints. }
Procedure TChartSeries.Clear;
begin
FFirstVisibleIndex:=-1; // 7.0 #1281
FLastVisibleIndex:=-1;
ClearLists;
if Assigned(FOnClearValues) then FOnClearValues(Self);
NotifyValue(veClear,0);
if Assigned(FunctionType) then FunctionType.Clear;
if FActive and Assigned(FParent) and
(not (csDestroying in FParent.ComponentState)) then Repaint;
end;
Kolan (2007-02-06 14:01:00) [2]А есть у кого справка на Locked и EndUpdate ?
Kolan (2007-02-06 13:33:00) [3]Беру свои слова назад. EndUpdate влияет на AddXY - те не видно процес исования.
Но на FSerie.Clear не влияет. Те мигание есть.
Kolan (2007-02-06 13:19:00) [4]> С твоими обёртками нет уверенности,
:) Если бы ты узнал как обернут чарт ты бы "ужаснулся". Там целый менеджер графиков, который создает их динамически. И графики разных типов :)
В любом случае BeginUpdate - рулит.
ЮЮ (2007-02-06 13:17:00) [5]
> Так как я вижу см процес рисования.
А я только задежку при пошом колтчестве точек
С твоими обёртками нет уверенности, что FChart и TSerieGraph как-то связаны.
Если бы это был метод обертки для TChart, а не для TLineSeries ^)
Kolan (2007-02-06 13:10:00) [6]
procedure TSerieGraph.Draw(Arr: TDoublePointArray);
var
I: Integer;
begin
FSerie.BeginUpdate;
try
Clear;
//TODO: Be careful.
{Be careful with 1000 multiplication!!!}
for I := Low(Arr) to High(Arr) do
begin
AddXY(Arr[I].X, Arr[I].Y*1000);
Sleep(10);
end;
finally
FSerie.EndUpdate;
end;
end;
А тьфу. работает EndUpdate. Просто я его не там применил :) Благодарю за помошь :)
Kolan (2007-02-06 13:08:00) [7]Это я пробовал :)
Ввел для проверки Sleep.
procedure TSerieGraph.Draw(Arr: TDoublePointArray);
var
I: Integer;
begin
FChart.Locked := True;
try
Clear;
//TODO: Be careful.
{Be careful with 1000 multiplication!!!}
for I := Low(Arr) to High(Arr) do
begin
AddXY(Arr[I].X, Arr[I].Y*1000);
Sleep(10);
end;
finally
FChart.Locked := False;
end;
end;
FChart.Locked - непомогает. Так как я вижу см процес рисования. А по идее должна быть задержка, а потом сразу все появится.
ЮЮ (2007-02-06 12:32:00) [8]Сорри, tuj Canvas вовсе и не TCanvas.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: integer;
begin
Chart1.Locked := true;
try
Series1.Clear;
for i := 0 to 1000 do
Series1.AddXY(Random, Random);
finally
Chart1.Locked := false;
end;
end;
ЮЮ (2007-02-06 12:22:00) [9]TCanvas(Chart1.Canvas).Lock;
Kolan (2007-02-06 11:37:00) [10]А нет ли у кого Help'а к чарту для Pro версии?
Kolan (2007-02-06 10:54:00) [11]О то мигает :)