Autor Beitrag
klezmor
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: Sa 26.03.05 14:31 
Kann mir mal jemand erklären wie die timerkomponente funktioniert, ich dachte der Timer führt in bestimmten, einstellbaren Intervallen einen von mir eingebenen Anweisungsblock durch doch das stimmt wohl nicht ganz oder?
Ich habe das in die Timerkomponente geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Timer1Timer(Sender: TObject);
var mittelpunktx,mittelpunkty:integer;
    i:integer;
begin


shape1.Brush.color:=clred;
mittelpunktx:=shape1.left+(shape1.width div 2);
mittelpunkty:=shape1.top+ (shape1.height div 2);
canvas.moveto(mittelpunktx,mittelpunkty);
canvas.lineto(mittelpunktx,shape1.top);
end;


Jetzt hatte ich eigentlich erwartet das die Linie und das rote shape geleichzeitig
erscheinen, stattdessen aber erscheint nach 1 sekunde das rotgefärbte shape und nach einer weitern die Linie wiese?
müssten nich erst alle anweisungen ausgeführt werden und dann wartet der timer eine Sekunde?
Danke im voraus.

Moderiert von user profile iconTino: Topic aus Multimedia / Spiele / Grafik verschoben am So 27.03.2005 um 21:44
Jailbird
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 127

Windows XP Pro SP2
Delphi 7 Professional
BeitragVerfasst: Sa 26.03.05 14:55 
probiers mal so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  mittelpunktx,mittelpunkty:integer;
  i:integer;
begin
  Timer1.Enabled := False;
  shape1.Brush.color:=clred;
  mittelpunktx:=shape1.left+(shape1.width div 2);
  mittelpunkty:=shape1.top+ (shape1.height div 2);
  canvas.moveto(mittelpunktx,mittelpunkty);
  canvas.lineto(mittelpunktx,shape1.top);
  Timer1.Enabled := True;
end;
klezmor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: Sa 26.03.05 15:02 
geht leider auch nicht, habe echt keinen blassen schimmer wieso der timer nicht alle anweisungen abarbeitet bevor er sein intervall durchzählt?
Oder normal ist es doch so?
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 26.03.05 15:10 
Das liegt daran, dass du auf das Canvas von Form1 zeichnest, und Shape liegt drüber. Wenn du Shape1.Repaint; vor dem Zeichnen der Linie ausführst, geht's. Aber: Du solltest ausserhalb des OnPaint-Ereignisses nie direkt auf das Form Canvas zeichnen! (Sonst ist das gezeichnete weg, sobald es von einem anderen Fenster überdeckt wird)
klezmor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: Sa 26.03.05 15:21 
Vielen Dank jetzt klappt es :D
klezmor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: Sa 26.03.05 16:23 
Nehmen wir mal an mein timer läuft und es tritt irgend ein ereignis, daraufhin soll mein timer der ja immer noch läuft zum anfang des anweisungsblock springen, also praktisch von vorne wieder anfangen weiß jemand wie das geht?
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 26.03.05 16:35 
Du meinst, wenn während der Sekunde einer auf einen Button klickt?

ausblenden Delphi-Quelltext
1:
2:
3:
begin
  Timer1Timer(Self);
end;

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 26.03.05 17:27 
Kennst du die for, repeat, while Schleifen?
klezmor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: So 27.03.05 17:12 
Ja klar es geht mir nicht um das eintreffen des ereignis, sondern darum, dass sobald das ereignis eintritt der Timer seinen Anweisungsblock von vorne wieder ausführt.
klezmor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 558


delphi 6 personal delphi 2005 personal
BeitragVerfasst: So 03.07.05 14:22 
Dass ich wenn ich etwas zeichnen will, dies ins onpaint ereignis schreiben muss, das ist mir mittlerweile klar, aber wie schaffe ich es, dass etwas gezeichnet wird, wenn ich z.B. einen Button drücke, dann muss ich den Anweisungsblock ja ins Buttonereignis schreiben und die anweisung steht nicht mehr im onpaint ereignis.
Dargor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 59

Win2k SP4, WinXP Pro SP1
D6 Pers
BeitragVerfasst: Mo 04.07.05 07:01 
Dann schreibst du in das OnClick-Ereignis des Buttons das, was GTA-Place gepostet hat - natürlich nur das Timer1Timer ohne Parameter.