Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Image wieder blank machen (https://www.delphipraxis.net/102458-image-wieder-blank-machen.html)

Avicenna 29. Okt 2007 17:47

Re: Image wieder blank machen
 
Bei mir tut sich da einfach nichts.
Ich poste jetzt mal den kompletten Quelltext von procedure TForm1.Timer1Timer(Sender: TObject);:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin

 if stunde < 10 then
 ausgabestd:='0'+inttostr(stunde);
 if stunde >= 10 then
 ausgabestd:=inttostr(stunde);
 if minute < 10 then
 ausgabemin:='0'+inttostr(minute);
 if minute >= 10 then
 ausgabemin:=inttostr(minute);
 if sekunde < 10 then
 ausgabesek:='0'+inttostr(sekunde);
 if sekunde >= 10 then
 ausgabesek:= inttostr(sekunde);

sekunde:=sekunde+1;
begin;
if sekunde > 59 then
begin;
sekunde:=0;
minute:=minute+1;
image1.invalidate;
end;
if minute > 59 then
begin
minute:=0;
stunde:=stunde+1;
end;
if stunde > 59 then
stunde:=0;

label1.caption:='Zeit:'+ausgabestd+':'+ausgabemin+'.'+ausgabesek;

image1.canvas.ellipse(10+6*sekunde,10,15+6*sekunde,15);

if sekunde = 59 then
Image1.Invalidate;

end

end;
außerdem noch die Variablendeklaration:
Delphi-Quellcode:
var
  Form1: TForm1;
  stunde,minute,sekunde:integer;
  ausgabestd,ausgabemin,ausgabesek:string;
Ich hoffe, ihr könnt mir so weiterhelfen.

DeddyH 29. Okt 2007 17:49

Re: Image wieder blank machen
 
Ist der Timer auch enabled?

Progman 29. Okt 2007 17:52

Re: Image wieder blank machen
 
sollte es nicht anstelle von
Delphi-Quellcode:
if stunde > 59 then stunde:=0;
eher heißen:
Delphi-Quellcode:
if stunde > 23 then stunde:=0;
?
Und was geht denn nicht? Wird nichts gezeichnet?

DeddyH 29. Okt 2007 17:57

Re: Image wieder blank machen
 
Ich habe mal schnell eine Version mit weniger Variablen (dafür mit mehr Berechnungen) erstellt:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    sekunde: Cardinal;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  sekunde := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (sekunde mod 60) = 0 then
    image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));
  image1.canvas.ellipse(10 + 6 * (sekunde mod 60),10,15 + 6 * (sekunde mod 60),15);
  Label1.Caption := Format('%.2d:%.2d:%.2d',[Succ(sekunde) div 3600,
                                             Succ(sekunde) div 60,
                                             Succ(sekunde) mod 60]);
  inc(sekunde);
end;

end.
[edit] Für lange Laufzeiten sekunde als Cardinal statt integer umdeklariert *gg* [/edit]

marabu 29. Okt 2007 18:02

Re: Image wieder blank machen
 
Hi,

hier noch was zum knobeln:

Delphi-Quellcode:
procedure TDemoForm.ClockTimer(Sender: TObject);
var
  r: TRect;
  dt: TDateTime;
begin
  with Sender as TTimer do
  begin
    Enabled := False;
    dt := Now;
    Panel.Caption := TimeToStr(dt);
    with Image do
    begin
      if SecondOf(dt) mod 5 = 0 then
        Canvas.FillRect(Canvas.ClipRect);
      r := Rect(Random(Width), Random(Height), Random(Width), Random(Height));
      Canvas.Ellipse(r);
    end;
    Interval := 1000 - MilliSecondOf(Now);
    Enabled := True;
  end;
end;
Grüße vom marabu

DeddyH 29. Okt 2007 18:03

Re: Image wieder blank machen
 
Jaja, DateUtils

Avicenna 29. Okt 2007 18:34

Re: Image wieder blank machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für eure Antworten.
Der Timer ist enabled.
Danke für den Hinweis mit der Stunde (>23), ich habe es ausgebessert.
Aber gehen tut es immer noch nicht.

Problembeschreibung:
Pro Sekunde wird ein Kringel hinzugefügt. Nach 60 (oder 59, das spielt keine Rolle) Sekunden sind dann 60 (oder 59) Kringel da, und rien ne va plus. Nichts passiert mehr.

Erwünschte Problemlösung:
Es geht wieder von vorne los, d.h. alle 60 (oder 59) Kringel verschwinden. In der nächsten Sekunde kommt wieder ein Kringel usw. usf.

DeddyH 29. Okt 2007 18:36

Re: Image wieder blank machen
 
Hast Du meine Lösung mal versucht? Invalidate hat bei mir auch nicht genügt, weswegen ich das ganze Image einfach komplett übermale. Die "fehlenden" Variaben kannst Du ja dann wieder deklarieren.

Progman 29. Okt 2007 18:45

Re: Image wieder blank machen
 
Ich würde auch sagen, das Image mit FillRect neu zeichnen. Dann dürfte einem erneuten Zeichnen nichts mehr im Wege stehn...
Es sei denn, irgendwas anderes läuft noch schief, nur ich kann das jetzt nicht ausprobieren.

Avicenna 29. Okt 2007 19:37

Re: Image wieder blank machen
 
Bei dir kommt mod vor, das haben wir noch nicht gelernt. Was bedeutet das denn?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 Uhr.
Seite 3 von 4     123 4      

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