Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Panel zum blinken durch Timer bekommen


chriss1988 - Do 08.12.05 10:32
Titel: Panel zum blinken durch Timer bekommen
als erstes ma guten morgen an ale

wie ihr aus der überschrift bestimmt schon gelesen habt möchte ich es hinbekommen das mein panel blink :roll: ,da er immoment nur nach links läuft und mir das ziemlich öde ist :eyecrazy: .

ich hab mal ein teil meines codes kopiert könnt ihr mir bei der sache ma bitte helfen, da in der hilfe von delphi5 leider net mehr drin steht.


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
Timer1.Interval := 100;
  if panel1<> nil then
    panel1.Left := panel1.Left + 1;


naturlich soll der panel nur ne bestimmte zeit blinken und dan aufhörn z.B (5 ma blinken)
also brauch ich da auch en bissl hilfe

schon ma danke für jede antwort

mfg.
diddi


Moderiert von user profile iconGausi: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 08.12.2005 um 10:29


azubi_20 - Do 08.12.05 10:47

Rezept zum blinken lassen :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
- variable zähler mit 0 initialisieren
- in den timer einbauen :
  - zähler = zähler +1
  - in den timer ne bedingung :
         - wenn panel.farbe = rot  dann
                panel.farbe = grün sonst
                panel.farbe = rot
  - und noch ne bedingung :
         - wenn zähler = 10 dann timer = aus



und dann musst du nor noch den timer starten und dein panel blinkt lustig in rot und grün


chriss1988 - Do 08.12.05 10:52

aha und nun bitte auf deutsch ich bin neu im programmieren


azubi_20 - Do 08.12.05 11:00

user profile iconchriss1988 hat folgendes geschrieben:
aha und nun bitte auf deutsch ich bin neu im programmieren


meiner Meinung ist mein Beitrag in Deutsch :?

was verstehst du denn nicht ?


chriss1988 - Do 08.12.05 11:04

wenn ich ehrlich bin ich versteh nur bahnhof


Blackheart666 - Do 08.12.05 11:04


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
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);
  Timer1.Interval:=1000;
  if Zaehler=1 then Label1.Color:=clGreen;
  if Zaehler=2 then Label1.Color:=clYellow;
  if Zaehler=3 then Label1.Color:=clRed;
  if Zaehler=4 then Label1.Color:=clBtnFace;
  if Zaehler=5 then Zaehler:=0{Hab Ich Vergessen Zaehler zurücksetzen sonst gehts nur 1X}
  if Zaehler=5 then Timer1.Enabled:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled:=False;
end;

end.


chriss1988 - Do 08.12.05 11:08

user profile iconBlackheart666 hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
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);
  Timer1.Interval:=1000;
  if Zaehler=1 then Label1.Color:=clGreen;
  if Zaehler=2 then Label1.Color:=clYellow;
  if Zaehler=3 then Label1.Color:=clRed;
  if Zaehler=4 then Label1.Color:=clBtnFace;
  if Zaehler=5 then Timer1.Enabled:=False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled:=False;
end;

end.


aha das formcreat bekomm ich bei ereignisse bei der form1


Blackheart666 - Do 08.12.05 11:13

Den Timer Interval und das False im Create hab Ich jetzt nur der Übersicht halber gesetzt, das kannst Du auch über den OB tun.


chriss1988 - Do 08.12.05 12:17

ok danke das hab ich jetzt nun öchte ich das das nur kommt wenn ich
kein radiobutton anklick


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
//Hauptfunktion
 procedure TForm2.BitBtn1Click(Sender: TObject);
 begin

  Tauschgeld:=strtofloat(edit1.text);

 If radiobutton1.checked then
  Betrag:=Tauschgeld/Dollar;

 If radiobutton2.checked then
  Betrag:=Tauschgeld/Kronen;

 If radiobutton3.checked then
  Betrag:=Tauschgeld/1000;


//wenn das passirt soll er dan das mit dem timer bringen
 if (not radioButton1.checked) and             
    (not radioButton2.checked) and
    (not radioButton3.checked) then
    betrag:=0;
    panel1.caption:='error';
    panel1.visible:=true;
    Timer1.Enabled:=True;

  edit2.text:=floattostrf(Betrag,fffixed,9,2);

 end;

 procedure TForm2.Timer1Timer(Sender: TObject);
 begin
    Inc(Zaehler);
  Timer1.Interval:=1000;
 if Zaehler=1 then panel1.Color:=clGreen;
 if Zaehler=2 then panel1.Color:=clYellow;
 if Zaehler=3 then panel1.Color:=clRed;
 if Zaehler=4 then panel1.Color:=clBlue;
 if Zaehler=5 then panel1.Color:=clBtnFace;
 if Zaehler=6 then Timer1.Enabled:=False;

 end;

 procedure TForm2.FormCreate(Sender: TObject);
 begin
  Timer1.Enabled:=False;
 end;



also wie mach das nun weil immoment bringt er mir immer die fehlermeldung.


petergensfeld - Do 08.12.05 15:12

Hallo,

ich würde Blackhearts Code noch dahin ändern, dass die Laufvariable nicht global, sondern statisch innerhalb der Routine definiert wird. Das Interval braucht nur einmal im FormCreate gesetzt zu werden (oder eben im OI). Die Timer-Routine könnte dann so aussehen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Timer1Timer(Sender: TObject);
const Zaehler: Integer=0;
begin
  inc(Zaehler);
  case Zaehler of
    1: Label1.Color:=clGreen;
    2: Label1.Color:=clYellow;
    3: Label1.Color:=clRed;
    4: Label1.Color:=clBtnFace;
    else begin
      Timer1.Enabled:=False;
      Zaehler:=0;  // sonst funktioniert es nur beim 1. Mal
    end;
  end;    
end;


Du solltest mal ein begin...end um Dein If setzen!

Gruß Dirk


Blackheart666 - Do 08.12.05 15:39

Ich Denke mal man sollte zu seinem Problem, immer dazu sagen was habe Ich denn überhaupt vor ! (Die Idee wird schon keiner Klauen)
"Weil" - aus dem einem Problem ergibt sich das andere, und wenn man weiss worauf der Fragesteller hinauswill (was manchmal nicht so einfach ist) lässt sich das eigentliche Problem doch schon ziehmlich genau eingrenzen und eventuell auch ziehmlich einfach beantworten.
(Sonst ist meistens alles geraten, der Thread wird lang und das Ergebnis ist naja...)
Ich muss dazu sagen das es mir auch schon öfter so ging, das Ich zwar mein Problem kannte aber es mir ziehmlich schwer gefallen ist es auch irgendwie rüberzubringen.
Die ganze Sache mit Case usw. ist alles richtig, aber man weiss eben nie genau wie weit ist der Fragesteller !
Ich denke drei Codezeilen zum Anfang sind nicht viel mehr Arbeit, aber eben zum Anfang besser zu verstehen.


Ivo@CoMRoK - Fr 09.12.05 22:05

Also ich finde das ist jetzt irgendwie nicht eindeutig:
Willst su dass das Panel immerwieder mal blinkt und dann wieder nicht?
Dann würd ich das so machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  procedure Timer1.Timer(Sender: TObject)
  begin
  Timer1.Interval := 100;
  Label1.Color:= clGreen;
  sleep(10);
  ...//hier machst du die anderen Farben in der selben weise
  end;


Oder willst du auf eine Aktion etwas ausführen?
Dann so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure Button1.Click(Sender: TObject)
  begin
  Label1.Color := clGreen;
  sleep(10);
  ...//und wieder die anderen Farben
  end;


mfg Ivo