Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bekomme einfach kein globales "Array of Record" hin.... (https://www.delphipraxis.net/140908-bekomme-einfach-kein-globales-array-record-hin.html)

JBJHJM 28. Sep 2009 21:10


Bekomme einfach kein globales "Array of Record" hi
 
Habe schon einige Treads durchgelesen, bekomme es aber trotzdem nicht hin.

Delphi-Quellcode:
TProfil = record
    Name, Option1, Option2 : String;
    Wert: integer;
  end;

Profilspeicher = Array[1..30] of TProfil;

TSpeicher = class
  private
    FProfilspeicher: Profilspeicher;
    function Get(Index: Integer): string;
    procedure Put(Index: Integer; S: string);
  public
    property PProfilspeicher: Profilspeicher read Get; //Hier ist der aktuelle Fehler!!
  end;

...

implementation

function TForm13.Get(Index: Integer): string;
procedure TForm13.Put(Index: Integer; S: string);
An der genannten Stelle, an der ich die Funktion Get dem auslesen zuweisen will, sagt er, Get und Profilspeicher sind inkompatible Typen.
Vermutlich mache ich nur wieder einen weiteren blöden Denkfehler, aber ich komme einfach nicht dahinter.

Wenns total falsch ist, wie mache ich es dann?
Mein Ziel ist es, ein allen Units zugängliches Array von einem Record zu erstellen...

DeddyH 28. Sep 2009 21:13

Re: Bekomme einfach kein globales "Array of Record"
 
Schau mal, was Get zurückgibt ;)

[edit] Übrigens: willst Du das ganze Array oder ein einzelnes Element zurückgeben? Das wird mir aus dem Code nicht klar. [/edit]
[edit2] Schau mal hier: http://www.delphipraxis.net/internal...=712970#712970 [/edit2]

JBJHJM 28. Sep 2009 21:43

Re: Bekomme einfach kein globales "Array of Record"
 
Ich sags ja, wie immer zu blöd, sowas selber zu erkennen :D
Es soll letztendlich nur ein Element des Arrays übergeben werden, allerdings habe ich das momentan noch vernachlässigt, das kommt dann, wenn er beim Kompilieren keine Fehler mehr anzeigt...

DeddyH 28. Sep 2009 21:46

Re: Bekomme einfach kein globales "Array of Record"
 
Dann schau Dir meinen Link von oben in Ruhe an. Übrigens, wenn Du den Record auch noch in einer typisierten Datei speichern willst, solltest Du die Strings im Record als ShortStrings deklarieren, da sonst nur der Zeiger gespeichert wird und nicht der String selbst.

sx2008 28. Sep 2009 22:25

Re: Bekomme einfach kein globales "Array of Record"
 
Hier liegt ein besonderes Property vor; nämlich ein Array-Propery.
Delphi-Quellcode:
TProfil = record
    Name, Option1, Option2 : String;
    Wert: integer;
  end;

Profilspeicher = Array[1..30] of TProfil;

TSpeicher = class
  private
    FProfile: Profilspeicher;
    function GetProfile(Index: Integer): TProfil;
    procedure SetProfile(Index: Integer; P:TProfil);
  public
    property Profile[Index:Integer]: TProfil read GetProfile write SetProfile;
  end;

function TSpeicher.GetProfile(Index: Integer): TProfil;
begin
  if (Index >= Low(FProfile)) and (Index<=High(FProfile)) then
    Result := FProfile[index]
  else
    raise ERangeError.Create('ungültiger Index TSpeicher.Profile['+IntToStr(Index)+']');
end;
Am Besten du lässt zunächst die Methoden GetProfile und SetProfile weg und drückst dann STRG+C.
Delphi generiert dann automatisch dir richtigen Methodenrümpfe.

DeddyH 29. Sep 2009 08:29

Re: Bekomme einfach kein globales "Array of Record"
 
Muss da hinter die Property-Deklaration nicht noch ein default?

himitsu 29. Sep 2009 08:34

Re: Bekomme einfach kein globales "Array of Record"
 
Nein, muß nicht ... kann aber
bei einem Array-Property bedeutet das Default nur, daß man in der Klasse ohne den PropertyNamen auf das Array zugreifen kann.

praktisch statt Speicher.Profile[i] nur Speicher[i]

sx2008 29. Sep 2009 08:36

Re: Bekomme einfach kein globales "Array of Record"
 
Zitat:

Zitat von DeddyH
Muss da hinter die Property-Deklaration nicht noch ein default?

Jupp, wäre empfehlenwert, um die verkürzte Schreibweise benützen zu können:
Delphi-Quellcode:
var speicher : TSpeicher;
begin
  speicher.Profile[5] := ...; // normal
  speicher[5] := ...; // verkürzte Schreibweise mit default array property

DeddyH 29. Sep 2009 08:52

Re: Bekomme einfach kein globales "Array of Record"
 
Ich wusste doch, da war sowas :)

JBJHJM 29. Sep 2009 13:11

Re: Bekomme einfach kein globales "Array of Record"
 
Vielen Dank, funktioniert so weit, werde trotzdem noch ein wenig rumprobieren...


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