AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi "MineSweeper" - Probleme mit Rundtime-Buttons
Thema durchsuchen
Ansicht
Themen-Optionen

"MineSweeper" - Probleme mit Rundtime-Buttons

Ein Thema von 64Jabor · begonnen am 2. Okt 2008 · letzter Beitrag vom 2. Okt 2008
Antwort Antwort
Seite 3 von 4     123 4      
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#21

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:13
Wenn ein Button gedrückt wird - ein Button der keine Mine sein soll/ist.
Dabei passiert folgendes:

Delphi-Quellcode:
procedure TFrmMS.SmileForUser(ACol, ARow: integer);
var TopLeft, BtmRight: TPoint;
begin
 MineBtn[ACol, ARow].Destroy;
 BtnDestroyed[ACol, ARow] := TRUE;

 TopLeft.X := MineBtn[0, 0].Left + ACol*MineBtn[0, 0].Width;
 TopLeft.Y := MineBtn[0, 0].Top + ARow*MineBtn[0, 0].Height;
 BtmRight.X := TopLeft.X + MineBtn[0, 0].Width;
 BtmRight.Y := TopLeft.Y + MineBtn[0, 0].Height;
 Canvas.TextRect(rect(TopLeft, BtmRight), TopLeft.X, TopLeft.Y, MinesArround(ACol, ARow));
 BtnFace.Caption := ':-)';
end;
Also der Button wird gelöscht und vorgemerkt (damit er bei spielende nicht nochmal gelöscht wird, was ja nicht ginge)
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#22

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:16
Warum zerstörst du den Button überhaupt?
Markus Kinzler
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#23

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:19
Das sollte egtl nur zur Anschauung dienen!
Egtl wollte ich die Caption des Btns ändern und ihn Down machen, sodass jeder sieht wieviele Minen um den Button herum sind.
Testweise habe ich ihn der Einfachheit halber erstmal zerstört, geht aber in die Hose deshalb steige ich jetzt mal auf diese Version um...

Es sähe meienr Meinung nach nur einfach besser aus wenn das Feld frei wäre abgesehen von der Zahl, wenn man einen Button anklickt der keine Mine war
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#24

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:20
.Enabled := False sollte reichen
Markus Kinzler
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#25

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:24
Hm Moment, dann klappt ja nur der Button nicht mehr, ich möchte ja das der Button
1. als caption die Anzahl der Minen um sich herum hat (bereits erledigt)
und 2. GUT SICHTBAR ist, dass er bereits gedrückt worden ist

Das lässt sich mit
 MineBtn[ACol, ARow].Down := TRUE allerdings auch nicht bewerkstelligen...
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#26

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:30
Hallo,

ich glaube die Fehlermeldung kommt daher, dass du im Eventhandler
des gedrückten Buttons Diesen selbst löscht.

Das heisst du löscht den Button in seinem Eventhandler.
Das geht nicht - das muss krachen - du ziehst ja dem Button
den Boden unter ihm weg.

Um dieses Problem zu umgehen, gibt es hier im Forum schon eine Lösung
Im Großen und Ganzen wird anstatt den Button im Eventhandler
zu zerstören, eine Windows-Message an die eigene Application
geschickt in der dann dieser Button zerstört wird.

[edit]
Das Zerstören eines Buttons in seinem eigenen Eventhandler
wurde hier schon mal diskutiert.
Der dort gezeigte Lösungsweg funktioniert - habs selbst
schon eingesetzt.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#27

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:33
Vielen Dank Helmi,

das macht Sinn, man sägt ja auch nicht an seinem eigenen Ast *zweideutig xD*
Aber wieso krachen dann nur die letzten paar und die ersten 50 klappen ohne Probleme?
Wie auch immer habe ich nun damit aufgehört die Buttons zu zerstören und stattdessen mache ich sie jetzt nun nur kenntlich - was mir aber noch nicht so recht geligen will!
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#28

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:37
Zitat von 64Jabor:
Aber wieso krachen dann nur die letzten paar und die ersten 50 klappen ohne Probleme?
ich denke du löscht die Buttons um den gedrückten button herum und dann den gedrückten Selbst.
Dann kommt es erst zu einem Crash wenn du zu dem Gedrückten kommst.
Der Eventhandler der Anderen wird ja zu diesem Zeitpunkt nicht aufgerufen.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#29

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 20:56
Nein, ich lösche immer nur den Button auf den geklickt wird, oder besser wurde, denn wie gesagt habe ich mich davon distanziert - mit dem freundigen Nachricht dass keine Zugriffsverletzungen mehr erscheinen - dafür ein Stack-Überlauf der sich gewaschen hat xD

Ich mussj a bei jedem Button-Druck prüfen, on benachbarte Felder ebenfalls an kein Minenfeld stoßen, dazu prüfe ich mittels einer Funktion ob ein benachbartes Feld eine Mine hat und lasse mir dann einen String geben der der umgewandelte Integer-Wert ist.
Da ich das wiederrum aber auch für jede weiterhin frei gewordene Feld tun muss - bis iwann ALLE entweder am Rand des Spielfeldes sind oder an eine Mine angrenzen, habe ich das getan (unter Beachtung der Ränder!).
Das scheint aber zu viel zu sein, denn der Stack ist ja der Ort, an dem die Programm-Einstiegs-/Haltepunkte gespeichert werden, nicht wahr?
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#30

Re: "MineSweeper" - Probleme mit Rundtime-Buttons

  Alt 2. Okt 2008, 21:00
irgendwie reden wir aneinander vorbei...
ich schau dass ich ne Lösung finde für deine Zugriffsverletzung
dann machst du in der Zwischenzeit etwas ganz anderes und
hast jetzt mit dem ganz Anderen ein Problem...

Bleib doch mal auf eine Schiene und bring das zu Laufen.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 13:19 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