![]() |
AW: Variablen in Objektnamen verwenden?
Ein anderes Problem bestünde da allerdings noch, deswegen auf Doppelpost (sorry, aber ich glaube, dass ansonsten alle noch davon ausgehen würden, dass das Thema beendet wäre).
Ich habe eine Prozedur erstellt, die eben zB die Karten miteinander vergleicht, Punkte addiert, etc. Jetzt wollte ich eure Tipps anwenden, um die nicht zueinander gehörenden Karten nach 2 Zügen wieder umzudrehen, bzw. gefundene Pärchen zu verstecken. Das ganze sieht dann in etwa so aus (beim zweiten Zug, wenn die Karten verglichen werden):
Delphi-Quellcode:
Nun treten folgende Fehlermeldungen auf:
If Karten[x1,y2]=Karten[x2,y2] then begin
(FindComponent('Image'+IntToStr(Karte1)) as TImage).Picture.Hide; (FindComponent('Image'+IntToStr(Karte2)) as TImage).Picture.Hide; If Spieler=1 then begin PunktzahlS1:=PunktzahlS1+1; TForm1.Label4.Caption:=IntToStr(PunktzahlS1); end else PunktzahlS2:=PunktzahlS2+1; TForm1.Label5.Caption:=IntToStr(PunktzahlS2); end; [Fehler] Memory.pas(181): Undefinierter Bezeichner: 'FindComponent' [Fehler] Memory.pas(182): Operator ist auf diesen Operandentyp nicht anwendbar (Zeile 181 ist in diesem Ausschnitt die zweite Zeile) |
AW: Variablen in Objektnamen verwenden?
Zitat:
Du solltest evnt die Methode umschreiben. Ich weiß nicht ob es jetzt eine saubere Lösung ist oder ob es noch besser geht, aber du könntest den Sender im Bezug auf die Tag Eigenschaft benutzten.
Delphi-Quellcode:
case (Sender as TButton).Tag of
0: choice := 0; 1: choice := 1; 2: choice := 2; 3: choice := 3; end; |
AW: Variablen in Objektnamen verwenden?
Vermutlich hast Du den Code in einer regulären Prozedur oder Funktion stehen. Mach daraus einmal eine Methode des Formulars.
|
AW: Variablen in Objektnamen verwenden?
Zitat:
Gibt es keine andere Möglichkeit? In anderen Prozeduren funktioniert das ganze doch auch, warum also nicht hier? |
AW: Variablen in Objektnamen verwenden?
Anstatt
Delphi-Quellcode:
das hier
procedure MethodenName()
Delphi-Quellcode:
procedure Form1.MethodenName()
|
AW: Variablen in Objektnamen verwenden?
Nicht
Delphi-Quellcode:
sondern
procedure TuWas;
Delphi-Quellcode:
Dazu musst Du dann zusätzlich die Prozedur in der Deklaration des Formulars bekannt machen.
procedure TForm1.TuWas;
Delphi-Quellcode:
type
TForm1 = class(TForm) ... procedure TuWas; ... end; |
AW: Variablen in Objektnamen verwenden?
Zitat:
ich verstehe nicht, wo das Problem liegt: du merkst dir die beiden letzten aufgedeckten Karten - stimmen sie nicht überein, verdeckst du sie wieder. Das gibt doch keine 100 Programmzeilen? Für das Zurückdrehen von 2 bekannten Karten? Gruss Reinhard |
AW: Variablen in Objektnamen verwenden?
Zitat:
Welche Datenstruktur verwendest du denn pro Spielkarte? Wahrscheinlich gar keine; das ist nämlich dein Problem.
Delphi-Quellcode:
Um das Spielfeld anzuzeigen, verwendet man auch keine 64 TImage sondern ein DrawGrid mit Grösse 8 * 8.
type
{ 0=verdeckt (blauer Hintergrund) 1=verdeckt und als 1. Karte markiert (roter Hintergrund) 2=temporär aufgedeckt 3=aufgedeckt } TCardStatus = 0..3; TMemoryCard = record Status : TCardStatus; BildNr : integer; // Zwei Karten mit der gleichen Bildnr sind übereinstimmend Bitmap : TBitmap; // Zeiger auf Bild, optional da eigentlich auch schon über die Bildnr bestimmt end; TCards = array[1..8, 1..8] of TMemoryCard; TBilder = array[1..32] of TBitmap; // 32 Bilder Wenn du die Datenstrukturen von oben verwendest, dann ist das aus- und zudecken kein Problem mehr. |
AW: Variablen in Objektnamen verwenden?
Liste der Anhänge anzeigen (Anzahl: 1)
War "If then Schleife" falsch? :P
Naja, das mit den 100 Zeilen meine ich so, dass ich in meiner aktuellen Prozedur leider nichts mit den TImages machen kann. Soll heißen, dass ich die Überprüfung, ob richtig oder nicht, auf jede einzelne Prozedur machen muss, wenn ich auf ein Bild klicke. Für besseres Verständnis hänge ich das aktuelle Programm einmal an. Leider zeigt er mir derzeit eine Fehlermeldung :evil: EDIT: Fehlermeldungen behoben. Stürzt aber leider derzeit noch ab :( EDIT2: Also den Fehler, waru das Programm abstürzt, habe ich jetzt herausgefunden. Wie im Programm im Anhang zu sehen ist, speichert er leider innerhalb der Prozedur die Variablen nicht, nachdem die Prozedur geschlossen wurde. :( zB Beim ersten Zug fügt er die Koordinaten x1 und y1 hinzu. Beim zweiten Zug (somit zweiter Aufruf der Prozedur), fügt er x2 und y2 hinzu, kennt aber dann x1 und y1 nicht mehr. Brauche dringend Hilfe :( |
AW: Variablen in Objektnamen verwenden?
Ich hab dein Programm mal getestet. Wo und wann genau stürzt denn bei dir was ab?
Kann ich nicht feststellen, vielleicht mache ich auch was falsch. Ich hab in der Prozedur BildKlick die auskommentierte Stelle wieder reingenommen, da stürzt aber auch nichts ab. Von globalen Variablen solltest du Abstand nehmen. Ich habe das mal geändert:
Delphi-Quellcode:
TForm1 = class(TForm)
... public { Public-Deklarationen } // Array 6 x 5 für Kartenzuweisung Karten: array[0..5] of array[0..4] of Integer; x1,x2,y1,y2,Spieler,Zug,PunktzahlS1,PunktzahlS2,Karte_gezogen:integer; // Zug 1 = noch keine Karte gezogen // Punktezahl SX = Punktzahl Spieler X // Karte_gezogen = wurde gezogen (Variable für Übergabe an Pozedur) end; var Form1: TForm1; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr. |
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