Poradziłem już sobie.
kawałek kodu
// Przekazywanie danych wykresowi ChartFX
var
j: integer;
k: integer;
begin
// Otwarcie kanału komunikacji z wykresem dla przekazania jednej serii
Chart1.OpenDataEx(COD_VALUES,1,0);
// Ustalenie pierwszej serii (numer 0)
Chart1.ThisSerie:=0;
// Przekazywanie wartości punktów do wykresu
j:=Memo2.lines.Count-1 ; //ilosc linii w memo
k:=strtoint(edit5.text); //wartosc z wagi
begin
Chart1.Value[j] := k;
end;
// Zamknięcie kanału
Chart1.CloseData(COD_VALUES);
end;
i
po ustawieniu w kodzie
pokazuje się pasek z opcjami-można zmieniać kolory,czcionki,wygląd wykresu, można zapisywać dane do/z pliku, robić zrzuty ekranu, drukować
....uff
Jutro podepnę wagę i zobaczę jak to na żywo działa.
===========
Programik już działa-odbiera ładnie dane z wagi (disomat B firmy Schenck) przez RS232 i pokazuje je na wykresie.
Miałem tylko problem ,bo akceptował liczby całkowite,a przy wartości wagi z przecinkiem głupiał (jak dałem k: integer), ale po zmianie na
i
k:=strtocurr(edit5.text);
jest OK.
Teraz mam tylko problem jak zrobić automatyczny scroll. W helpie coś o tym pisze, ale nie kumam za bardzo na razie. Co prawda jak ilość pomiarów przekracza 20 to pasek do scrollowania sam się pojawia na wykresie, ale przesuwać trzeba go ręcznie.
============
Scrollowanie mam prawie rozpracowane-niedługo dopiszę co i jak.
Wyszedł miedzyczasie dość ciekawy problem.
Odbieram dane z wagi do memo, potem dalej je obrabiam i przedstawiam na wykresie-i to dziala.
Zauważyłem jednak, że po kilku minutach odbierania danych -dane odbierane są coraz wolniej i wolniej rysuje się wykres-aż do zawieszenia aplikacji.
Po krótkim śledztwie wyszło na to, że program zaczyna zużywać coraz więcej mocy procesora od powiedzmy 8% aż do 100% (po odbiorze ok. 1200 wartości z wagi) i zawiesza się.
Zacząłem po kolei wywalać ze skryptu linjiki -został mi golutki program z 2 buttonami i 1 memo do odbioru danych-mimo to program po pewnym czasie dochodził do 100% zużycia CPU.
Winny okazał się komponent memo-musiałem przerobić skrypt tak, żeby odbierał dane i się czyścił komendą memo1.clear .
Niestety używam jeszcze 3 memo gdzie zapamiętuję wagę,datę i godzinę-muszę się też ich pozbyć, bo mi też wieszają po czasie program-chyba zrobię jakiś zapis do pliku.
Przy nie wyczyszczonym memo nie wzrasta zużycie pamięci, a wzrasta obciążenie procesora aż do 100%.
Swoją drogą dlaczego tak się dzieje?
===============
Przewijanie wykresu - trochę po partyzancku, bo innego sposobu nie wymyśliłem.
var
hwn: hwnd;
hwn:=chart1.hctlwnd; //uchwyt okna z wykresem
postMessage(hwn, WM_KEYDOWN, VK_next, 0); //vk_next czyli klawisz Page Down-wysyłamy do okna
postMessage(hwn, WM_KEYUP, VK_next, 0);
Niedogodnością jest to, że w ten sposób przy włączonym przewijaniu aktywność wciąż ustawia się na oknie wykresu - przez co kłopot jest z klikaniem w checkboxy,buttony i nie da się edytowac pól edit.
Można sobie zrobić ON/OFF przewijania na checkboxie i włacząć /wyłączać kiedy nam potrzeba.
Proszę nie pisać postu pod postem - do tego jest przycisk "Zmień".
Posty scaliłem.
Dr.Vee