Patryk27 napisał(a)
Lepsze byłoby tutaj natomiast skorzystanie z OpenGL (bezpośrednio lub za pośrednictwem jakiegoś silnika) z handle ustawionym na kontrolkę TPanel.
marogo napisał(a)
Jak wspomniał Patryk27, stworzenie przesuwanego i skalowanego wykresu przy użyciu TCanvas będzie wymagało trochę roboty, więc ja proponuję użyć komponentu TChart. Może nie warto upierać się przy TCanvas.
No co Wy, chłopaki? Nie wiecie przecież czy pytacz w ogóle korzystał kiedykolwiek z OpenGL
i innych API; A jeśli faktycznie nie zna tych API to jeszcze dołożycie mu roboty... Napisał jasno, że otrzeba mu szybko to zrobić, a w OpenGL
szybciej nie będzie;
Wbrew pozorom zaimplementowanie takiego wykresu to rzecz bardzo prosta:
- ustawiasz
TTimer
z interwałem na 1000
,
- wykorzystujesz zdarzenie
OnTimer
do aktualizowania wykresu wywołując odpowiednio przygotowaną procedurę, przekazując jej w argumencie wartość aktualnego obciążenia:
- wypełniasz tło kanwy (metoda
Rectangle
),
- rysujesz w pętli siatkę (metody
MoveTo
i LineTo
),
- na podstawie macierzy z wartościami obciążenia procesora rysujesz linię łamaną wykresu (metoda
Polyline
),
- ewentualnie wypełniasz pole pod wykresem - jeśli siatka jest statyczna to sprawa jest prosta - metodą
FloodFill
wypełniasz odpowiednie kratki, jednak jeśli jest ruchoma, trzeba znać ich pozycje i także w pętli wypełniać je po kolei;
Jeśli chodzi o rozciąganie formularza i tym samym zmianę rysowania w kontrolce - należy zarówno gęstość siatki jak i skalę wykresu przeliczać w metodzie rysującej przed samym rysowaniem;
Mając przećwiczony proceder pobierania wartości obciążenia procesora jesteś w stanie zaimplementować taki wykres w godzinę, góra dwie na spokojnie; Ja to tak widzę, szkoda, że nie mam czasu bo spróbowałbym takie cuś zaimplementować (może jutro z wieczora);
EDIT: Tylko nie zapomnij przed rozpoczęciem rysowania wywołać metodę BeginUpdate
, a po zakończeniu EndUpdate
- wtedy przemalowanie kontrolki (formularza) odbędzie się raz, a bez nich po każdym narysowanym elemencie; Proponuję wykorzystać siatkę statyczną - zaoszczędzisz trochę czasu, skoro masz go tak mało.