Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Вопрос по компоненту Chart (TChart)...   Найти похожие ветки 

 
МикроДИП   (2006-06-17 13:47) [0]

Доброе время суток ! При нажатии на кнопку запускается Thread, в котором в двух циклах (один вложен во второй) добавляются точки (слева на право и снизу вверх) к графику методом Chart1.Series[0].AddXY(). Т.е. график представляет собой прямоугольную форму заполненную точками с неким произвольным шагом. Пока форма, на которой расположен график, неподвижна - всё нормально. Но если во время рисования графика начать двигать форму, происходит чёрти чё: уже нарисованные точки могут перескачить вверх, или вниз - в зависимости от того, куда я двигаю форму. А ещё может выскочить ошибка "EListError: List index out of bounds"... Что это такое, из-за чего это происходит и как с этим бороться ? Есть предположение что перетаскивание формы влияет каким-то образом на параметр ValuesLists... Но как ? И опять же, как это исправить ? Почитал архив вопросов на delphikingdom. Народ советует вообще не связываться с TChart-ом, а рисовать графики вручную с помощью Canvas. Так ли это ? График у меня простой двумерный, на каждом этапе должна ставиться точка соответствующего цвета (зависит от значения). Максимальный размер массива точек (X,Y) может составлять (200,500). Заранее благодарю за любые ответы !


 
GanibalLector ©   (2006-06-17 14:08) [1]

Нельзя из потока обращаться к VCL компонентам. Сделай так : -посылай сообщение из потока , а в главном потоке принимай и добавляй Chart1.Series[0].AddXY


 
GanibalLector ©   (2006-06-17 14:28) [2]

Что-то типа этого :

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart;

type
 TForm1 = class(TForm)
   Chart1: TChart;
   procedure FormCreate(Sender: TObject);
 private
    procedure ThreadMessage(var Msg:TMessage);message WM_USER+1;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
  uses Series;
{$R *.DFM}

function Potok(Param:Pointer):DWord;
  var I:Integer;
begin
 for I:=1 to 200 do
 begin
   PostMessage(Cardinal(Param),WM_USER+1,I,Random(50));
   Sleep(30);
 end;
 Result:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
 var ThId:DWord;
begin
 Randomize;
 Chart1.AddSeries(TLineSeries.Create(Self));
 CloseHandle(BeginThread(nil,0,@Potok,PHAndle(Self.Handle),0,ThId));
end;

procedure TForm1.ThreadMessage(var Msg: TMessage);
begin
 Chart1.Series[0].AddXY(Msg.WParam,Msg.LParam);
end;

end.




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

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.049 c
15-1151468479
Dimmmonn
2006-06-28 08:21
2006.07.30
нужны сэмплы!


1-1150189912
Vir
2006-06-13 13:11
2006.07.30
Сравнение строк по маске.


2-1152549870
Belorus
2006-07-10 20:44
2006.07.30
Доступ к MS SQL


15-1151337136
_RusLAN
2006-06-26 19:52
2006.07.30
Linux. Небольшой. Какой выбрать?


6-1142837533
Piero
2006-03-20 09:52
2006.07.30
Свойства ctBlocking, ctNoNBlocking