Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   dynamisches Array in Eigener Klasse kann nicht erzeugt werde (https://www.delphipraxis.net/134390-dynamisches-array-eigener-klasse-kann-nicht-erzeugt-werde.html)

SimStar001 21. Mai 2009 09:28


dynamisches Array in Eigener Klasse kann nicht erzeugt werde
 
Hallo, hier mal meine neue Klasse:
Delphi-Quellcode:
unit Whazzup;

interface
type TWhazzupData = record
      CallSign : String;
      VID : String[6];
      RealName : String;
      ClientType : String;
      Frequency : String[7];
      Latitude : Extended;
      Longitude : Extended;
      Alitutde : Integer;
      GroundSpeed : Integer;
      Planned_Aircraft : String;
      Planned_WakeTurbulance : String[1];
      Planned_TasCruise : String;
      Planned_DepartureAirport : String[4];
      Planned_Altitude : String;
      Planned_DestinationAirport : String[4];
      Server : String;
      Protrevision : String;
      Rating : String;
      Transponder : String[4];
      FacilityType : String;
      VisualRange : String;
      Planned_Revision : String;
      Planned_FlightType : String[1];
      Planned_DepartureTime : String;
      Planned_ActualDepartureTime : String;
      Planned_HoursEnRoute : String;
      Planned_MinutesEnRoute : String;
      Planned_HoursFuel : String;
      Planned_MiutesFuel : String;
      Planned_AlternateAirport : String[4];
      Planned_Remarks : String;
      Planned_Route : String;
      Planned_DepartureAirportLatitude : Extended;
      Planned_DepartureAirportLongitude : Extended;
      Planned_DestinationAirportLatitude : Extended;
      Planned_DestinationAirportLongitude : Extended;
      ATIS_Message : String;
      Time_LastATISRecieved : String;
      Time_Connected : String;
      Client_SoftwareName : String;
      Client_SoftwareVersion : String;
      Adminrating : String;
      ATC_or_Pilot_Rating : String;
      Planned_AlternatAirport2 : String[4];
      Planned_TypeOfFlight : String[1];
      Planned_PersonsOnBord : String;
      True_Heading : Integer;
      OnGround : Boolean;
      end;

type TWhazzupArray = array of TWhazzupData;

type TWhazzup = class(TObject)
      private
      FWhazzup : TWhazzupArray;

      {read / write functions}
      function readCallSign : String;
      procedure writeCallSign(ACallSign : String);

      public
      property CallSign : string read readCallSign write writeCallSign;

      constructor create;
      destructor destroy; override;

      end;
 

implementation

{Constructor}
constructor TWhazzup.create;
begin

end;

{destructor}
destructor TWhazzup.destroy;
begin

end;

{Read / Write Properties}
function TWhazzup.readCallSign: String;
begin

end;

procedure TWhazzup.writeCallSign(ACallSign : String);
begin

end;

end.

Meine Frage ist jetzt, wenn ich die Klasse erzeuge, dann möchte ich auf die Inhalte von FWhazzup zugreifen. Da FWhazzup ein Array ist, muss ich ja Irgendwie noch einen Index dafür übergeben.
Wie mache ich das am besten?
Das ganze sollte am Ende so aussehen wenn ich es aufrufe:
Delphi-Quellcode:
 Whazzup := TWhazzup.create;
Whazzup[0].CallSign := 'Test';
wie mache ich dass dann in der Klasse mit dem Überabe Index?

Vielen Dank!

himitsu 21. Mai 2009 09:33

Re: Frage zu Array in Eigener Klasse
 
das ginge z.B. so:
Delphi-Quellcode:
Private
  Function GetWhazzup(Index: Integer): Whazzup;
  Procedure SetWhazzup(Index: Integer; Const Value: Whazzup);
Public
  Property Whazzup[Index: Integer]: TWhazzupData Read GetWhazzup Write SetWhazzup;
also
Delphi-Quellcode:
Private
  Function GetArrayProp(Param1, Param2, ...): Type;
  Procedure SetArrayProp(Param1, Param2, ..., Type);
Public
  Property ArrayProp[Param1, Param2, ...]: Type Read GetArrayProp Write SetArrayProp;

SimStar001 21. Mai 2009 09:35

Re: Frage zu Array in Eigener Klasse
 
Vielen Dank, das werde ich gleich mal auasprobieren!

SimStar001 21. Mai 2009 09:56

Re: Frage zu Array in Eigener Klasse
 
Ich kann irgendwie die Größe des dynamische Array nicht setzen? Wieso nicht?

Delphi-Quellcode:
procedure TWhazzup.SetLength(AValue : Integer);
begin
  setLength(self.FWhazzup,AValue);
end;
Fehlermeldung ==> [Fehler] Whazzup.pas(99): Inkompatible Typen: 'Integer' und 'dynamic array'

Die Muhkuh 21. Mai 2009 10:06

Re: dynamisches Array in Eigener Klasse kann nicht erzeugt w
 
Wäre eine TObjectList nicht angebrachter und einfacher Hand zuhaben?

himitsu 21. Mai 2009 10:08

Re: Frage zu Array in Eigener Klasse
 
Code:
procedure TWhazzup.[b]SetLength[/b](AValue : Integer);
begin
  [b]SetLength[/b](Self.FWhazzup, AValue);
end;
du rufst deine eigene SetLength-Funktion auf und die hat nunmal wirklich nur einen Integer als (ersten) Parameter :zwinker:

entweder anderen Namen für deine Prozedur wählen oder den Namespace verwenden:
Delphi-Quellcode:
procedure TWhazzup.SetLength(AValue : Integer);
begin
  System.SetLength(FWhazzup, AValue);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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 by Thomas Breitkreuz