Zitat von
jaenicke:
Also wenn ich überall DoubleBuffered auf True setze (Form, TOszilloskop, ScrollBox) und das Intervall auf 25 stelle, dann flackert da kaum noch etwas.
Was mir aufgefallen ist: Wenn sich der Bereich gar nicht ändert, könntest du eigentlich auch die gleiche Bitmap weiterverwenden. Denn im Moment braucht das Programm für das was es macht eigentlich deutlich zu viel Prozessorleistung.
Oder du könntest auch direkt auf die Zielbitmap zeichnen statt auf viele kleine.
Also eigentlich ist das so programmiert, dass nur gezeichnet wird, wenn etwas am Eingang passiert:
Auszug aus der OsziUnit {OszilloskopUnit}
Delphi-Quellcode:
procedure TOszilloskop.FOnSignalEingang(Sender: TObject; const IdentNumber: integer);
var i: integer;
begin
GetRange;
for I := 0 to Length(FSignal)-1 do InitBitmap(i+1);
FPB_Display.Invalidate;
end;
und Auszug aus der OsziChUnit {OszilloskopKanalUnit}
Delphi-Quellcode:
procedure TOszilloskopKanal.SetYWert(dWert: double);
begin
movedArray(FadyWert);
FadyWert[FiYmax] := dWert;
if dWert < FdMinWert then FdMinWert := dWert;
if dWert > FdMaxWert then FdMaxWert := dWert;
doChangeEingang;
end;
procedure TOszilloskopKanal.doChangeEingang;
begin
if Assigned(FOnChangeEingang) then FOnChangeEingang(Self, FiIdent);
end;
Das Event, dass ein Eingangssignal in die OsziChUnit reinkommt, wird an die OsziUnit weiter gegeben und das löst die Maßnahmen zum Zeichnen aus. Hat allerdings noch einen großen Nachteil, wo ich noch kein Konzept für habe:
Wenn ich 20 Kanäle erzeuge dann wird das ganze 20mal ausgelöst, was zur Folge hat, dass die Graphen etwas verzerrt werden. Zur Zeit, da ich nur 1 Graphen benötige, kommt der Fehler nicht zum tragen, aber dafür muss ich noch ein machbares Konzept finden.
[Edit] Fehler: die verzerrte Darstellung seit der Trennung der der einzellnen Layer(Graphen) in separate Bitmaps hat sich erledigt. Die Lösung für den verzerrten Graphen war die Änderung des altes Konzeptalle: Signale werden bei Eingang eines Signals in einen Graphen gezeichnet. Also mit den Layern ist dieser Fehler nie aufgetreten![/Edit]
2. Account Sero