Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Probel mit Timer (https://www.delphipraxis.net/16675-probel-mit-timer.html)

LoW_FloW 21. Feb 2004 14:25


Probel mit Timer
 
Der Timer spinnt igendwie... Ich hab schon alle Kombinationen ausprobiert, aber der zählt immer nur "0".
Hier der Source:
Delphi-Quellcode:
unit uBench;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ImgList;

type
  TForm1 = class(TForm)
    Start: TButton;
    FigurListe: TImageList;
    Image1: TImage;
    Label1: TLabel;
    Timer1: TTimer;
    procedure StartClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Bild : TBitmap ;
  BildName : string ;
  Punkte : integer ;
  Zeit : integer ;
 
implementation

{$R *.dfm}

procedure TForm1.StartClick(Sender: TObject);
var
i : integer ;
begin
for i := 1 to 2 do
  begin
  Bild.LoadFromFile(ExtractFilePath(Application.Exename)+IntToStr(i)+'.bmp');
  Bild.Width := 1612 ;
  Bild.Height := 1081 ;
  FigurListe.Width := 1612 ;
  FigurListe.Height := 1081 ;
  FigurListe.Masked := false ;
  FigurListe.Add(Bild, nil)
  end;
Timer1.Enabled := true ;
for i := 1 to 50 do
  begin
  FigurListe.GetBitmap(0, Image1.Picture.Bitmap) ;
  repaint ;
  FigurListe.GetBitmap(1, Image1.Picture.Bitmap) ;
  repaint ;
  end;
Timer1.Enabled := false ;
Label1.Caption := IntToStr(Zeit) ;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FigurListe.Free ;
Bild.Free ;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FigurListe := TImageList.Create(self);
Bild := TBitmap.Create ;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Zeit := Zeit + 1 ;
end;

end.
Es soll zunächst 2 Bilder in die ImageList geladen werden, die dann abwechselnd angezeigt werden (50 mal). Die Zeit während der Anzeige der 50 Bilder soll gemessen und dargestellt werden (Label1.Caption := IntToStr(Zeit)). Nur ist die Caption von Label1 "0", was ich überhaupt nicht verstehe. :wall: :gruebel:

Markus K. 21. Feb 2004 14:41

Re: Probel mit Timer
 
Hallo LoW_FloW,
wie mist du eigentlich die Zeit? Kann man eigentlich mit dem Timer eine Zeit messen? Eigentlich führt der Timer nach einem bestimmten Intervall ein Ereignis aus.

Tschüß Markus

Ratte 21. Feb 2004 14:54

Re: Probel mit Timer
 
Hi LoW_FloW,

könnte es sein das du einen Intervall gewählt hast der länger ist als das zeichnen dauert? Dann würde der Timer ausgeschaltet bevor er überhaubt einmal hochgezählt hat.

Ratte

Jens Schumann 21. Feb 2004 15:01

Re: Probel mit Timer
 
Hallo LoW_FloW,
anstatt mit Hilfe eines Timers könnte Du auch diue API-Funktion GetTickCount verwenden.
GetTickCount liefert die Anzahl der verstrichenen Millisekunden seit dem Start.
Beipspiel:
Delphi-Quellcode:
...
  var
    StartTime : DWord;
...
  StartTime:=GetTickCount;
  for i := 1 to 50 do
    begin
    FigurListe.GetBitmap(0, Image1.Picture.Bitmap) ;
    repaint ;
    FigurListe.GetBitmap(1, Image1.Picture.Bitmap) ;
    repaint ;
    end;
  Label1.Caption := IntToStr(GetTickCount-StartTime)+' MilliSekunden' ;
...
So brauchst den Timer gar nicht.

Markus K. 21. Feb 2004 15:05

Re: Probel mit Timer
 
Um Zeitmessungen durchzuführen, kannst du es mal mit folgender Procedure versuchen.

Delphi-Quellcode:
var c,zeit1,zeit2:TLargeInteger;
begin
     QueryPerformanceFrequency(c);
     QueryPerformanceCounter(Zeit1);
     
     {zumessende Procedure oder Funktion einfügen}

     QueryPerformanceCounter(Zeit2);
     Label1.Caption:=Format('Zeit: %g',[(Zeit2-Zeit1)/c]);

end;
Tschüß Markus

Markus K. 21. Feb 2004 15:07

Re: Probel mit Timer
 
Ist die GetTickCount Funktion bei Zeitmessungen nicht zu ungenau? :gruebel:

LoW_FloW 21. Feb 2004 16:52

Re: Probel mit Timer
 
WOW...Vielen Dank, ging ja schnell ab hier :-D
Ich habs jetzt mal mit der GetTickCount-Funktion von Jens Schumann gemacht. Klappt bestens.
Nach der Genauigkeit gucke ich nochmal, ansonsten nehme ich die Möglichkeit von Markus K.. VIelen dank nochmal an euch 2 und auch an die anderen!!!
Acho nochwas...das Interval war 1 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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