Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 13:03


Image wieder blank machen
 
Hallo,
mein Delphi-Programm soll wie folgt funktionieren:
Es besteht aus einem Image-Feld, und in procedure TForm1.Timer1Timer(Sender: TObject); ist folgendes zu finden:
Code:
image1.canvas.ellipse(10+6*sekunde,10,15+6*sekunde,15);
, wobei zugleich gilt:
Code:
sekunde:=sekunde+1;
D.h., jede Sekunde kommt ein neuer Kreis hinzu, und nach 60 Sekunden sind 60 Kreise gemalt worden. Nun sollen alle Kreise wieder verschwinden und die Prozedur von vorne losgehen.
Aber wie mache ich das?

Gruß,
Avicenna

Bastler 29. Okt 2007 13:08

Re: Image wieder blank machen
 
einfach das Image wieder mit nem Recheck überzeichnen...

Also:
Delphi-Quellcode:
procedure image_blank;
var bc,pc:Tcolor;
begin
with Form1.Image1.canvas do
  begin
  pc:=Pen.Color;                              //alte Farben speichern
  bc:=Brush.Color;
  Pen.Color:=clwhite;
  Brush.Color:=clwhite;
  Rectangle(0,0,image1.Width, image1.Height); //übermalen
  Pen.Color:=pc;                              //alte Farben wieder zuweisen
  Brush.Color:=bc;
end;
end;
so würd ich's machen...

Avicenna 29. Okt 2007 13:28

Re: Image wieder blank machen
 
Danke für deine Antwort, aber du verwendest zu viele Sachen, die ich noch gar nicht gelernt habe (z. B. with-do). Die Lehrerin beschrieb es so: Man muss das Rechteck einfach wieder weiß machen.

Kennt jemand einen einfacheren Weg als der von Bastler?

leddl 29. Okt 2007 13:54

Re: Image wieder blank machen
 
Zitat:

Zitat von Avicenna
Die Lehrerin beschrieb es so: Man muss das Rechteck einfach wieder weiß machen.

:gruebel: Und genau das hat dir Bastler doch auch geraten... Wenn dir der Code zu kompliziert ist, musst du ihn ja nicht benutzen. Fakt ist aber, dass er dir ja auch schon gesagt hat, was du tun musst. Und nachdem auch die Lehrerin den Tipp gegeben hat, werdet ihr wohl auch schon über die nötigen Kenntnisse verfügen :zwinker:

Neutral General 29. Okt 2007 14:00

Re: Image wieder blank machen
 
Hi,

Wenns statt weiß auch transparent sein darf dann empfehle ich:

Delphi-Quellcode:
Image1.Picture.Bitmap.Assign(nil);
:)

EDIT: Wobei wenn du direkt auf das Canvas des Images malst dürfte sogar ein Image1.Invalidate; reichen.

Gruß
Neutral General

Avicenna 29. Okt 2007 14:48

Re: Image wieder blank machen
 
Danke für eure Antworten, die von Neutral General genannten Codes scheinen die optimalsten zu sein, bloß stehe ich jetzt vor dem nächsten Problem:
Wie soll ich dem Programm vermitteln, dass es dann blank werden soll, wenn 60 Kreise gemalt wurden?

Apollonius 29. Okt 2007 14:50

Re: Image wieder blank machen
 
Einfach im onTimer schauen, wie viele Kreise schon gemalt worden sind.

NickelM 29. Okt 2007 15:04

Re: Image wieder blank machen
 
Um auf Apollonius Antwort zurückzukommen. Um jetzt diesen Schrittt zuwiederholen musst du ne eigene Prozedure schreiebn und ne If - then anweisung:

Delphi-Quellcode:
{eigene prozedure}
procedure Zeichnen;
begin
Image1.Canvas....
end;
{Timer}
procedure TForm1.Timer1Timer(Sender : TObject)
begin
Zeichnen;
If Sekunde = Gewünschte Zahl* then
begin
Image1.Invalidate;
Zeichnen;
end;

end;

leddl 29. Okt 2007 15:30

Re: Image wieder blank machen
 
Zitat:

Zitat von NickelM
Um auf Apollonius Antwort zurückzukommen. Um jetzt diesen Schrittt zuwiederholen musst du ne eigene Prozedure schreiebn und ne If - then anweisung:

:gruebel: Wieso muss sie (?) ne extra Prozedur schreiben? :gruebel:
Delphi-Quellcode:
var: sekunde : Integer;

[...]
  sekunde := 0;
[...]

procedure TForm1.Timer1Timer(Sender : TObject)
begin
  if sekunde = 59 then
  begin
    Image1.Invalidate;
    sekunde := 0;
  end
 
  image1.canvas.ellipse(10+6*sekunde,10,15+6*sekunde,15);
  inc(sekunde);
end;

DeddyH 29. Okt 2007 15:35

Re: Image wieder blank machen
 
Müsste Sekunde nicht 60 sein, bevor neu gezeichnet wird? Sonst würde IMHO der 60. Kreis nicht mehr gezeichnet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 Uhr.
Seite 1 von 4  1 23     Letzte »    

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