AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi delphi ist einfach zu schnell und überspringt teilweise code
Thema durchsuchen
Ansicht
Themen-Optionen

delphi ist einfach zu schnell und überspringt teilweise code

Ein Thema von Helmut · begonnen am 17. Jan 2003 · letzter Beitrag vom 18. Jan 2003
Antwort Antwort
Seite 1 von 2  1 2      
Helmut

Registriert seit: 22. Nov 2002
64 Beiträge
 
#1

delphi ist einfach zu schnell und überspringt teilweise code

  Alt 17. Jan 2003, 22:32
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]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 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.
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
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: delphi ist einfach zu schnell und überspringt teilweise

  Alt 17. Jan 2003, 22:40
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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 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
  Mit Zitat antworten Zitat
Helmut

Registriert seit: 22. Nov 2002
64 Beiträge
 
#5
  Alt 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;

  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#6
  Alt 18. Jan 2003, 00:14
Hallo Helmut,

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
  Mit Zitat antworten Zitat
Helmut

Registriert seit: 22. Nov 2002
64 Beiträge
 
#7
  Alt 18. Jan 2003, 08:47
ahh, super, und delay ist ja ein richtig schöner befehl (ich vermisse die alten pascal-zeiten )

danke
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#8
  Alt 18. Jan 2003, 09:50
Hallo Helmut,

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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9
  Alt 18. Jan 2003, 11:02
Hi,

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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 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.
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
Antwort Antwort
Seite 1 von 2  1 2      


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 03:31 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