AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TimeSetEvent / Canvas / Thread?

Ein Thema von HJay · begonnen am 1. Feb 2011 · letzter Beitrag vom 3. Nov 2011
 
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#1

TimeSetEvent / Canvas / Thread?

  Alt 1. Feb 2011, 22:26
Ich möchte eine wissenschaftliche Grafik kontinuierlich flüssig animieren und die restliche Benutzeroberfläche soll interaktiv bleiben und die Animation nicht hakeln lassen. Als Trivialversion habe ich daher erst einmal eine primitive "NewsTicker-Laufschrift" testen wollen, die echte Grafik sollte dann später leicht auszutauschen sein. Aber mir gelingt nicht einmal ansatzweise eine flüssige, pixelbasierte Animation. Wer hat Tipps, wie man da herangeht?

Ich dachte, dass ich das mit einem MultiMedia-Timer realisieren könnte.

Die Schrift springt aber um geschätzte 10 px je sichtbarer Änderung und jede Mausbewegung auf der Form lässt alles stehen. Liegt das daran, dass das ganze nicht threadsicher ist? Was mache ich so grundsätzlich falsch und wie kann man das Problem beheben? (D6 unter W7)

Code:
type
  TNewsTicker = class(TObject)
  private
    mmResult : Integer;
    Canvas  : TCanvas;
    X       : Integer;
  public
    constructor Create(ACanvas: TCanvas);
    destructor Destroy; override;
  end;

implementation

procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); pascal;
  var ANewsTicker : TNewsTicker;
begin
  ANewsTicker := TNewsTicker(dwUser);
  ANewsTicker.Canvas.TextOut(ANewsTicker.X, 100, 'Test');
  Inc(ANewsTicker.X);
end;

{ TNewsTicker }

constructor TNewsTicker.Create(ACanvas: TCanvas);
begin
  inherited Create;
  Canvas  := ACanvas;
  X       := 0;
  mmResult := TimeSetEvent(50, 10, @TimeCallBack, DWORD(Self), TIME_PERIODIC);
end;

destructor TNewsTicker.Destroy;
begin
  TimeKillEvent(mmResult);
  inherited Destroy;
end;
und aufgerufen einfach durch die Form der Anwendung:

Code:
procedure TFormMain.Button1Click(Sender: TObject);
begin
  MainNewsTicker := TNewsTicker.Create(Canvas);
end;
  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 03:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz