AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Flimmern bei bewegten Bitmaps für eine Prozessvisualisierung
Thema durchsuchen
Ansicht
Themen-Optionen

Flimmern bei bewegten Bitmaps für eine Prozessvisualisierung

Ein Thema von Andreas_R · begonnen am 5. Apr 2005 · letzter Beitrag vom 17. Aug 2005
 
Andreas_R

Registriert seit: 5. Apr 2005
Ort: Bremen
14 Beiträge
 
Delphi 2005 Professional
 
#1

Flimmern bei bewegten Bitmaps für eine Prozessvisualisierung

  Alt 5. Apr 2005, 20:46
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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz