Chart1 - niewidoczne series

Chart1 - niewidoczne series
tomix
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 5 lat
0

Drodzy koledzy,

mam na formularzu min. Chart1 do rysowania wykresów. Co godzinę ma przybywać kolejny Series, a żeby ułatwić sobie sprawę i wszystkie generować identyczne (pozmieniałem kolory, dodałem parę efektów 3d) zrobiłem tak:

Kopiuj
function TfmMain.GenerujSeries(Title: string): TChartSeries;
var
  tempSeries: TChartSeries;
begin
  result := nil;
  try
    tempSeries := TChartSeries.Create(nil);
    tempSeries.ParentChart := Chart1;
    tempSeries.Title := Title;
    tempSeries.Visible := True;
    tempseries.Pen.Width := 4;
    tempseries.Pen.Style := psDot;
    tempseries.Name := 'd';
    tempseries.Marks.Visible := true;
    tempseries.Marks.Clip := false;
  except
    on e: Exception do
      ObsluzBlad(e, 'TfmMain.GenerujSeries');
  end;
end;

Jak widzicie użyłem już sporo właściwości z TChartSeries, ale żadna mi nie pokazuje linii na wykresie. Tak jak na przykładowym screnie:

6bbf805b_o.png

Czy macie może pomysł czego mi jeszcze brakuje?

edytowany 4x, ostatnio: flowCRANE
tomix
to nie to, dane dodaje cyklicznie w Timerze. pojawiają się etykiety wartości na wykresie (marks), ale samej linii nie widać
m_Lesiu
W ogóle czy to jest cała funkcja? czy tylko kawałek?
flowCRANE
Przenieście dyskusję do postów;
Patryk27
Nie do końca w temacie, natomiast @tomix: po co masz tę procedurę "ObsluzBlad"? Przecież wystarczy odczytać ExceptAddr i na podstawie pliku z danymi debuggera (które na pewno Delphi jest w stanie wygenerować do osobnego pliku) można wyjąć nazwę procedury (dowolnej), ew.może istnieje jakaś wbudowana funkcja, tego nie wiem - FPC przykładowo posiada SysBacktraceStr, która automatycznie na podstawie adresu zwraca nazwę funkcji | alzo, nie ma nic gorszego od mieszania polskich i angielskich słów w jednym identyfikatorze.
flowCRANE
@Patryk - ObsluzBlad może jest tylko do "debugowania", choć jak już coś to widziałbym tam coś poroju {$IFDEF DEBUG} ;) Co do drugiego (identyfikatory) - święta racja, choć nie dla tych, co nie znają wystarczająco angielskiego; Ale też polecam pozbycia się manii spolszczania języka;
m_Lesiu
  • Rejestracja:około 12 lat
  • Ostatnio:około 4 lata
  • Postów:138
0

funkcja zawsze zwraca nil, może coś z tym dalej w programie massz


tomix
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 5 lat
0

Pen.Color ? - _13th_Dragon -> nadal nic. Tzn coś się pojawia bo skala się zmienia, ale samego wykresu nadal nie widać.
W ogóle czy to jest cała funkcja? czy tylko kawałek? - TLesiu -> tj. całość. Czegoś brakuje wg. Ciebie?

m_Lesiu
no tyle ze result zawsze jest nil.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
0
tomix napisał(a)

Pen.Color ? - _13th_Dragon -> nadal nic. Tzn coś się pojawia bo skala się zmienia, ale samego wykresu nadal nie widać.

@tomix - na litość boską, jak mamy Ci pomóc, jeśli podajesz tak ogólne informacje? Do tego masz mało kodu, a on sam jest słabo napisany...

TLesiu napisał(a)

funkcja zawsze zwraca nil, może coś z tym dalej w programie massz

Trafne spostrzeżenie - funkcja zawsze zwraca nil; Dodatkowo w kółko powtarzasz część kodu, który można skrócić przez skorzystanie z instrukcji wiążącej With;

Podałeś jedynie namiastkę kodu, który raczej błędu nie spowoduje, a dlaszy kod korzystający z metody GenerujSeries nie chcesz pokazać; Tak więc podaj więcej kodu i więcej szczegółów, ewentualnie dorzuć zrzut ekranu żeby zobrazować problem.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
tomix
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 5 lat
0

To jest "robocza" część kodu, co to oznacza:
• nie zastosowałem with ponieważ ciągle dopisuje nowe property "na chybił trafił" i potrzebuje podpowiedzi po. Ostatecznie przed wersją produkcyjną zostanie to poprawione
• faktycznie funkcja zwraca nil, ale to akurat tutaj jest celowe. Zamiast pisać kod, który zwróci TChartSeries - (Chart1.AddSeries(GenerujSeries(title))) zrobiłem w funkcji, że parentem jest Chart1

Kopiuj
tempSeries.ParentChart := Chart1; 
  • wychodzi na to samo, a w pierwszym wariancie coś mi nie działało.

Ogólnie dodawanie nowych wartości do series działa bo jak wspominałem zmienia się skala i dodają się nowe etykiety na osiach X i Y tylko samej linii wykresu nie widać...

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
0

faktycznie funkcja zwraca nil, ale to akurat tutaj jest celowe.

Czegoś tutaj nie rozumiem - celowo wprowadzasz zamęt w kodzie? Skoro nie potrzebujesz zwracać żadnej wartości to po co zrobiłeś funkcję?

nie zastosowałem with ponieważ ciągle dopisuje nowe property "na chybił trafił" i potrzebuje podpowiedzi po.

Hmm... A to wewnątrz instrukcji wiążącej nie można dopisywać na chybił/trafił? Wiem, że to później poprawisz, jednak lepiej jest od razu pisać poprawnie, by później nie musieć poprawiać;

Ogólnie dodawanie nowych wartości do series działa bo jak wspominałem zmienia się skala i dodają się nowe etykiety na osiach X i Y tylko samej linii wykresu nie widać...

Ja niestety nie mam tej kontrolki i nigdy jej nie wykorzystywałem więc sprawdzić nie mam jak, ale w Google jest sporo przykładów z których wynika, że nieco przekombinowujesz dodawanie nowych serii; Poszukaj a znajdziesz prostsze rozwiązanie.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: madmike
flowCRANE
Dzięki @madmike - zawsze ten sam błąd... ;)
tomix
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 5 lat
0

@Furious Programming: zgadzam się zupełnie co do porządku w kodzie - zawsze powinno być przejrzyście i stosownie zakomentowane. Tej zasady staram się trzymać, czego faktycznie może nie być widać w tym przypadku ;) Jednak ostateczna forma funkcji GenerujSeries musi poczekać do określenia aż dodawanie nowych serii będzie działać albo poprzez kod w jej ciele, albo poprzez referencję. Wtedy przestanie być funkcją. Niestety póki co próbuję na wszelkie możliwe sposoby (nawet te z google) i nic.

@Edit:
problem rozwiązany, zastąpiłem

Kopiuj
TChartSeries

klasą TLineSeries

Kopiuj
edytowany 1x, ostatnio: tomix
flowCRANE
"Wtedy przestanie być funkcją" - no dobrze, tyle że nawet teraz zwracanie wartości do niczego nie służy; W każdym razie dobrze, że sobie poradziłeś;
Pegii
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
  • Postów:54
0

Oprogramowałeś właściwości serii za pomocą funkcji ale nigdzie nie dodałeś do tej serii danych. No chyba że robisz to odwołując się później do tej funkcji?


Uwaga NooB !!!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.