AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Zeichenfläche

Ein Thema von AlToZzBrA · begonnen am 2. Feb 2013 · letzter Beitrag vom 2. Feb 2013
Antwort Antwort
AlToZzBrA

Registriert seit: 2. Feb 2013
3 Beiträge
 
#1

Problem mit Zeichenfläche

  Alt 2. Feb 2013, 18:29
Hallo,

Bitte entschuldigt mich wenn ich dieses Thema in das falsche Forum gepostet habe, aber ich finde mich hier noch nicht ganz zurecht, da ich neu bin.

Mein Problem:

Schwer zu erklären, deswegen gebe ich euch mein Programm und ihr könnt es euch dann einfach selbst anschauen.
Ich bin gerade dabei Tetris zu programmieren. Startet einfach da Programm und geht auf steht und drückt dann die Pfeiltaste nach links und dann kommt auch schon die Fehlermeldung.

Ich bin euch sehr dankbar, wenn ihr eine Lösung des Problems findet.
Angehängte Dateien
Dateityp: zip Tetris.zip (947,7 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Problem mit Zeichenfläche

  Alt 2. Feb 2013, 18:53
Der Fehler beginnt in der Zeile

procedure TI.draw (psa:TCanvas;px,py:integer); bzw. schon hier

Delphi-Quellcode:
procedure TI.move(px2:integer);
begin
   ...
   sa.Rectangle(x,y,x+124,y+31);
Ohne mir das jetzt genauer angesehen zu haben, würde ich drauf tippen das das Problem Canvas ist.

Soweit ich sehe hast du es zwar deklariert, aber den Konstruktor vergessen?

Eigentlich sollten Objekte erstellt werden. Vielleicht hast du es irgendwo auch gemacht, aber trotzdem, auch das wird dich nicht weiter bringen, denn Canvas ist lediglich die Zeichenfläche und die kann man soweit ich weiß nicht alleine für sich nutzen. Eher aus TBitmap usw., nicht alleine.
  Mit Zitat antworten Zitat
AlToZzBrA

Registriert seit: 2. Feb 2013
3 Beiträge
 
#3

AW: Problem mit Zeichenfläche

  Alt 2. Feb 2013, 19:24
Ich verstehe nicht ganz was du meinst.

In der Schule haben wir beigebracht bekommen, das man z.B. ein Rechteck auf die Canvas zeichnet,indem man als image1.canvas.brush.color bestimmt und dann image1.canvas.rectangle(Koords) macht. die imag1.canvas haben wir dann in einer Variable vom Typ TCanvas angegeben. sa := image1.canvas;
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Problem mit Zeichenfläche

  Alt 2. Feb 2013, 20:17
Ja, du hast Recht, es wird die Canvas von Image2 übergeben, somit hat es im ersten Moment wieder sein Richtigkeit, aber nur im ersten Moment. Wie gesagt, ich hab mir das vorhin nicht genauer angesehen.

Das Problem scheint hier zu liegen:

Delphi-Quellcode:
type
  TI = class
  private
    ...
    s : TI; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Allerdings machst du es etwas verworren.

Zuerst wird TImage mit der Canvas erstellt. Diese Canvas ist in Wirklichkeit die Canvas der Bitmap der TImage. Somit hat das alles seine Richtigkeit.

Dann erstellst du das TI Objekt (I) und übergibst TImage Canvas als Methodenparameter

In der Methode Draw von TI übergibst du die Canvas Adresse an die Feldvariable sa. sa zeit jetzt also auf die Cnavas von TImage. Soweit noch alles gut.

Unter TI.move macht du dann aber das:

   s.draw(sa,x+x2,y); Das ist noch soweit nicht verboten, aber eine andere Instanz. Und diese Canvas geht ins leere und hat nichts mit der Image2 Canvas zu tun.

Letztendlich deklarierst du in der TI Klasse die TI Klasse. Beim ersten Zugriff knallte es nicht, da du da die Canvas der Image2 übergeben hast. Aber spätestens in TI.move hast du das Problem auf ein nicht erstelltes s Objekt zuzugreifen. Das hättest du vorher im Konstruktor machen müssen (nicht jetzt in TI.move, da du das ständig neu aufrufst). Aber wie gesagt, auch wenn du es machst, hast du dann trotz dem immer noch das Problem mit der Canvas.
  Mit Zitat antworten Zitat
AlToZzBrA

Registriert seit: 2. Feb 2013
3 Beiträge
 
#5

AW: Problem mit Zeichenfläche

  Alt 2. Feb 2013, 20:35
okay, danke dir.
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:58 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