AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ein ganz merkwürdiges Problem... hab nicht mal den Ursprung!
Thema durchsuchen
Ansicht
Themen-Optionen

Ein ganz merkwürdiges Problem... hab nicht mal den Ursprung!

Ein Thema von Lefko · begonnen am 11. Nov 2003 · letzter Beitrag vom 25. Nov 2003
Antwort Antwort
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#1

Ein ganz merkwürdiges Problem... hab nicht mal den Ursprung!

  Alt 11. Nov 2003, 16:29
Hallo Freunde ,

ich hab ein kleines Programm geschrieben (Snake um genau zu sein ) mit dem ich ein Problem ungeahnter Herkunft habe:

Die App wird gestartet, und es läuft ein Timer, der jede sekunde den integer in einem label um 1 vermindert (also ein zähler) so: 3 , 2 , 1 LOS
wenn der Spieler verloren hat, wird das Programm beendet und per ShellExecute erneut gestartet.

HÄUFIG kommt es nun aber vor, dass das Label folgende Reihenfolge zeigt: 3, 1, -1, -2,-3,...
und dadurch dann das Programm durcheinander kommt, timer falsch gestartet werden und tasten nicht reagieren!

HÄÄÄ??

ich hab dann festgestellt, dass dieses Mysterium seltener auftritt, wenn ich den Speedbutton zum starten (DANN läuft der zähler) nicht per Enter sondern mit der Maus betätige.... warum auch immer...

Hat irgendjemand IRGENDEINE Idee, woher so n quatsch kommen könnte?

hier ist der text, der ausgeführt wird:

Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
begin
StartZaehler := 3;

//Feld anpassen
Form1.width := round(Form1.width div 10) * 10;
Form1.height := round(Form1.height div 10) * 10;
Image1.width := Form1.width;
Image1.Height := Form1.Height - 40;
Image1.Left := 0;
Image1.Top := 40;

//StartFeld generieren
CreateStartArray;
CreateStartSnake;
DrawArray(Spielfeld, Image1, true{schlange}, true{frucht}, true{wand}, true{nix});
ZeichneAugen;
end;

// und der Timer, der den StartZaehler vermindert:

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Speedbutton1.visible := true;
Speedbutton1.caption := inttostr(StartZaehler);
dec(StartZaehler);

if StartZaehler = -1 then begin
                          image1.Canvas.pen.color := SchlangenFarbe;
                          image1.Canvas.brush.Color := SchlangenFarbe;
                          speedbutton1.visible := false;
                          timer1.enabled := true;
                          timer2.Enabled := false;
                          SetCursorPos(Form1.Left + Form1.width + 10, Form1.Top);
                          CreateFruit;
                          end;
timer2.Interval := 1000;
end;
MfG Lefko.
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 11. Nov 2003, 16:34
1.
das timer2.interval würde ich vor dem timer2.enabled = true schreiben,
warum darein ?

2.
schreibe mal nicht "=-1" sonder "<=-1"
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 11. Nov 2003, 16:39
Zitat von MrKnogge:
das timer2.interval würde ich vor dem timer2.enabled = true schreiben,
warum darein ?
weil der timer2 nicht erst 1 sekunde nach klicken des speedbuttons ausgeführt werden soll, sondern sofort. danach aber dann immer nur noch im sekundentakt zu anfang ist timer2.interval 1.


Zitat von MrKnogge:
schreibe mal nicht "=-1" sonder "<=-1"
Das ändert aber doch nix an dieser merkwürdigen Reihenfolge? 3 , 1 da fehlt ja auch die 2....

MfG Lefko.
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 11. Nov 2003, 17:34
Wenn der Timer2 direkt nach dem drücken aktiv werden soll, nehme ich mal an, das der interval am anfang 1 ist oders so. Damit er keine zahlen überspringt, musst du also interval := 1000 ganz an den Anfang von Timer2Timer setzen.
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 11. Nov 2003, 17:42
dann müsste es funktionieren, schreib mal statt "dec" "Startzaehler := Startzeahler-1"

PS:
intervall auf 1 bringt nichts, das minimum was ausgeführt werden kann ist 50.
Aber vielleicht braucht dein Rechner für den Timer-Ablauf länger als 50ms ?
- Wobei ich mir das nicht vorstellen kann (probiers aber einfach mal)
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 11. Nov 2003, 18:58
Moin Lefko,

schreib' mal in das Timer Event als erstes Timer.Enabled := false, und setz' das am Ende wieder auf true, damit sich nicht mehrere Aufrufe des Events gegenseitig beeinflussen, falls der Aufruf erfolgt, während das Programm die Event Prozedur noch abarbeitet.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 25. Nov 2003, 00:10
Hab eure Ratschläge beherzigt,
aber an dem Auftreten dieses Fehlers hat es nix geändert...
also manchmal ist die reihenfolge statt 3,2,1,LOS eben 3,1,-1,-2,-3,-4,etc...
merkwürdig ist dabei eben auch, dass keine (sonst funktionierenden) tasten mehr reagieren im spiel ausser ESC.
und wie schon gesagt, je öfter ich das Shellexecute mit dem Mauszeiger auslöse (übern button) desto seltener kommt der fehler; meistens eben wenn ich ENTER verwende...

koooooomisch..

MfG Lefko.
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#8

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 25. Nov 2003, 02:08
Wie wärs damit:

Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
timer2.Enabled := false;
timer2.Interval := 1000;

Speedbutton1.visible := true;
Speedbutton1.caption := inttostr(StartZaehler);
dec(StartZaehler);

if StartZaehler = -1 then begin
                          image1.Canvas.pen.color := SchlangenFarbe;
                          image1.Canvas.brush.Color := SchlangenFarbe;
                          speedbutton1.visible := false;
                          timer1.enabled := true;
                          SetCursorPos(Form1.Left + Form1.width + 10, Form1.Top);
                          CreateFruit;
                          end
                     else timer2.Enabled := true;
end;

// ...

procedure TForm1.Button1Click(Sender: TObject);
begin
  timer2.Interval := 50;
  timer2.Enabled := true;
end;
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 25. Nov 2003, 06:38
Lass doch den Kaese mit der Interval-Manipulation.
Delphi-Quellcode:
  Timer2.Interval := 1000;
  Timer2Timer(Self);
  Timer2.Enabled := True;
Niemand verbietet dir den Timer-Event selbst aufzurufen.
  Mit Zitat antworten Zitat
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: Ein ganz merkwürdiges Problem... hab nicht mal den Urspr

  Alt 25. Nov 2003, 18:50
@Marquart: Oke, hab ich mal gemacht! Ist sicher sinnvoll, aber ob der Fehler auftritt weiss ich noch nicht, hatte noch keine Zeit, es öfter zu probieren.

MfG Lefko.
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.
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