PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EINFACHES Wait in Delphi



Miaaa
25.03.2004, 02:42
Guten Tach.
Wie wir ja alle wissen (odda auch nicht :) ), bin ich der absolute N00b bei Delphi und möchte deshalb auch gleich eine absolute N00b-Frage vom Stapel lassen: Wie kann ich [in Delphi] ein EINFACHES Wait machen (sowas wie Wait(stunden,minuten,sekunden); fertig)?
Ich weiß, is bestimmt ganz einfach, aber weder auf http://www.grundlagen.delphi-source.de/pascal/syntax.shtml noch auf http://home.pages.at/dbr-software/delphi/ habe ich irgendetwas zu dem Thema gefunden, was weniger als zwei Bildschirmseiten lang war und noch dazu funktionierte. (Meine Ansprüche sind aber auch verflixt hoch :) )
Danke schon mal im voraus!

SmokingFish
25.03.2004, 03:37
wie wärs mit der sleep api?

Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)

wie du das in delphi aufrufst wirste ja sicher wissen.

Ineluki
25.03.2004, 10:50
hm .. dkie frage ist gar nicht so trivial ...

Willst du, das dein programm in der zeit weiterarbeitet, und etwas anderes machen kann, oder willst du es generell anhalten ?

fuer den ersteren Fall koenntest du einen Timer vom Typ TTimer verwenden und den entsprechenden Code im Event plazieren ..

ist letzteres der Fall koenntest du das in etwa so machen



var time:Longint;
begin
...
time:=GetTickCount;
while (GetTickCount-time < wartezeit_in_millisekunden) do
application.ProcessMessages; //sonst friert das Programm ein
...
end;

raiel
25.03.2004, 15:04
Ich darf mal kurz die Delphi-hilfe zitieren (achtung english!)



Sleep
Unit: IdGlobal
------------------------------------
Suspends the current thread for the specified number of milliseconds.


procedure Sleep(ATime: cardinal);

Parameters

ATime: cardinal

The number of milliseconds to sleep.


Description

Sleep is a procedure used to suspend the current thread of execution
for the number of milliseconds specified in ATime.
While the current thread is suspended, control passes to other
processes with an equal or higher priority.
Sleep encapsulates the platform-specific procedures or functions used
to suspend the current thread of execution. For the Windows platform,
the procedure used is Windows.Sleep. On the Linux platform, Sleep
tries to select a non-existent socket handle for the specified number
of milliseconds.

Miaaa
26.03.2004, 21:21
Danke!
Das mit den Timern hab' ich jetz versucht...
Und es funzt!!! :D (Sleep und Delay gingen nicht, weil Gleichzeitig auf eine Eingabe gewartet werden sollte, aber nach (z.B.) 3 Sekunden nicht mehr gewartet werden sollte.)
Inzwischen hab' ich so schon 7 Level fertiggeproggt! (Und sage und schreibe 63 Timer verwendet :) )

Miaaa
31.03.2004, 02:51
Guten Tach.
Tschuldigung für den Doppelpost,aber ich wollte keinen neuen Thread aufmachen.
Also, ich habe zwei neue Fragen:
Erstens, wie kann ich einen Strich ziehen? (Falls jemand eine genauere Erklärung meines Problems möchte - kann er haben! :) Ich möchte den Klassiker "Missile Command" nachbauen [Den kennt man vielleicht.] und brauche für die Schüsse immer Verbindungslinien, die am Ausgangspunkt des Schusses anfangen und dann langsam 'wachsen', bis sie am Endpunkt des Schusses angekommen sind.)
Zweites Problem: Wie macht man es, dass man zwei Forms anzeigt (OK, das kann selbt ich ja noch... :D ) und dann BEIDE Formulare aktiviert sind. (Also nicht so, wie bei einem normalen Form2.ShowModal;-Befehl, bei dem, wenn Form2 nicht geclosed wurde, bei einem Klick auf Form1 nur ein Ton 'erklingt'.)

(PS: In meinem Minigame "Two Souls" haben inzwischen 124 Timer Verwendung gefunden und in "Space Invaders" 30 WIRKLICH LANGE Timer... :D )

Freezy
31.03.2004, 02:57
Ich könnte dir ja jetzt die Mathematische Funktion für eine Linie geben... aber ich hab keine... das überlass ich mal den lieben Onkel Luki^^

Wenn du mir sagst welche Grafik API / Wrapper du benutzt geht das aber vieleicht auch einfacher über ne ferige Funktion.

Probier mal "FormXX.Show;". Damit bleibt das ausgangsformular zwar nicht Aktiviert, aber es bleibt für sämtliche Messages Verfügbar (z.b. einen Klick drauf oder ähnliches). Nur Tastatureingaben werden nicht mehr genommen (alles IMHO).

Empfehlen kann ich noch www.DelphiSource.de ... da findet man viele lösungen zu alltagsproblemen mit Delphi.. hilft mir auch oft :)

Miaaa
04.04.2004, 20:52
Guten Tach.
Das mit 'FormXX.Show' funzt wunderbar :D, aber ich habe (mal wieder) ein neues Problem. (Das mit dem Linienziehen aber bittä nicht vergessen.)
Kann miaaa irgendjemand sagen, wo ich ein Tool herbekomme, mit welchem man *.3DS-Dateien herstellen kann? (Ich habe miaaa jetzt nämlich TrueVision 3D 'runtergeladen und brauche noch einige 3D-Figuren.)
Wie immer-schon mal Thanke im Voraus!

Ineluki
05.04.2004, 07:14
wie freezy schon in seinem post sagte, koennen wir dir bei deinem lienienproblem nur helfen, wenn du uns ein paar mehr informationen gibst

Miaaa
05.04.2004, 14:02
Ich würde euch ja gerne mehr Informationen geben, aber ich als N00b weiß nu wirklich gar nicht was für Informationen man dafür benötigt.:confused:
Aber ich sag mal alles was ich weiß:
1. Das ganze Minigame ist Image-basiert. Will heißen: Alle Grafiken werden in Images angezeigt, soll sich etwas bewegen, bewegt sich das Image.
2. Nach einer bestimmten Zeit (Timer) wird von einem beliebigen Punkt (Random) oben am Formrand ein Strich gezogen.
3. Dieser Strich bewegt sich mehr oder weniger langsam (kommt auf den Schwierigkeitsgrad an) auf den unteren Rand zu.
4. Währenddesen werden (durch andere Timer vom ersten Timer ausgelöste) weitere Strich von oben herabfallen. (Nach und nach Rndoms, ob sie sich teilen)
5. Wenn ein Strichende auf einer bestimmten Höhe ist, (ein sich selbst immmer wieder aufrufender Timer überwacht das - wie ich finde eine gute Alternative zu Parallel Processes vom guten alten RPGMaker) dann wird abgefragt wo genau das Strichende 'einschlägt' und entsprechend wird erst BottleAnimation aufgerufen (procedure, die ein ExplosionsImage für einige Sekunden über den Einschlagsort legt) und dann zum Beipiel das Visible für das Image mit einer Stadt auf false gestellt und Stadt (Integer) := Stadt - 1; gesetzt.
6. Dann kommt wieder eine Abfrage, die (wenn Stadt gleich null ist) die HighscoreProcedure aktiviert.

Wahrscheilich sind dies nicht die Informationen die ihr braucht, aber von Wrappern und so was versteh ich (leider :( ) nichts.