Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi delphi ist einfach zu schnell und überspringt teilweise code (https://www.delphipraxis.net/2323-delphi-ist-einfach-zu-schnell-und-ueberspringt-teilweise-code.html)

Helmut 17. Jan 2003 22:32


delphi ist einfach zu schnell und überspringt teilweise code
 
Hio,

vielleicht kennt ihr das Problem. Delphi scheint bei manchen prozeduren einfach nicht zu warten bis diese fertig ausgeführt worden sind, sondern geht einfach weiter im code.

Ein Beispiel ist zum beispiel diese zeile:
Delphi-Quellcode:
begin
image1.picture.loadfromfile('1.bmp');
showmessage('Bild noch nicht sichtbar!');
end;
Hier würde, wenn die message erscheint noch kein bild geladen sein.
Jedanfalls hängen damit viele probleme in meinem Programm zusammen. je langsamer der PC, desto öfter treten fehlermeldungen auf.
Ich kanns nur schlecht beschreiben, weil ich es selber nicht richtig verstehe.

Gibt es eine möglichkeit, timer zu verwenden um das programm nur kurz anzuhalten?
Vielleicht in der art:
timer1.enabled;
if timer1.notify then mache weiter...

Der delay-befehl der hier im forum zu finden ist nützt mir ja nicht viel, da er ja alles komplett anhält. Nebenbei scheint er auch nicht zu funktionieren. (delphi meckert das longint irgendwie nicht kompatibel ist...). Ausserdem würde delay mein programm bestimmt noch instabiler machen... (?).

Wenn jemand ne idee hat wie man das mit nem timer (oder was anderem) machen könnte wär ich sehr dankbar.

mfg
Helmut[/code]

Christian Seehase 17. Jan 2003 22:36

Moin Helmut,

also nachvollziehen kann ich Dein Problem leider nicht, allerdings sollte der Delay aus der Library einwandfrei funktionieren ohne das Programm anzuhalten. Angehalten würde es nur, wenn Du Sleep verwendest.

sakura 17. Jan 2003 22:40

Re: delphi ist einfach zu schnell und überspringt teilweise
 
Die rote Zeile sollte Dein Problem lösen. Das Bild ist zwar schon geladen, jedoch wurde die Nachricht dass Bild darzustellen noch nicht verarbeitet. Ein Aufruf von Application.ProcessMessages; arbeitet die Nachrichtenschleife ab.
Code:
begin
image1.picture.loadfromfile('1.bmp');
[color=#ff0019]Application.ProcessMessages;[/color]
showmessage('Bild noch nicht sichtbar!');
end;
...:cat:...

Daniel B 17. Jan 2003 22:41

Hallo Helmut,

vielleicht bringt Dich Application. ProcessMessages weiter.
Ansonsten kannst Du anstatt mit Delay oder Sleep, mit GetTickCount arbeiten. Wobei ich Dein Problem nicht so richtig verstehe. Denn die Zeile werden eigentlich schon der reihe nach abgearbeitet.

Grüsse, Daniel :hi:

Helmut 17. Jan 2003 23:59

Hi,

ob ihrs glaubt oder nicht, application.ProcessMessages hilft!
Mein programm stürtzt nichtmehr ab.

Allerdings muss ich dazu sagen das es ohne das etwa alle 50 mal abstürtzte(bzw. einen fehler machte). Ich hab jetzt ca. 80 mal probiert und der fehler kam noch nicht (der fehler bringt das programm nicht zum abstürtzen, aber es macht etwas was es nicht soll...).

Der einzige nachteil bei dem befehl application.ProcessMessages scheint bei mir darin zu liegen, das wenn ich nach dem testen des spiels (compilieren) in delphi zurückkehre sind meine ganzen Forms mit weissen streifen überzogen.
Der befehl wird im programm ca. 20 mal in einer sekunde aufgerufen (nur eine sekunde lang :) ).
Vielleicht ist das etwas zuviel für windows...

Um nochmal auf den befhel delay zurückzukommen:

Ich erhalte ziemlich viel fehler beim kompilieren. ich hab schon verschiedene delay-varianten ausprobiert. bei dme delay aus dem forum hier
Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
  stop := gettickcount;
  application.processmessages;
  until (stop - start ) ›= msec;
end;
erhalte ich diese meldung:
Ungültiges Zeichen in Eingabedatei: '&' ($26)
an der stelle:
until (stop - start ) ›= msec;

:(

Daniel B 18. Jan 2003 00:14

Hallo Helmut,

Zitat:

Zitat von Helmut
erhalte ich diese meldung:
Ungültiges Zeichen in Eingabedatei: '&' ($26)
an der stelle:
until (stop - start ) ›= msec;

Logisch. Ist ja auch Falsch. Delphi ist kein Internet Browser. ;)

Sollte > heissen. Also grösser! bzw. "until (stop - start) >= msec;"

Grüsse, Daniel :hi:

Helmut 18. Jan 2003 08:47

ahh, super, und delay ist ja ein richtig schöner befehl :) (ich vermisse die alten pascal-zeiten :mrgreen: )

danke :)

Daniel B 18. Jan 2003 09:50

Hallo Helmut,

Zitat:

Zitat von Helmut
ahh, super, und delay ist ja ein richtig schöner befehl

<klugschei*>Naja, eigentlich eher eine schöne, selbsterstellte Prozedur.<klugschei**>

In Delphi gibt es Sleep(Zeit);.
Das Problem bei dem ist, das alle Threads des Programmes einfrieren und somit das ganze Programm im Prinzip steht.
Bei der Delay-Prozedur, läuft aber alles schön weiter wie es sich gehört.

Grüsse, Daniel :hi:

Hansa 18. Jan 2003 11:02

Hi,

Zitat:

Zitat von Helmut
Allerdings muss ich dazu sagen das es ohne das etwa alle 50 mal abstürtzte(bzw. einen fehler machte). Ich hab jetzt ca. 80 mal probiert und der fehler kam noch nicht (der fehler bringt das programm nicht zum abstürtzen, aber es macht etwas was es nicht soll...).

Du meinst doch mit "abstürzen" nicht etwa, daß der Compiler einen Fehler bringt ? Das würde vieles erklären. Ansonsten verstehe ich nicht, was Du da machst.

Gruß
Hansa

Christian Seehase 18. Jan 2003 15:15

Moin Daniel,

noch ein klein Wenig zu Sleep:

Sleep ist eine Funktion der Windows API aus der KERNEL32.DLL, ausserdem werden damit nicht alle Threads eines Prozesses angehalten, sondern nur der in dem die Funktion aufgerufen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz