Entwickler-Ecke

Multimedia / Grafik - Image blinken lassen


boozzz - Fr 06.01.06 20:42
Titel: Image blinken lassen
Hi,
im folgenden möchte ich Image1 blinken lassen (An-Aus-An-Aus...). Kann mir jemand sagen, wieso das nicht funktioniert?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Image1.Visible:=false;
  sleep(500);
  Form1.Image1.Visible:=true;
  sleep(500);
  Form1.Image1.Visible:=false;
  sleep(500);
  Form1.Image1.Visible:=true;
  sleep(500);
  Form1.Image1.Visible:=false;
  sleep(500);
end;


Blackheart666 - Fr 06.01.06 20:52

Probiers mal So.

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Visible:= not Image1.Visible;
end;


Born-to-Frag - Fr 06.01.06 20:54
Titel: Re: Image blinken lassen
user profile iconboozzz hat folgendes geschrieben:
Hi,
im folgenden möchte ich Image1 blinken lassen (An-Aus-An-Aus...). Kann mir jemand sagen, wieso das nicht funktioniert?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Image1.Visible:=false;
  sleep(500);
  Form1.Image1.Visible:=true;
  sleep(500);
  Form1.Image1.Visible:=false;
  sleep(500);
  Form1.Image1.Visible:=true;
  sleep(500);
  Form1.Image1.Visible:=false;
  sleep(500);
end;


WAS funktioniert nicht? Es sollte eigendlich funktionieren, obwohl es in einem Timer wesentlich schöner währe :?

greetz


boozzz - Sa 07.01.06 00:58

Zitat:
WAS funktioniert nicht? Es sollte eigendlich funktionieren, obwohl es in einem Timer wesentlich schöner währe
Es tut sich nichts, wenn ich auf den Button klicke, nur dass nach ca. 2 Sekunden das Image verschwindet. Blinken tut da nichts.

Blackheart's Möglichkeit funktioniert leider auch nicht. :cry:

Wie könnte ich das mit einem Timer realisieren? :roll: (Bin noch Anfänger in Delphi)


Born-to-Frag - Sa 07.01.06 01:15

Mach mal vor jedem Sleep ein Repaint; ;)

greetz


EDIT: Und warum hast du was gegen Timer? Ist doch wesentlich eleganter und während dem blinken schläft das Programm nicht..

EDIT2: Frage überlesen :oops:


Calyptus - Sa 07.01.06 01:38


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if Image1.Visible = true then
  Image1.Visible := false
 else
  Image1.Visible := true;
end;


Die Geschindigkeit kannst du in Timer1.Interval festlegen (in ms)


Born-to-Frag - Sa 07.01.06 03:49

user profile iconCalyptus hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if Image1.Visible = true then
  Image1.Visible := false
 else
  Image1.Visible := true;
end;


Die Geschindigkeit kannst du in Timer1.Interval festlegen (in ms)


Mhhh Calyptus.. das geht wohl noch eleganter:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Image1.Visible := not Image1.Visible;
end;


;)

die Alternative zu Sleep.

greetz
-B2F


Blackheart666 - Sa 07.01.06 10:46


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
  Form1: TForm1;
  Zaehler:Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(Zaehler); {Mitzählen}
  Timer1.Interval:=500;{Intervall 0,5 sec.}
  if Zaehler=11 then Timer1.Enabled:=false; {5 Mal Blinken lassen dann aus}
  Image1.Visible := not Image1.Visible;
end;


LH_Freak - So 08.01.06 01:43

ich würde da lieber

{Zeile 17:} if Zaehler>11 then Timer1.Enabled:=false; {5 Mal Blinken lassen dann aus}

hinmachen


Blackheart666 - So 08.01.06 01:48

Ist aber nicht nötig weil 11 höchstwarscheinlich kommt (wenn nichts schiefgeht...)


LH_Freak - So 08.01.06 02:03

sicher ist sicher :D


boozzz - So 08.01.06 17:29

bin gerade beim rumprobieren.
Was soll die Fehlermeldung:
"Datei.pas(407): Undefinierter Bezeichner: 'Repaint'" ??

Repaint ist doch ein Delphi-Befehl, oder? Oder muss ich da wat deklarieren?


Born-to-Frag - So 08.01.06 17:55

user profile iconboozzz hat folgendes geschrieben:
bin gerade beim rumprobieren.
Was soll die Fehlermeldung:
"Datei.pas(407): Undefinierter Bezeichner: 'Repaint'" ??

