Hi,
ich weiß, ein leidiges Thema, und ja, Doublebuffered := true hab ich.
Also folgende Situation:
2 TImages übereinander.
Auf dem Untereren wird ein Gitter gemalt (Auch ein Oszilloskop, Facharbeitszeit

) und auf dem dadrüber wird der Graph gemalt.
Nunja, der Graph wird mit 1000x Canvas.LineTo in einer Schleife gemacht.
Um das "Wandern" der Linie auf dem Oszilloskop darzustellen hab ich in der Schleife (Optional) ein Delay(1) eingefügt.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure Delay(t: Integer); var i: integer; begin for i := 1 to t do begin sleep(1); Application.ProcessMessages; end; end; |
Hier der eigentliche Zeichencode:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Image.Canvas.Brush.Color := clWhite;; Image.Canvas.FillRect(Image.Canvas.ClipRect); Image.Canvas.Pen.Color := Shape4.Brush.Color; Image.Canvas.MoveTo(trunc(xs[0]),trunc(ys[0])); for i := 1 to high(xs) do begin Image.Canvas.LineTo(trunc(xs[i]),trunc(ys[i])); Delay(SEDelay.Value); end; |
Das hintere Image wird nicht mehr angefasst, nachdem das Gitter einmal gezeichnet wurde.
Und das ganze Konstrukt flimmert wie nichts gutes, irgendjemand eine Idee?
Ich hatte statt einem TImage auch schon für das obere eine TPaintBox versucht. Damit ging es besser, aber die wird gelöscht, wenn irgendwas drüber kommt....