Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Array Referenz in Klasse (https://www.delphipraxis.net/153505-array-referenz-klasse.html)

WoGe 5. Aug 2010 15:59

Array Referenz in Klasse
 
Hallo
wie bekomme ich ein variables Array als Referenz in eine Klasse?
Delphi-Quellcode:
type
TMeinArray = Array of TMeinRecord
...
Var
 MeinArray : TMeinArray
..
 SetLengt(MeinArray,10);

...

Procedure Test(var aArray:TmeinArray);
begin
  x := aArray[5].Irgendwas
end;
Das funktioniert soweit.
In dieser Methode kann ich jetzt über den Name aArray zugreifen.

Wie bekomme ich jetzt folgendes hin - in meiner Klasse habe ich
Delphi-Quellcode:
..
fArray : TMeinArray;

...
procedure SetArray(var aArray:TMeinArray);
begin
  fArray := aArray;
end;
Das funktioniert nicht

Ich hoffe ich habe es verständlich genug formulieren können.

Grüsse
wo

himitsu 5. Aug 2010 16:09

AW: Array Referenz in Klasse
 
Du willst also in dem fArray die selben Änderungen mitbekommen, bzw. genau die selben Daten haben, wie in dem externen Array?

Wenn ja, dann garnicht.

Man könnte sich aber eine Referenz auf die Variable holen, in welcher das externe Array liegt. (diese Variable darf dann aber nicht vorzeitig entfernt/freigegeben werden)

oder Besser du nimmst kein Array, sondern ein Objekt und legst darin ein Array-Property an.

WoGe 5. Aug 2010 16:36

AW: Array Referenz in Klasse
 
Hallo

ja ich wollte eigentlich in fArray das selbe haben, wie im externen Array
Ich wollte dieses eigentlich in den "Namespace" meiner Klasse importieren

Das Ziel ist das Array (oder ein anderes gleichen Typs) von der Klasse bearbeiten zu lassen
Und danach noch andere Methoden darauf anzuwenden

Grüsse
wo

DeddyH 5. Aug 2010 16:47

AW: Array Referenz in Klasse
 
Und wieso übergibst Du das Array als Var-Parameter? Wenn ich Dich richtig verstanden habe, willst Du keine Kopie erstellen, sondern mit dem übergebenen Array hantieren, richtig? Hast Du es einmal so versucht?
Delphi-Quellcode:
type
  TMyRec = record
    intval: integer;
  end;

  TMyArray = array of TMyRec;

  TMyClass = class
  private
    FArray: TMyArray;
    procedure SetArray(const Value: TMyArray);
  public
    procedure ShowCount;
    property MyArray: TMyArray read FArray write SetArray;
  end;

procedure TMyClass.SetArray(const Value: TMyArray);
begin
  FArray := Value;
end;

procedure TMyClass.ShowCount;
begin
  ShowMessage(inttostr(Length(FArray)));
end;

WoGe 5. Aug 2010 17:27

AW: Array Referenz in Klasse
 
Leider gibt das eine Zugriffs-Verletzung
Ich greife zur zeit (testhalber) nur lesend zu

Übrigens dachte ich das das Const eine Lokale Kopie anlegt??

Grüße
wo

DeddyH 5. Aug 2010 17:45

AW: Array Referenz in Klasse
 
Nein, const legt keine Kopie an, sondern übergibt das Original schreibgeschützt. Dass da eine AV kommt liegt wahrscheinlich daran, dass Du noch kein Array angelegt und übergeben hast. Deshalb wird da Length() auf nil angewendet.

WoGe 5. Aug 2010 18:08

AW: Array Referenz in Klasse
 
Wenn man die Property direkt vor dem ausführen der Methode befüllt
funktioniert dies.
Befülle ich es direkt nach dem Setlength gibts die AV

Anscheinend darf der Inhalt des Array zwischen Zusweiung an Property und Verwendung nicht verändert werden.
Deswegen hatte ich ursprünglich auch einen VAR Parameter.

Kann man dem Übergabemechanismus irgendwie anders beibringen, das das eigentlich nur ein Pointer ist?

Grüsse
wo

DeddyH 5. Aug 2010 18:14

AW: Array Referenz in Klasse
 
Kannst Du mal den fehlerverursachenden Quellcode posten?

WoGe 5. Aug 2010 18:29

AW: Array Referenz in Klasse
 
Hmmm
ich glaube nicht das es daran liegt.
Delphi-Quellcode:
procedure TFrame10Sec.TestMaleDaten;
var
  i: Integer;
  k: Integer;
begin
  // -----------------------------------------------------------------
  aChart.SuppressPaint := True;
  aChart.ClearGraf;
  aChart.ActiveLayer := 1;
  aChart.Scale1X.RangeLow := 0;
  aChart.Scale1X.RangeHigh := High(fMessdaten);
  aChart.Scale1Y.RangeLow := 00000;
  aChart.Scale1Y.RangeHigh := 60000;
  aChart.DataColor := clGray;

  k := High(fMessdaten) -1 ;
  aChart.MoveTo(0, fMessdaten[i].GetWert2);
  for i := 1 to k do
  begin
    aChart.DrawTo(i, fMessdaten[i].GetWert2);
  end;

  aChart.SuppressPaint := False;
end;
Wie gesagt wenn das property dierekt vor dem Aufruf dieser Procedur befüllt wird gehts, wenn etwas früher gehts nicht

Grüsse
wo

DeddyH 5. Aug 2010 19:05

AW: Array Referenz in Klasse
 
Was mir spontan auffällt:
Zitat:

Delphi-Quellcode:
aChart.MoveTo(0, fMessdaten[i].GetWert2);

Welchen Wert hat i zu diesem Zeitpunkt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr.
Seite 1 von 2  1 2      

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