![]() |
Bekomme einfach kein globales "Array of Record" hi
Habe schon einige Treads durchgelesen, bekomme es aber trotzdem nicht hin.
Delphi-Quellcode:
An der genannten Stelle, an der ich die Funktion Get dem auslesen zuweisen will, sagt er, Get und Profilspeicher sind inkompatible Typen.
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); 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... |
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: ![]() |
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... |
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.
|
Re: Bekomme einfach kein globales "Array of Record"
Hier liegt ein besonderes Property vor; nämlich ein Array-Propery.
Delphi-Quellcode:
Am Besten du lässt zunächst die Methoden GetProfile und SetProfile weg und drückst dann STRG+C.
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; Delphi generiert dann automatisch dir richtigen Methodenrümpfe. |
Re: Bekomme einfach kein globales "Array of Record"
Muss da hinter die Property-Deklaration nicht noch ein default?
|
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] |
Re: Bekomme einfach kein globales "Array of Record"
Zitat:
Delphi-Quellcode:
var speicher : TSpeicher;
begin speicher.Profile[5] := ...; // normal speicher[5] := ...; // verkürzte Schreibweise mit default array property |
Re: Bekomme einfach kein globales "Array of Record"
Ich wusste doch, da war sowas :)
|
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 06:43 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