![]() |
Problem mit Zeichenfläche
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
AW: Problem mit Zeichenfläche
Der Fehler beginnt in der Zeile
Delphi-Quellcode:
bzw. schon hier
procedure TI.draw (psa:TCanvas;px,py:integer);
Delphi-Quellcode:
Ohne mir das jetzt genauer angesehen zu haben, würde ich drauf tippen das das Problem Canvas ist.
procedure TI.move(px2:integer);
begin ... sa.Rectangle(x,y,x+124,y+31); 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. |
AW: Problem mit Zeichenfläche
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
Delphi-Quellcode:
bestimmt und dann
image1.canvas.brush.color
Delphi-Quellcode:
macht. die imag1.canvas haben wir dann in einer Variable vom Typ TCanvas angegeben.
image1.canvas.rectangle(Koords)
Delphi-Quellcode:
sa := image1.canvas;
|
AW: Problem mit Zeichenfläche
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:
Allerdings machst du es etwas verworren.
type
TI = class private ... s : TI; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 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:
Delphi-Quellcode:
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.
s.draw(sa,x+x2,y);
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. |
AW: Problem mit Zeichenfläche
okay, danke dir.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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