AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Auf ein dyn. Array innerhalb eines Objekts zugreifen??
Thema durchsuchen
Ansicht
Themen-Optionen

Auf ein dyn. Array innerhalb eines Objekts zugreifen??

Ein Thema von phlux · begonnen am 12. Feb 2003 · letzter Beitrag vom 13. Feb 2003
Antwort Antwort
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#1

Auf ein dyn. Array innerhalb eines Objekts zugreifen??

  Alt 12. Feb 2003, 19:27
Hi!
Ich habe ein Object mit definiert:
Delphi-Quellcode:
type
  TContainer = class(TObject)
                 FileCount: LongWord;
                 FileNames: Array of String;
               end;
Wenn ich jetz im Quellcode auf FileNames zugreifen will steht dort als Typ (in der Codeergänzung) ^Array of String. Ich weiß das ich da jetzt mit nem Pointer drauf zugreifen muss nur hab ich nicht die geringste Ahnung wie . Hilfe?!!
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2
  Alt 12. Feb 2003, 19:46
Hallo,

zum Anfang erst mal ein Tipp. Verwende nicht Array of String, sondern definiere als Eigenschaft
FileNames : TStringList; In Deinem Constructor fügst du dann erst mal ein:
FileNames := TStringList.Create; Der Zugriff auf deine Werte in der Stringliste mit Anfügen, löschen, suchen, sortieren .... fällt viel leichter.

Willst du unbedingt ein dynamisches Array verwenden, so schau in Deiner Hilfe unter "dynamische Arrays" oder "Array" mit Verweis auf dynamische Arrays nach. Währe dann aber alles recht umständlich.

Hier ein kurzer Leitfaden:

- Variable FileNames instanziieren mit SetLength,
- vor neuer Längendefinition vorhandene Werte retten (glaube ich),
- suchen etc. immer über Schleife usw.,

Das macht alles keinen richtigen Spaß und zusätzlich viel Schreibarbeit.

Also nehm lieber eine StringListe.

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#3
  Alt 12. Feb 2003, 19:52
Ich will das gleiche aber auch noch mit Nummern vom typ Int64 machen das dass bei meinem Beispiel mit Strings einfacher ist sehe ich ein Aber Integer-Typen in ner StringList zu speicher find ich ziemlich unleet
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4
  Alt 12. Feb 2003, 20:05
Wurscht!

nehme Zeiger und eine TList!

hier mußt du auch ein bischen doktern und bist letztendlich auch nicht sehr viel besser dran als bei den Arrays, aber wenn du zusammengehörige Werte über mehrere Typen benötigst bringt es wieder was.

Bsp.:
Delphi-Quellcode:
 PMyItem = ^TMyItem;
 TMyItem = Record
   MS : String;
   IS : Integer;
 end;
.
.
.

MyItem : PMyItem;

.
.
.

New(MyItem)
MyItem^.ms := 'oki';
MyItem^.IS := 1;
MyList.Add(MyItem);
In Stringlisten kannst du auch Objekte speichern. Das gibt Dir die Möglichkeit an Hand des Stringeintrages einen Suchbezeichner zu Nutzen und im Objektteil alles mögliche abzulegen.
Aufwand/Nutzen muß natürlich berücksichtigt bleiben.

Wenns bei numerischen Werten bleibt wandel sie doch einfach in Strings um und leg sie in der Stringliste ab. Zurück umgekehrt.

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#5
  Alt 12. Feb 2003, 20:12
Okay dann hast du mich jetzt überzeugt
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#6
  Alt 12. Feb 2003, 20:39
Hi!
Also ich hab es jetzt so gedeichselt:
Delphi-Quellcode:
type
  TContainer = class(TObject)
                 FileCount: LongWord;
                 FileNames: Array of String;
               end;
  PContainer = ^TContainer;
Ausführen tu ich es jetzt so:
Delphi-Quellcode:
begin
  New(MyContainer);
  MyContainer^.FileNames[1] := 'Test.dat';
end;
Muss ich jetzt zu Programmende noch MyContainer mit FreeMem freigeben??
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#7
  Alt 12. Feb 2003, 20:47
Moin!

Zitat von oki:
- vor neuer Längendefinition vorhandene Werte retten (glaube ich)
Nein, wenn man ein array mit SetLength(meinArray, length(meinArray) + 1) vergrößert bleibt der alte "inhalt" erhalten

ciao, moin339
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8
  Alt 13. Feb 2003, 10:00
Hallo moin339,
stimmt, bei neuer Längendefinition wird das vorhandene Array mit neuer Länge in einen anderen Speicherbereich mit Inhalt kopiert (reserviert).

Jetzt für Phlux!

Also, ich schreibe es mal auf. (gott gebe, dass alles richtig ist)


Delphi-Quellcode:
type
  TContainer = class(TObject)
                 FFileCount: LongWord;
                 FFileNames: Array of String;
   public
      constructor MyCreate(FileAnz : LongWord);
      Destructor Destroy;
      procedure NewFileAnz(FileAnz : LongWord);
      property FileCount : LongWord read FFileCount;
end;

var MyContainer : TContainer

Constructor TContainer.MyCreate(FileAnz : Longword);
begin
   inherited create;
   NewFileAnz(FileAnz);
end;

Destructor TContainer.Destroy;
begin
  FFileNames := nil;
  inherited destroy;
end;

procedure TContainer.NewFileAnz(FileAnz : Longword);
begin
  SetLength(FFileNames, FileAnz);
  FFileCount := High(FFileNames)+1;
end;

...
-> irgentwo im Hauptprogramm:

Delphi-Quellcode:
   MyContainer := TContainer.MyCreate(5);
.
.
.
Ob Du jetzt weitere Parameter oder eigene Methode für die Übergabe Deiner Werte schreibst bleibt Dir überlassen. Praktisch ist hier zum Bsp. eine Methode

Delphi-Quellcode:
procedure AddFileName(Name : String);

procedure TContainer.AddFileName(Name : String);
begin
  NewFileAnz(FFileCount + 1);
  FFileNames[FFileCount - 1] := Name;
end;
und so weiter.

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#9
  Alt 13. Feb 2003, 10:56
Danke oki du bist mein Mann!!!
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
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