AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Variablen in Objektnamen verwenden?

Variablen in Objektnamen verwenden?

Ein Thema von Sluak · begonnen am 21. Mär 2011 · letzter Beitrag vom 22. Mär 2011
Antwort Antwort
Seite 2 von 3     12 3   
Sluak

Registriert seit: 21. Mär 2011
7 Beiträge
 
#11

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 12:28
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:
  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;
Nun treten folgende Fehlermeldungen auf:

[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)
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 12:33
Vielen, vielen Dank.
Es funktioniert (wie auch nicht anders zu erwarten )

EDIT: Geht das auch mit Prozeduren?

Delphi-Quellcode:
procedure TForm1.Image1Click(Sender: TObject);
begin
BildKlick(1,0,0);
Image1.Picture.LoadFromFile('bilder\'+IntToStr(i)+'.jpg');
Etwas dergleichen habe ich auch 30 mal derzeit in dem Programm stehen.

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;
Delphi programming is awesome.

Geändert von pustekuchen (21. Mär 2011 um 12:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 12:35
Vermutlich hast Du den Code in einer regulären Prozedur oder Funktion stehen. Mach daraus einmal eine Methode des Formulars.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Sluak

Registriert seit: 21. Mär 2011
7 Beiträge
 
#14

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 12:46
Mach daraus einmal eine Methode des Formulars.
Das bedeutet?

Gibt es keine andere Möglichkeit?
In anderen Prozeduren funktioniert das ganze doch auch, warum also nicht hier?

Geändert von Sluak (21. Mär 2011 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 13:00
Anstatt
procedure MethodenName() das hier
procedure Form1.MethodenName()
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 13:00
Nicht
procedure TuWas; sondern
procedure TForm1.TuWas; Dazu musst Du dann zusätzlich die Prozedur in der Deklaration des Formulars bekannt machen.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
  procedure TuWas;
  ...
  end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#17

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 14:06
Hallo

Es geht um folgendes Problem: Ich schreibe gerade ein Memory Spiel mit Delphi. Dabei gibt es 30 Bilder der einzelnen Karten. Nun möchte ich(wenn zwei Karten gezogen wurden, die nicht übereinstimmen) die Karten wieder umdrehen.
Derzeit wäre mein einziger Lösungsansatz dafür, dem Array (was die Koordinaten der Karten in der Form darstellt) einen Wert zB 0 zuzuweisen und dann per If then Schleife die Karten wieder zurück zum Deckblatt zu führen.

Das Problem an der ganzen Sache ist, dass so bei 30 Bildern mindestens 100 Zeilen entstehen, die weder übersichtlich, noch praktisch sind.
Hallo,

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

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#18

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 18:31
...und dann per If then Schleife die Karten wieder zurück ...
Aaaaaah - er hat If then Schleife gesagt

Welche Datenstruktur verwendest du denn pro Spielkarte?
Wahrscheinlich gar keine; das ist nämlich dein Problem.

Delphi-Quellcode:
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
Um das Spielfeld anzuzeigen, verwendet man auch keine 64 TImage sondern ein DrawGrid mit Grösse 8 * 8.
Wenn du die Datenstrukturen von oben verwendest, dann ist das aus- und zudecken kein Problem mehr.
Andreas
  Mit Zitat antworten Zitat
Sluak

Registriert seit: 21. Mär 2011
7 Beiträge
 
#19

AW: Variablen in Objektnamen verwenden?

  Alt 21. Mär 2011, 19:13
War "If then Schleife" falsch?

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


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
Angehängte Dateien
Dateityp: rar Projekt.rar (293,1 KB, 2x aufgerufen)

Geändert von Sluak (21. Mär 2011 um 20:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#20

AW: Variablen in Objektnamen verwenden?

  Alt 22. Mär 2011, 06:09
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;
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:24 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