Toon posts:

[Delphi] timer in function

Pagina: 1
Acties:
  • 170 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een probleempje met delphi. ik wil een functie maken met daarin een timer object.
code:
1
2
3
4
5
6
7
function MoveLeft(i: integer):integer;
begin
//HIER WIL EEN TIMER HEBBEN
procudure Timer blabal
begin
end;
end;

maar het als ik dus een timer toe voeg uit het delphi menutje krijg in een fout melding dat hij een statement verwacht. kan 1 van jullie mij wat op de goeie richting helpen :?

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 16-09 15:41

Tim Schuhmacher

abasios

Waarom wil je daar een timer?

  • Sponz
  • Registratie: Juni 2001
  • Niet online

Sponz

nul nest parfait saif moi

Op dinsdag 04 december 2001 16:56 schreef Gila het volgende:
Ik heb een probleempje met delphi. ik wil een functie maken met daarin een timer object.
code:
1
2
3
4
5
6
7
function MoveLeft(i: integer):integer;
begin
//HIER WIL EEN TIMER HEBBEN
procudure Timer blabal
begin
end;
end;

maar het als ik dus een timer toe voeg uit het delphi menutje krijg in een fout melding dat hij een statement verwacht. kan 1 van jullie mij wat op de goeie richting helpen :?
Een timer routine kan niet genest binnnen een andere procedure bestaan. Pleur een timer op je form, dubbel clik op 'ontimer' en er wordt een procedure voor je aangemaakt.

Verwijderd

Topicstarter
ja maar dat wil ik niet... ik wil dat de functie met een bepaald parameter de timer start

  • Sponz
  • Registratie: Juni 2001
  • Niet online

Sponz

nul nest parfait saif moi

Op dinsdag 04 december 2001 17:05 schreef Gila het volgende:
ja maar dat wil ik niet... ik wil dat de functie met een bepaald parameter de timer start
Maak dan gebruik van het 'tag' veld wat elk component heeft of maak gebruik van een globale variabele.

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 16-09 15:41

Tim Schuhmacher

abasios

Timer op je form droppen en
code:
1
2
3
4
5
function MoveLeft(i: integer):integer;
begin
if i = BEPAALDEGETAL then timer1.enabled = true;
//rest code
end;

Gaat dit niet werken?

Verwijderd

Topicstarter
ik zal eens beter vertellen wat ik wil;)

MoveLeft() wordt gebruikt om een plaatje te verschuiven. deze moet afhankelijk van de waarde i zijn. maar nu moet dit niet te snel gaan. dus vandaar de timer. daarnaast is het zo dat er tussen 2 verschillende snelheden wordt gekozen. als ik een timer buiten de functie ga gebruiken wordt het naar mijn idee minder overzichtelijk.. vandaar

Verwijderd

Jij wilt gewoon een soort wacht inbouwen ?

Ik heb wel een stukje bruikbare code:
code:
1
2
3
4
5
6
7
8
procedure Wacht(Milliseconden : Integer);
var
  Startwaarde : LongInt;
begin
  Startwaarde := GetTickCount;
  while ((GetTickCount - Startwaarde) <= (Milliseconden)) do
  Application.ProcessMessages;
end;

Maar ik vind het nog niet precies duidelijk wat je nou zoekt....

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Sleep kun je gebruiken, maar dan blockeerd je applicatie wel tijdens die sleep.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Topicstarter
Op woensdag 05 december 2001 01:14 schreef Maar ik vind het nog niet precies duidelijk wat je nou zoekt....
er is een plaatje dat van a naar b moet gaan, en ook van b naar c, a naar c enz.

Nu moet dit synchroon lopen met een trein, deze heeft een bepaalde snelheid. deze snelheid moet dus ingevoerd worden in de timer. Daar naast is i er verantwoordelijk om eerst zoveel punten naar rechts of links te gaan en daarna omhoog. Dus hij moet 2 variabelen mee krijgen. ik kan wel 2 timer procuder maken. maar die kan ik dan niet "aanroepen" zoals dat ik een functie roep. en dat wil ik nu juist.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:04

Creepy

Tactical Espionage Splatterer

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure blaat;
var timer1: TTimer;
begin
  procedure ontimer(sender as tobject);
  begin
     // hiero wat er moet gebeuren als de tijd is bereikt
  end;
  timer1:=TTimer.create(nil);
  timer1.enabled:=false; // create zet em op true
  timer1.ontimer:=ontimer;
  timer1.interval:=3000; // 3 sec ofzo

  // bla die bla nog een hoop functies die je wil

  timer1.enabled:=true;

  // hier nog wat code
  timer1.free; // en de timer opschonen natuurlijk
end;

eehh. zoiets? Niet getest, dus geen idee of het werkt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Op woensdag 05 december 2001 18:29 schreef Creepy het volgende:
eehh. zoiets? Niet getest, dus geen idee of het werkt.
Werkt gegrandeerd niet... :)
Allereerst moet die ontimer procedure wel buiten de body van die blaat procedure staan (de eerste 'begin' moet dus een regel of 4 omlaag), maar dan nog: het OnTimer event verwacht een procedure of Object (zeg maar een method), en dat is 'ie hier niet.

O ja, je doet ook nog een hoop met timer1, terwijl 't ding gecreate is als timer. Maar da's een detail. :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:04

Creepy

Tactical Espionage Splatterer

hmm.. ach ja... dat hou je toch..

Onderstaande code is WEL getest... niet netjes, maar het werkt wel!
code:
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
type TNutteloos = class(TObject)
     public
         procedure ontimer(sender: TObject);
     end;

procedure tnutteloos.ontimer(sender: TObject);
begin
     showmessage('blaat');
     (sender as ttimer).enabled:=false;
     (sender as ttimer).free;
end;

procedure blaaaahaaat;
var timer1: ttimer;
    nutteloos: TNutteloos;
begin
     nutteloos:=tnutteloos.create;
     timer1:=ttimer.create(nil);
     timer1.enabled:=false;
     timer1.OnTimer:=nutteloos.ontimer;
     timer1.Interval:=3000;
     timer1.enabled:=true;
     nutteloos.free; // .free wacht totdat nutteloos niks meer te doen heeft...
               // das dus NA de timer1.ontime :)
end;

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
dit ga ik eens proberen dankje wel..:)

Verwijderd

Vergeet niet dat de nauwkeurigheid van timer niet al te groot is.

een timer zal dus niet precies bv. iedere seconde een functie aanroepen.

misschien merk je dit niet op je pentium heleboel, maar waarneer je proggie draait op trage bak, zal je het wel merken.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:04

Creepy

Tactical Espionage Splatterer

Op vrijdag 07 december 2001 02:11 schreef -Confusion- het volgende:
Vergeet niet dat de nauwkeurigheid van timer niet al te groot is.

een timer zal dus niet precies bv. iedere seconde een functie aanroepen.

misschien merk je dit niet op je pentium heleboel, maar waarneer je proggie draait op trage bak, zal je het wel merken.
Dat probleem heb je altijd met een Preemptive Multitasking OS (zoals Windows is). De wachttijd die je opgeeft is een minimale wachttijd. IN 9x/me is de wachttijd minimaal 55ms, en onder NT/2000/XP 10ms (eeh.. dacht ik hehe). Als je zelf een Highresolution timer gebruikt (zoals hierboven ook een oplossing is gegeven) kan je veel nauwkeuriger timen, dit kost echter ook meer processor usage.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1