Autor Beitrag
Blobby
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.06.10 22:30 
Ich bin gerade dabei ein etwas größes Spiel für die Schule zu schreiben. Alles sehr einfach gehalten, aber es soll dennoch ein wenig KLasse besitzen. Das eigentliche Spiel ist auch schon fertig.

Doch nun möchte ich einen Start-Screen einbauen. Darum hab ich mir gedacht, mach ich einfach 2 Bilder, die sich abwechseln! Also einfach ins Formcreate eine Schleife!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
while (start = true) do
  begin
    sleep (2000);
    counter := counter + 1;
    if counter mod 2 = 1 then
    begin
      Img_menu_start.visible := true;
      Img_menu_clean.visible := false;
    end
    else
    begin
      Img_menu_start.visible := false;
      Img_menu_clean.visible := true;
    end;
  end;


Und dann ins KeyPress die Abfrage!

ausblenden Delphi-Quelltext
1:
2:
if (start = true) and (key = 'VK_Return'then
    start := false;


Aber es will einfach nicht funktionieren. Das Fenster zeigt sich gar nicht erst. Ich denke, weil das Formcreate nicht durchlaufen kann!
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 12.06.10 00:15 
Sleep ist für sowas auch nicht geeignet, da es die Anwendung praktisch einfriert, nimm lieber einen Timer, den du dann bei Bedarf abschalten kannst.
MaPsTaR
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 90
Erhaltene Danke: 4

Win XP
Delphi 7 Enterprise
BeitragVerfasst: Sa 12.06.10 01:30 
Ich würde einen Timer im OnShow-Event der Form aktivieren, der die Bilder wechselt und dann deaktiviert wird, wenn Enter gedrückt wird.
Da könntest du dann eigentlich Timer1.Enabled testen und kannst die Variable start rausnehmen.

Soweit ich weiß, kann das nicht funktionieren...
ausblenden Delphi-Quelltext
1:
2:
if (start = true) and (key = 'VK_Return'then
    start := false;
, da key vom Typ Char ist.

Schreib die Abbruchbedingung in OnKeyDown und...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if (Timer1.Enabled) and (key = vk_Return) then
begin
  Timer1.Enabled := false;
  //
end;


Booleanvergleiche nicht auf true oder false!

_________________
Liebe Kinder, es stimmt ... solnage auch nur der ertse und lezte Bchutsabe rihctig ist und alle andreen Bcuhsatben irgendwie vorahnden sind,
dann knan man es dennonch lesen, also macht nur weiter so, wir verstehen euch schon
Blobby
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 12.06.10 12:04 
user profile iconMaPsTaR hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde einen Timer im OnShow-Event der Form aktivieren, der die Bilder wechselt und dann deaktiviert wird, wenn Enter gedrückt wird.
Da könntest du dann eigentlich Timer1.Enabled testen und kannst die Variable start rausnehmen.

Soweit ich weiß, kann das nicht funktionieren...
ausblenden Delphi-Quelltext
1:
2:
if (start = true) and (key = 'VK_Return'then
    start := false;
, da key vom Typ Char ist.

Schreib die Abbruchbedingung in OnKeyDown und...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if (Timer1.Enabled) and (key = vk_Return) then
begin
  Timer1.Enabled := false;
  //
end;


Booleanvergleiche nicht auf true oder false!


Ich hab mal deinen Rat befolgt, aber hab ich jetzt das Problem, dass sich das Fenster nicht zeit.
Es wird zwar als aktiv in der Taskleiste angezeigt, aber es erscheint nicht auf dem Bildschirm. Ich hab Probeweise nur die Schleife rausgenommen und festgestellt, dass es an der Schleife im OnShow liegt!

Aber möchte ich ja auch mein Spiel spielen und dafür muss ich es sehen.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 12.06.10 12:41 
Hi, mal ganz einfach.
Im Onshow - Event deiner Form, schreibst Du dies
ausblenden Delphi-Quelltext
1:
Timer1.Enabled := True;					

In Der Timer1 Procedure schreibst Du die Bilderwechsel rein.
Aber nicht als Schleife!
Und im OnKeyDown - Event Deiner Form kommt die genannte Abbruchbedingung rein.

Grundsetzlich muss man sich folgendes merken :!:
Es muss standart mässig, alles was in einer Procedure steht, die Procedure komplett durchlaufen werden, damit eine aktuallisierung passieren kann.
Eine sich wiederholende Schleife in einer Procedure verhindert dies! Demzufolge auch keine Aktuallisierung!

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 12.06.10 13:07 
user profile iconMaPsTaR hat folgendes geschrieben Zum zitierten Posting springen:
Booleanvergleiche nicht auf true oder false!
Bitte wirklich vermeiden ;) Begründung findet sich hier: Vergleiche auf true/false

lg,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Sa 12.06.10 13:27 
Habe gerade sogar eine Videoanleitung gefunden: www.youtube.com/watch?v=tFLEAQXszkU

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Blobby
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 12.06.10 13:41 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Hi, mal ganz einfach.
Im Onshow - Event deiner Form, schreibst Du dies
ausblenden Delphi-Quelltext
1:
Timer1.Enabled := True;					

In Der Timer1 Procedure schreibst Du die Bilderwechsel rein.
Aber nicht als Schleife!
Und im OnKeyDown - Event Deiner Form kommt die genannte Abbruchbedingung rein.

Grundsetzlich muss man sich folgendes merken :!:
Es muss standart mässig, alles was in einer Procedure steht, die Procedure komplett durchlaufen werden, damit eine aktuallisierung passieren kann.
Eine sich wiederholende Schleife in einer Procedure verhindert dies! Demzufolge auch keine Aktuallisierung!

Gruss Alf


Danke ... Hab jetzt alles auf die Reihe bekommen!