Repaint ist doch ein Delphi-Befehl, oder? Oder muss ich da wat deklarieren?


Zeig mal ein bisschen mehr Code ;)


0xCC - So 08.01.06 18:03

tu einfach zum sleep ein application.processmessages


boozzz - Mi 11.01.06 20:08

Die Fehlermeldung beim compilieren kommt leider trotzdem.


0xCC - Mi 11.01.06 20:38

das repaint lass weg


Mister X-Ray - Do 12.01.06 16:43

du hast hoffentlich


Delphi-Quelltext
1:
Image.Repaint;                    


und nicht nur


Delphi-Quelltext
1:
Repaint;                    


oder?

Gruß
Mister X-Ray


Born-to-Frag - Do 12.01.06 17:40

user profile iconMister X-Ray hat folgendes geschrieben:
du hast hoffentlich


Delphi-Quelltext
1:
Image.Repaint;                    


und nicht nur


Delphi-Quelltext
1:
Repaint;                    


oder?

Gruß
Mister X-Ray


Schwachsinn -.- Repaint allein geht auch, das ist dann nähmlich wie FormX.Repaint und das wird genauso funktieren, da dann alles auf der Form repainted wird ;)

Aber wenn die Fehlermeldung "Unbekannter Bezeichner 'Repaint'" auch kommt wenn du Repaint; weglässt, stimmt da was nicht :lol:

greetz


Born-to-Frag - Do 12.01.06 17:45

Also ich weiß nicht was für ein RIESIGES Brett du vorm Kopf hast, aber hier noch mal so wie du es machen sollst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
image1.Visible := not image1.Visible;
repaint;
sleep(500);
image1.Visible := not image1.Visible;
repaint;
sleep(500);
image1.Visible := not image1.Visible;
repaint;
sleep(500);


Und damit du es auch ganz sicher schaffst, hier mal ein Projekt zum testen

greetz

EDIT: Und noch mal als Timer ein Projekt -.- (wesendlich besser, da kann man in der zeit auch noch was machen am prog und es friert nicht ein ;) )

Jetzt sollte es wirklich klar sein, oder?


EDIT2: Du kannst natürlich auch immer statt not auch True bzw. False benutzen, im Timer ist es aber einfacher so, außer du machst es so wie es weiter oben steht:


Delphi-Quelltext
1:
2:
3:
if Timer1.Enabled = True then
  Timer1.Enabled := False
else Timer1.Enabled := True;


Das war jetzt aber ausführlich genug..


Aya - Do 12.01.06 20:49

Hi,

nur um nochmal darauf zurückzukommen warum es mit Sleep nicht geht... ;)
Du gibst dem programm keine chance irgendwo neue Messages zu verarbeiten.. daher pack einfach vor jedes sleep ein Application.ProcessMessages; und schon sollte es gehen (auch ohne repaint)

Au'revoir,
Aya


Born-to-Frag - Do 12.01.06 21:51

user profile iconAya hat folgendes geschrieben:
Hi,

nur um nochmal darauf zurückzukommen warum es mit Sleep nicht geht... ;)
Du gibst dem programm keine chance irgendwo neue Messages zu verarbeiten.. daher pack einfach vor jedes sleep ein Application.ProcessMessages; und schon sollte es gehen (auch ohne repaint)

Au'revoir,
Aya


Hast du dir den Thread wenigstens 10% durchgelesen? :shock:

Er hats anscheinend schon mit beidem probiert und Application.ProcessMessages wurde schon erwähnt :shock:
Aber irgendwie versteht er es nicht.. :rofl:

Ich würde Repaint vor ProcessMessages vorziehen..

greetz


Blackheart666 - Do 12.01.06 21:57

Dann schieb Ich noch einen nach...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Image1.Visible:=false;
  sleep(500);
  Refresh;
  Form1.Image1.Visible:=true;
  sleep(500);
  Refresh;
  Form1.Image1.Visible:=false;
  sleep(500);
  Refresh;
  Form1.Image1.Visible:=true;
  sleep(500);
  Refresh;
  Form1.Image1.Visible:=false;
  sleep(500);
end;


Born-to-Frag - Do 12.01.06 23:00

:rofl: Wenigstens was neues ;)

EDIT: Sollte das Refresh nicht VOR dem Sleep :gruebel: ?