![]() |
Array's in Klassen
Hi Ich habe da ein kleines Problem
Ich brauche die Möglichkeit ein Dynamisches Array als Parameter einer Function zu übergeben. Das geht ja bekanntlich nicht. Also dachte ich mir bastle ich ne Klasse die das darstellt. Gesagt getan.
Delphi-Quellcode:
Diese Klasse tut wunderbar und nur für neugierige hier noch der Constructor.
Type
TPencildata = Array[0..8] Of Boolean; // Bleibt Konstant dan mus es nicht auch noch zu einer Klasse werden !! Tsinglefield = Record Value: byte; // Die Zahl im Feld Fixed: Boolean; // Das Feld beinhaltet eine Nicht Löschbare Zahl !! Owner: byte; // Die zugehörigtkeit , zu den 9 er Gruppen Marked: Boolean; // Wenn True dann ist dieses Feld Entweder belegt oder won der Grad behandelten Routine als belegt gemerkt. Pencils: TPencildata; // Die Pencil Daten End; TNxNField = Class private Field: Array Of Array Of Tsinglefield; Function getvalue(x, y: integer): Byte; Procedure Setvalue(x, y: integer; z: Byte); Function getFixed(x, y: integer): Boolean; Procedure SetFixed(x, y: integer; z: Boolean); Function getOwner(x, y: integer): Byte; Procedure Setowner(x, y: integer; z: Byte); Function getMarked(x, y: integer): Boolean; Procedure SetMarked(x, y: integer; z: Boolean); Function getPencils(x, y, z: integer): Boolean; Procedure SetPencils(x, y, z: integer; Value: Boolean); Function GetPencilsdata(x, y: integer): TPencildata; Function getnumbercount: byte; public Constructor Create(n: Byte); Destructor destroy; override; Property Value[x, y: integer]: Byte read Getvalue write setvalue; Property Fixed[x, y: integer]: Boolean read GetFixed write setFixed; Property Owner[x, y: integer]: Byte read GetOwner write setOwner; Property Marked[x, y: integer]: Boolean read GetMArked write setMarked; Property Pencils[x, y, z: integer]: Boolean read GetPencils write setPencils; Property Pencildata[x, y: integer]: TPencildata read GetPencilsdata; // write setPencils; Property Numbercount: Byte read Getnumbercount; End;
Delphi-Quellcode:
Das Lustige ist nur das ein Array normalerweise mit
Constructor Tnxnfield.Create(n: Byte);
Begin Inherited create; Setlength(Field, n, n); End; Destructor Tnxnfield.destroy; Begin Setlength(Field, 0, 0); Inherited destroy; End;
Delphi-Quellcode:
Angesprochen werden kann.
Type Bla = Array of array of Boolean;
.. Var bl:Bla; Begin .. bl[x,y]:=true; .. end; Bei meiner Klassen version geht das nicht. Da geht das nur mit.
Delphi-Quellcode:
Weis jemand wie ich die Klasse Verändern mus das ich es so Programmieren kann wie ich das bisher gewöhnt bin.
..
var Value:TNxNField; begin .. Value.Value[x, y] = 0; // Viel schöner wäre doch // Value[x, y].Value = 0; .. end; Oder geht es gar nicht anders ? |
Re: Array's in Klassen
//Edit: War quatsch, hatte mich verlesen, gleich kommt der nächste Versuch ;)
Naja, da besteht ja schon ein gewisser Unterschied. Im ersten Fall hast du einfach nur ein Array. Da kannst du natürlich einfach so draufzugreifen. Im zweiten Fall hast du ein Array, das eine Property eines Objektes ist. Was du machen kannst ist, Value als Standard-Eigenschaft deiner Klasse zu machen (mit dem Schlüsselwort default sollte das gehen), dann kannst du per
Delphi-Quellcode:
direkt auf das Array zugreifen (so wie es auch bei den Items der Stringlist funktioniert).
Value[x,y] := ...
Dein Aufruf
Delphi-Quellcode:
ist aber (sorry) kompletter Quatsch ;)
Value[x,y].Value := ...
|
Re: Array's in Klassen
Hi.
Zitat:
Delphi-Quellcode:
Grüße vom marabu
type
TMatrix = array of array of Extended; var matrix: TMatrix; procedure MatrixInitRandom(var m: TMatrix); var i, j: Integer; begin for i := Low(m) to High(m) do for j := Low(m[i]) to High(m[i]) do m[i, j] := Random; end; |
Re: Array's in Klassen
@leddl
thx die Default bringt mir net viel da ich ja eigentlich alle Bräuchte. Aber nu weis ich wenigstens das es wirklich net geht. @marabu MAn kann das so schon machen nur bringt es bei mir jede menge Fehler mit sich. Bisher hat es nie funktioniert. Nutzt du auch d5 oder höher ? |
Re: Array's in Klassen
Mein Beispiel habe ich mit D5 laufen lassen.
marabu |
Re: Array's in Klassen
Ich verwende Delphi 7 und benutze regelmäßig dynamische Arrays als Parameter und auch als Rückgabewerte, klappt ohne Probleme, solange man darauf achtet, dass man diese auch mit SetLength auf die richtige Größe bringt ;>
|
Re: Array's in Klassen
@Corpsman: Ich denke, Du solltest die Fehler in deinem Code eliminieren. Es ist fast immer einfacher, die Delphi-Mittel zu verwenden. marabu (Hi :hi: ) hat Dir bereits gezeigt, das Du eventuell mit deiner Einschätzung, das ginge alles nicht, daneben liegst.
|
Re: Array's in Klassen
So denn habt ihr mich überzeugt das ich einem Irrglauben aufsas.
Allerdings habe ich mit der jetzigen Version das gefühl das ich deitlich schneller bin. Da ich hier ja nur mit Ppointern arbeite. Die ich auch unbedingt brauche damit ich sie auch meinen Stack poshen und Popen kann ;). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 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