Hallo,
ich möchte für die grafische Darstellung (Prozessvisualisierung) einer industriellen Automation eine Bitmap auf der Canvas einer Form hin- und herbewegen.
Dazu frage ich die EW bzw. MW einer Siemens S5 in einem bestimmten Takt über RS232 und mit einem "Timer.Interval := 1" ab, liegt also im Millisekunden-Bereich, je nach Rechnerpower und Konsistenz der SPS.
Die Y-Position der Bitmap ist konstant, jedoch ändert sich ständig der X-Wert. Diesen liefert mir die SPS.
Nach einer Positionsänderung der Bitmap lasse ich die Canvas über die Methode Paint des Formulars neu zeichnen, und zwar in einem begrenzten Bereich. Hierbei kommt es unweigerlich zum Flimmern der Animation.
Hat jemand vielleicht eine Idee, wie ich das abstellen kann ?
Hier der Code:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var x: integer;
begin
x:= xOffset + xMove;
Canvas.PolyLine( [Point(10, 10), Point(720, 10), Point(720, 350),
Point(10, 350), Point(10, 10)]);
Canvas.FillRect(Rect(11, 11, 719, 349));
Canvas.Draw(x, yOffset, Bmp);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Bmp.LoadFromFile('Grafik2.bmp');
Timer1.Enabled:= true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Bmp.LoadFromFile('Grafik.bmp');
Timer1.Enabled:= false;
Timer2.Enabled:= false;
Paint;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
xMove:= xMove + 10;
if xMove >= 500 then
begin
Bmp.LoadFromFile('Grafik3.bmp');
Timer1.Enabled:= false;
Timer2.Enabled:= true;
end;
Paint;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
xMove:= xMove - 10;
if xMove <= 0 then
begin
Bmp.LoadFromFile('Grafik2.bmp');
Timer2.Enabled:= false;
Timer1.Enabled:= true;
end;
Paint;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Timer1.Interval:= TrackBar1.Position;
Timer2.Interval:= TrackBar1.Position;
Edit1.Text:= IntToStr(TrackBar1.Position);
end;
Und noch zwei Screenshots:
http://www.tsm-factory.de/Delphi/Prozess_01.png
http://www.tsm-factory.de/Delphi/Prozess_02.png
Danke für eure Vorschläge.
Gruß,
Andreas
Win XP Pro, Delphi 2005 Professional, Intel P4 3,2 GHz, 1 GB
RAM, ATi Sapphire Radeon X800XT
PE (16 Pipelines), eigenes Fahrrad.