Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lösung für 2D Brett (https://www.delphipraxis.net/133988-loesung-fuer-2d-brett.html)

KahPee 13. Mai 2009 11:57


Lösung für 2D Brett
 
Hallo,
so jetzt bin ich soweit, dass ich meine zweite Frage stellen muss, da ich an einer Stelle nicht mehr weiter weis.
Ich bin dabei ein Spiel Brett in 2D mit 7*7 Feldern zu erstellen, das ist soweit kein Problem. Für jedes Feld gibt es nun ca. 12 (evtl nen bisschen mehr) verschiedene Grafiken, die unter gewissen Bedingungen auf dem Feld erscheinen können. Nun die Frage wie man das realisiert.
Eine Möglichkeit (die ich auch hinkriegen würde) ist auf jedes Feld alle 12 Grafiken zu legen und diese im Laufe des Spiels mit visible := True/false an und auszuschalten. Allerdings ist dieses zum einen recht umständlich und zum anderen hat das ganze eine recht lange Ladezeit, da meines Wissens beim Starten auch die versteckten Grafiken geladen werden.

Ich weis nicht ob dieses in irgendeiner Art und weise mit einem Record realisierbar ist, da jedes Feld zusätzlich noch andere Eigenschaften bekommen muss (X-, Y- koordinaten auf dem Brett, und anderes)

Vielen Dank schon mal im Voraus


KahPee

quendolineDD 13. Mai 2009 12:04

Re: Lösungs für 2D Brett
 
Mein Vorschlag wäre ein Panel, welches eine Größe von 7* Feldhöhe x 7* Feldbreite hat. Auf das Panel-Canvas "kann was" (Wortspiel) gezeichnet werden und so kannst du dann auch die Bilder je nach ihren Bedingungen aufzeichnen.

KahPee 13. Mai 2009 12:06

Re: Lösungs für 2D Brett
 
Mh, ich bin da Anfänger, daher Frage ich nochmal nach was genau du gemeint hast. Sorry, dass ich mich da etwas schwerer tue aber es wäre nett wenn du, dass nochmal ein bisschen genauer erläutern könntest.

Vielen Dank


Edit: Gibt es irgendeine create anweisung für Bilder? Dann müsste ich die einzelnen Bilder irgendwo doch nur einmal deklarieren und könnte sie dann wenn "iwas passiert" einfach an bestimmter Stelle erzeugen, dann ist jedes Bild im prinzip nur einmal vorhanden. Ich meine, dass man auf so ein Bild dann ähnlich wie auf eine vorherdefinierte Prozedur zugreifen kann. Gibt es sowas?

sirius 13. Mai 2009 12:06

Re: Lösungs für 2D Brett
 
Ich würde eine Klasse A bauen in der alle Bilder einmalig geladen werden (in eine Liste von TBitmap).

Dann würde ich die Klasse B bauen (evtl. von TImage ableiten), welche ein Feld repräsentiert. Diese Klasse bekommt beim erstellen eine Referenz auf Klasse A, damit es sich von dort per Index das entsprechende Bild holen kann. Und jetzt hat Klasse B eine Methode, welche sagt, dass jetzt Bild Nummer 4 anzuzeigen ist, dann kopiert sie sich eben aus Klasse A bild nummer 4 und fertig.

KahPee 13. Mai 2009 12:10

Re: Lösungs für 2D Brett
 
OH, siehe mein Edit oben (da warst du schneller)... genau an soetwas habe ich gedacht. Kannst du mir einmal ein Beispiel geben wie ich in einer Klasse ein Bild definiere?

sirius 13. Mai 2009 12:12

Re: Lösung für 2D Brett
 
Für ein Bitmap:
Delphi-Quellcode:
(var) Bitmap:TBitmap;
...

Bitmap:=Tbitmap.create;
Bitmap.Loadfromfile(dateiname);


...
Am Ende irgendwann dann Bitmap.free

KahPee 13. Mai 2009 12:53

Re: Lösung für 2D Brett
 
Ich gucke mal kurz ob ich die Syntax verstanden habe:
Zitat:

(var) Bitmap:TBitmap; // damit wird eine variable (für alle Bilder) vom Typ Tbitmap
//(ist automatisch deklariert) deklariert
...

Bitmap:=Tbitmap.create; // Platzhalter für das Bild wird kreiert
Bitmap.Loadfromfile(dateiname); //Befehl um den platzhalter durch das eigentliche Bild zu ersetzen


...
Am Ende irgendwann dann Bitmap.free // den Befehl verstehe ich nocht nicht...
So dann halt wie oben beschrieben die eine Frage, was bedeute Bitmap.free?
Ist das um das Bild wieder durch einen Platzhalter zu ersetzen?

Wie deklariere ich die eigentliche Bildklasse? Reicht das wirklich das einfache: (var) Bitmap:TBitmap;?

Die Klasse für das Feld muss im Prinzip ja auch einen Platzhalter enthalten oder? Wie definiere ich soetwas?

Wie sähe der Befehl für ein .jpg aus?


Sorry für diese Vielen Fragen, ich bin halt noch blutiger Anfänger, ich hoffe, dass ich irgendwann mal in der Lage bin die mir entgegengebrachte Hilfe zurückzuzahlen...

mfg Kahpee

markus5766h 13. Mai 2009 13:00

Re: Lösung für 2D Brett
 
Hallo,

Bitmap.Free

benötigst Du, damit der reservierte Speicher wieder
freigegeben wird, wenn dein Programm geschlossen wird.

Der Befehl lässt sich gut im Ereignis OnClose anwenden.

SimStar001 13. Mai 2009 13:06

Re: Lösung für 2D Brett
 
Hallo KahPee,

schau mal auf die Seite und lies dir das durch! ich denke da bekommst du auch ne gute Anregeung wie man sowas realisieren kann!

http://www.christian-stelzmann.de/artikel/crashkurs.htm

Satty67 13. Mai 2009 13:12

Re: Lösung für 2D Brett
 
TImageList wäre dann noch eine fertige Komponente, die Bilderlisten verwaltet.

SimStar001 13. Mai 2009 13:14

Re: Lösung für 2D Brett
 
Diese würde ich aber erst zur Laufzeit erzeugen und dann füllen, denn sonst wird seine *.exe ja unglaublich groß!
Hätte außerdem den Vorteil, dass er einfach die Bilder verändern kann und nicht jedesmal das Programm neu erzeugen müsste!

KahPee 13. Mai 2009 13:18

Re: Lösung für 2D Brett
 
@SimStar001:Vielen Dank für den Link, allerdings steht dort zum Thema Grafiken im Sinne von JPG und Bitmap, etc nicht allzu viel. Trotzdem schon mal vielen Dank, das ist ein gute Nachschlagewerk...

@Satty67: Ich werde mir den Befehl mal genauer angucken. Im Prinzip werden am Anfang des Programmes alle 49 Felder einmal mit einer Grafik belegt. Anschließend werden zur Laufzeit die Bilder je nach Ereignis wieder geändert.

Mir sind zwar zu dem Thema noch nicht alle Sachen klar aber ich werd mal nach dem Motto "Probieren geht über studieren" anfangen, und falls ich mich festfahre schau ich hier mal wieder rein.

Vielen Dank an alle

SimStar001 13. Mai 2009 13:28

Re: Lösung für 2D Brett
 
Also das ganze kann man mit einem Record machen, du könntest auch eine eigene klasse erstellen, würde ich zum beispiel so machen.

Aber du sgast ja selbst du bist anfänger, dann hat dass für dich denke ich noch keinen sinn. Soll heißen, probier es ruhig so aus wie du es denkst, dass es funktioniert. wenn am ende alles so läuft wie du es dir vorstellst, dann kannst du ja den nächsten schritt gehen und versuchen es anders, vielleicht eleganter und effektiver zu lösen. Schließlich geht ja probieren über studieren!

KahPee 13. Mai 2009 15:07

Re: Lösung für 2D Brett
 
Wie das mit Klassen geht wäre schon interessant, da ich in meinem Programm schon einige Klassen schon verwende...

KahPee 13. Mai 2009 15:29

Re: Lösung für 2D Brett
 
So da komm ich dann nochmal: Ich hatte vor die Felder als zweidimensionalen Array einer Klasse zu verarbeiten. Zweidimensionaler Array damit eine Variable für die X und eine für die Y koordinate ist. Wie ordne ich nun jeder Variable aus dem Array eine Bitmap zu?

Im Prinzip habe ich hier das Problem, dass ich pro Feld eine Bitmap mit einem Feld verknüpfen muss, ist das irgendwie möglich. Bei dieser Verknüpfung muss auch irgendwo(?) irgendwie (?) festgelegt werden wo sich das Bild überhaupt befindet.. Wäre super wenn mir da nochmal jemand auf die Sprünge helfen könnte..

Vielen Dank

sirius 13. Mai 2009 15:54

Re: Lösung für 2D Brett
 
Du erstellst am besten ein Array of TBitmap, wo du alle möglichen Bilder hineinlädst.

Und in deinem Spielfeld-Array merkst du dir nur den Index, welches Bild gezeichnet werden soll.

KahPee 13. Mai 2009 16:00

Re: Lösung für 2D Brett
 
Ok damit wäre die Zuordnung geklärt..

Wie lege ich dann am Ende fest wo das entsprechende Bild im Programm gezeichnet wird, also die Position? Wie genau ist da dann der Befehl?
Das muss ja wahrscheinlich über eine Pixelangabe ausgehend von links oben gehen oder?

SimStar001 13. Mai 2009 20:02

Re: Lösung für 2D Brett
 
Also ich weiß ja nicht wie deine Arrays aussehen, aber ich würde es so machen , dass du halt wie schon vorher vorgeschlagen ein Array hast, was am besten aus einem record besteht:

z.b. so
Delphi-Quellcode:
type TMeinBilderRecord = record
      Image : TImage;
      BildIndex : Integer;
      ...
      end;


var MeinBilderArray : array of TMeinBilderRecord;
somit hättest du ein Array, mit dem Du beliebig viele Images und anderen Kram erzeugen kannst, den du noch so brauchst.
Somit wäre auch eine Positionierung kein Problem, denn jetzt kannst du jedem Image in deinem Array auch eine Position geben.

z.b.
Delphi-Quellcode:
MeinBilderArray[0].Image.left := 100;
MeinBilderArray[0].Image.top := 100;
MeinBilderArray[0].Image.picture.loadfromfile(xyz); // oder halt mit ner Imagelist und dann den Index zuweisen
Aber es kommt halt drauf an wie und was du so alles noch damit machen willst.

Wie gesagt, wenn du nen Record und array verwendest, kannst du auch irgendwann selbst nach deinen Wünschen bzw. Bedürfnissen ne eigene Klasse basteln.

Blup 14. Mai 2009 07:07

Re: Lösung für 2D Brett
 
Ich habe hier mal beschrieben wie man Bilder in einem Grid (Tabelle) anzeigt:

http://www.delphipraxis.net/internal...t.php?t=131850

Vieleicht hilft dir das weiter.

KahPee 14. Mai 2009 14:14

Re: Lösung für 2D Brett
 
Riesen Dankeschön, dass sollte mich einen riesigen schritt weiterbringen. Bei deinem record ist mir aufegefallen, dass du "BildIndex" deklariert hast.
Die folgende Frage hat mit Grafiken nichts mehr zu tun aber ich frag mal trotzdem:

Bildindex gibt dem Bild ganz klar eine Zuordnung aber wie erzeuge ich nun das Bild mit dem Bildindex=2?

Wie ist da der beste Befehl. Im Moment fällt mir das ganze nur mithilfe einer riesigen If, else if- funktion ein.

ungefähr so:

Delphi-Quellcode:
if feldarray[1].bildindex=2 then
begin
Feldarray[1]:=Tbitmap.create;
Feldarray[1].Loadfromfile(BildMitBildindex2);
end
else if feldarray[1].bildindex=3 then
begin
Feldarray[1].bild:=Tbitmap.create;
Feldarray[1].bild.Loadfromfile(BildMitBildindex3);
 //und so weiter
end;

Das ganze dann für jedes Feld... nen bisschen umständlich oder? wie kriege ich hin, dass ich anstatt so für jedes Feld das zu machen einfach nur einmal deklarieren muss und die Prozedur auf jedes Feld anzuwenden ist.

Sorry dass ich wahrscheinlich ne richtig blöde frage stelle aber da scheine ich nen Brett vorm Kopf zu haben.

Mfg KahPee

SimStar001 14. Mai 2009 16:14

Re: Lösung für 2D Brett
 
kannst du bitte mal noch deine ganzen variablen posten, damit wir genau wissen wie due deine sachen nun aufgebaut hast, das macht es einfacher, und du bekommst genau den tip den du brauchst!

Danke

SimStar001 14. Mai 2009 16:23

Re: Lösung für 2D Brett
 
jetzt weiß ich was du meinst:

also ich würde ein array erzeugen, was generell alle bilder enthält:

so z.b:

Delphi-Quellcode:
var AlleMeineBilder : array [0..xyz] of Bitmap;

// dann beim erzeugen der Form

AlleMeineBilder[0].bitmap.assign('Pfad der Datei');
...

// dann kannst du im code deinen Feldern ein Bild aus diesem Array zuweisen, je nach Bedingung die hast.
was dein "Problem" mit if else angeht, da kannst du zum beispiel einfach eine case Abfrage erstellen:

Delphi-Quellcode:
case feldarray[1].bildindex of
  0 : Feldarray[1].Loadfromfile(BildMitBildindex1);
  1 : Feldarray[1].Loadfromfile(BildMitBildindex2);
...
  end;

KahPee 14. Mai 2009 17:22

Re: Lösung für 2D Brett
 
Die unten dargestellte Variante ist schon sehr gut, allerdings hat die noch einen Haken: Ich müsste das ganze für jedes der 49 Felder machen. Schöner wäre, wenn sich eine Prozedur entwickeln lässt, die für alle Felder funktioniert. Geht das evtl über ein dynamisches Array? (Feldarray ist übrigens ein zweidimendsionaler Array[x,y])

Die andere Alternative, die weiterhin ne ganze Ecke eintippen erfordert wäre eine Funktion bei der man Variablen für x und y beim Aufrufen der Funktion abfragen müsste, das geht zur Not auch wenn es keine elegantere Variante gibt.

________
abgesehen von der oberen Frage: Funktioniert folgendes?:

Delphi-Quellcode:
Feldarray[0..7][0..7].Loadfromfile(BildMitBildindex1);
Feldarray[4][4].Loadfromfile(BildMitBildindex2);
am Anfang müssen nämlich alle Felder ein Default-Bild zugewiesen bekommen. Alle bis auf das Feld (4,4) das kriegt eine andere Grafik zugewiesen. Aber im prinzip müsste das so klappen oder?
Wie kann ich die so erzeugten Grafiken nun noch An- und Ausschalten? Funktioniert das dann auch über: Feldarray[x,y].visible:=true/false?

SimStar001 15. Mai 2009 13:19

Re: Lösung für 2D Brett
 
Hallo, im Prinzip geht alles.

Du kannst alles auch mit dynamischen arrays machen, aber wenn es bei deinem Programm immer die selbe größe ist wäre es quatsch.

Wenn du dein Array am Anfang mit einer Default Bitmap füllen willst, kannst du das ganze ganz einfach über eine Schleife machen.

einfach so:

Delphi-Quellcode:
for i := 0 to 6 do
          for u := 0 to 6 do
            Feldarray[i,u].loadfromfile(BildMitBildindexDefault);
nun möchtest du garantiert wissen wo sich jedes bild befinedet, also di x, y koordinaten haben.
Aus diesem Grund würde ich dir raten das ganze jetzt entweder in ein Record zu packen und dann ein Array von diesem Record zu erzeugen, oder das ganze als nächster schritt dann in eine eigene Klasse.

Für Record würde ichs so machen:

Delphi-Quellcode:
type TMeinSpielFeld = record
       Bild : TBitmap;
       Left : Integer;
       Top : Integer;
       // Du kannst hier noch andere Parameter definieren die du brauchst
       // Wie zum Beispiel:
       BildIndex : Integer;
       end;

var MeinSpielFeld : array [0..6,0..6] of TMeinSpielFeld;
Somit hättest du jetzt den Vorteil dass du ein Array hast, welches zu jedem Bitmap auch noch die Koordinaten beinhaltet und alle anderen Sachen die du dann noch Brauchst.

Jetzt kannst du auch einfach die x ( Left) und y (Top) Koordinaten abfragen:

Delphi-Quellcode:
x := MeinSpielFeld[0,0].Left;
y := MeinSpielFeld[0,0].Top;

//usw.

Das ganze als nächsten Schritt in eine Klasse zu packen ist aufwendiger, aber am Ende doch noch mehr von Vorteil. Aber das kannst du später alles immernoch machen.
Versuch das ganze ruhig ersteinmal so hinzubekommen.

KahPee 15. Mai 2009 15:22

Re: Lösung für 2D Brett
 
Nochmal vielen Dank für deine Hilfen, genau so hatte ich mir das inzwischen auch überlegt. Ich glaube, dass ich jetzt die Vorraussetzung für meine Programm zusammen habe. ich werde jetzt mal gucken wie weit ich komme...

mfg Kahpee

SimStar001 15. Mai 2009 15:33

Re: Lösung für 2D Brett
 
Bitte, bei fragen einfach wieder melden!

KahPee 15. Mai 2009 17:28

Re: Lösung für 2D Brett
 
So jetzt kommt das erste Problem:
ich habe einen Array für die Bilderliste erstellt:

Delphi-Quellcode:
piclist: array[0..11] of Tbitmap;

nun wollte ich jeder Variable von piclist ein Bild zuweisen:
Delphi-Quellcode:
piclist[0].assign(pictures/bildname.bmp);
allerdings bekomme ich da immer einen Fehler ausgegeben:
[Fehler] Unit1.pas(152): Undefinierter Bezeichner: 'pictures'

pictures/bildname.bmp ist der Pfad von dem Ort wo die exe das ganze Programm liegt ausgehend. also die exe das Projekt liegt in dem gleichen Ordner wie der Ordner pictures in welchem die Datei Bildname.bmp liegt.


was ist falsch? Muss das Bild vorher schon erzeugt werden mit: piclist[0].create? (was in meinem Programm eher hinderlich als hilfreich wäre...

mfg Kahpee

SimStar001 15. Mai 2009 17:44

Re: Lösung für 2D Brett
 
Hallo, also ersteinmal ist der Pfad den du übergibst ein String, d.h. du musst Ihn in Anführungszeichen schreiben.

Delphi-Quellcode:
piclist[0].assign('pictures/bildname.bmp');
desweiteren musst du auch einen vollständigen Pfad angeben, bsp:

Delphi-Quellcode:
piclist[0].assign('C:\pictures\Bildname.bmp');

KahPee 15. Mai 2009 17:59

Re: Lösung für 2D Brett
 
mh das ist ja eigentlich blöd, da so bei dem kopieren des Programms an einen Ort sich der Pfad auf einem anderen PC ja ändert, falls ich das Programm mal weitergeben will.
Außerdem kriege ich jetzt ne Fehlermeldung:

Delphi-Quellcode:
  piclist[0].assign('pictures/bild.bmp');
([Fehler] Unit1.pas(153): Inkompatible Typen: 'TPersistent' und 'String')



Nächstes Problem bei der konkreten Zuweisung:


ich habe einen Record deklariert in dem dann die Variable Feld.pic: Tbitmap vorkommt. Wie weise ich das nun zu:
Delphi-Quellcode:
Feld.pic.Loadfromfile(piclist[0]);
funktioniert nicht. ([Fehler] Unit1.pas(171): Inkompatible Typen: 'String' und 'TBitmap')

Und auch die Positionsangaben dazu funktionieren nicht:

Delphi-Quellcode:
Feld.pic.left:=x;
Feld.pic.top:=y;
[Fehler] Unit1.pas(172): Undefinierter Bezeichner: 'top'


Sorry, dass ich soviel Fragen stelle, ich bin noch in der Lernphase

Vielen Dank im voraus Kahpee

SimStar001 15. Mai 2009 18:10

Re: Lösung für 2D Brett
 
kleinen moment:

also das mit dem pfad ist einfach, das löst du so:
Delphi-Quellcode:
... assign(ExtractFilePath(ParamStr(0)) + '\pictures\Bild.bmp');

KahPee 15. Mai 2009 18:13

Re: Lösung für 2D Brett
 
Lass dir Zeit will niemanden hetzten mache sowieso gleichmal Pause:

wenn man dies hier benutzt: ExtractFilePath(ParamStr(0)) + dann braucht man aber ein Teil des Programms der das ganze installiert oder? gibt es soetwas vorgefertigt? Ansonsten würde ich dran ja nochmal ne weile sitzen :D:D

schon mal vielen Dank im vorraus

KahPee

SimStar001 15. Mai 2009 18:38

Re: Lösung für 2D Brett
 
ExtracFilePath(ParamStr(0)) gibt genau den Pfad an, indem sich deine ausführende Exe befindet


Check mal Posteingang

KahPee 15. Mai 2009 19:46

Re: Lösung für 2D Brett
 
Könnte das Problem daran liegen, dass ich mit Delphi4 arbeite?

Wüsste jemand wie das da geht?

KahPee 16. Mai 2009 09:00

Re: Lösung für 2D Brett
 
So jetzt mal nen Umfangreiches Update zu dem Thema:

Ich habe inzwischen ne ganze Ecke rumgespielt und bin auch schon weitergekommen.

Im Moment gibt es allerdings immer noch ein paar Fehler.

Delphi-Quellcode:
piclist[0].Loadfromfile(ExtractFilePath(ParamStr(0)) + 'pictures\bild1.bmp');
Die Zeile bringt beim Kompilieren kein Problem aber wenn das ganze durch das Programm abgespielt wird dann:

Zitat:

Im projekt Projekt1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Zugriffsverletzung bei der Adresse 0045A3B5 in Modul 'Projekt1.exe'.Lesen von Adresse 00000000'. Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzten.
Hier nochmal Teile des Programms denn die ganze Grafikgeschichte betrifft:

Die Deklarationen (global! nicht lokal)
Delphi-Quellcode:
type
Tpicpos = record
           top,
           left: integer;
          end;

Tfield = record
           //noch andere Variablen
           pic: Tbitmap;
           picpos: Tpicpos;
        end;


var piclist: array[0..11] of TBitMap;
   fields: array[1..7,1..7] of Tfield;
Die Zusweiung
Delphi-Quellcode:
piclist[0].Loadfromfile(ExtractFilePath(ParamStr(0)) + 'pictures\bild1.bmp');
With fields[1,1] do //für Feld(1,1)
     begin
      pic:= Tbitmap.create; //fields.pic erzeugen
      pic.assign(piclist[0]); // oben geladenes Bild zuweisen
      picpos.top:=21;
      picpos.left:=212;
{Dies sind die beiden Variablen für die Bildposition allerdings gelingt es mit nicht das auch auf das Bild zu beziehen. pic.top / pic.left gibt Fehler aus ([Fehler] Unit1.pas(175): Undefinierter Bezeichner: 'top'). Genauso: pic.picture.top oder pic.picture.bitmap.top}
end;
Das ist eigentlich im Moment der Komplette Teil, der die Grafiken betrifft.

_____
noch ein Update:

Wenn ich dem:
Delphi-Quellcode:
piclist[0].Loadfromfile(ExtractFilePath(ParamStr(0)) + 'pictures\bild1.bmp');
ein
Delphi-Quellcode:
piclist[0]:=Tbitmap.create;
voranstelle bekomme ich nicht mehr den AccessViolation Fehler, allerdings wird das Bild dann auch nicht angezeigt. Was ganz einfach daran liegen könnte, dass dem Bild keine Position zugewiesen wird.

Vielen Dank an alle Helfer, ich hoffe, dass sich der Fehler iwie noch finden lässt


mfg KahPee

Blup 18. Mai 2009 08:28

Re: Lösung für 2D Brett
 
Das Bitmap existiert doch schon, du musst keine neue Bitmap erzeugen sondern nur das Bild aus der Liste der Feldvariablen zuweisen.
Delphi-Quellcode:
With fields[1,1] do //für Feld(1,1)
begin
  pic := piclist[0]; // oben geladenes Bild zuweisen
  picpos.top:=21;
  picpos.left:=212;
end;
Für was du allerdings picpos benötigst ist mir schleierhaft.
Die Position auf dem Bildschirm ergibt sich doch aus der Position im Array und der Breite der Bilder + Rand.

Das Zeichnen auf dem Bildschirm musst du natürlich selbst vornehmen.
Nimm einfach eine TPaintbox und im Ereignis OnPaint zeichnest du alle Felder auf den Canvas diese Komponente.
(Hier würde ich auch die Position berechnen.)
Das Neuzeichnen nach Änderungen am Array löst man mit Paintbox1.Invalidate aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 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