Ps: Dlaczego używasz Lazarusa a nie np. Delphi 10.2.1 Starter?
Bo nie lubię pracować z łańcuchem u szyi i kulą u nogi.
Przesiadłem się na Lazarusa (dawno temu pisałem w Delphi7), bo jest darmowy, bo działa wydajnie nawet na starszej maszynie (nie potrzebuje RAM-u zbyt wiele). A najważniejsze jest to, że mam dostęp do pełnych źródeł biblioteki standardowej i biblioteki komponentów, dzięki czemu dokładnie wiem jak coś działa, a także mogę w nim tworzyć oprogramowanie komercyjne, bez ~żadnych limitów (a tym się właśnie zajmuję).
Ogólnie jestem zadowolony z tego środowiska, choć wad posiada całkiem sporo. ;)
No i przepisałem na Delphi... Nie działa :(
„Nie działa” to nie jest dobry opis problemu…
Proszę o spojrzenie co jest nie tak...
Zastąpiłem:
- metodę Canvas.Line na Canvas.MoveTo + Canvas.LineTo,
- wyrażenie x += y zastąpiłem x:= x+y;
Tu jest dobrze – to tylko inny zapis, działa identycznie.
- zmienną LLeft zrobiłem globalną, bo w Delphi nie da się lokalnie inicjować zmienne przy deklaracji
Ale po co? Delphi nie umożliwia inicjalizowania zmiennych lokalnych, ale umożliwia ich deklarację. Trzeba było ją zostawić w tym miejscu, a przypisanie wartości początkowej wykonać na początku bloku kodu:
var
LLeft: Integer;
begin
LLeft := 0;
Rezultat? Nie rysuje wykresu...
Co to znaczy, że „nie rysuje wykresu”? Niczego nie maluje w komponencie, czy maluje, ale nie wszystko?
Działanie całości najpierw przetestuj na przykładowej serii, tak aby widzieć czy wszystkie metody malujące robią to co trzeba i w taki sposób jak trzeba. Dlatego też wyłącz Timer
(tak aby nie odświeżał serii), a serię wypełnij przykładowymi danymi. Czyli metodę ChartSeriesClear
napisz np. tak:
procedure TMainForm.ChartSeriesClear();
var
LVertexIdx: Integer;
begin
for LVertexIdx := 0 to CHART_DATA_SERIES_SIZE - 1 do
FChartSeries[LVertexIdx] := 45;
end;
Komponent po włączeniu programu powinien wyglądać mniej więcej tak:
Jeśli któregoś elementu wykresu brakuje to przyjrzyj się metodom z prefiksem Print
, czyli:
-
PaintChartBackground
,
-
PaintChartOutline
,
-
PaintChartGridLines
,
-
PaintChartPolygonBackground
,
-
PaintChartPolygonOutline
.
W Delphi malowanie może się odbywać nieco inaczej niż w Lazarusie, choć ten drugi utrzymuje kompatybilność z tym pierwszym, więc wszystko powinno działać prawidłowo (jeśli o klasę TCanvas
chodzi).
Jeśli nadal wykres nie jest malowany prawidłowo to użyj debuggera i sprawdź, czy wszystkie metody faktycznie wykonują się. Sprawdź czy Timer
działa, czy dane w serii są prawidłowe (wartości z zakresu <0;100>
), czy podczas skalowania wartości i współrzędne są prawidłowe.