Autor Beitrag
willy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

WinXP Pro (SP2), Suse9.3 Pro, Debian6

BeitragVerfasst: Mi 28.12.05 16:05 
Geht das? Eine Zuweisung sollte dann irgentwie so aussehen:

ausblenden Delphi-Quelltext
1:
array['test'] := 'was_auch_immer'// Der Wert sollte auch ein String sein					




Wenn es funktioniert, wie erstelle ich ein solches Array?

Danke schonmal

MfG willy

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mi 28.12.05 16:21 
Was du suchst ist ein assiozatives Array, sowas hat Delphi nicht von sich aus ( in .NET vllt., keine Ahnung ). Musst du also selbst baun.

Wenns dir nur um Strings geht, könntest du mit ner StringList weiterkommen, wo jeder Eintrag in der Form <Index>=<Inhalt> aufgebaut ist. Stichwort Names und Values.

_________________
Bravery calls my name in the sound of the wind in the night...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 28.12.05 16:22 
Moin!

Nein, das geht nicht. Du könntest die Key-Strings in eine StringListe tun und dann mit .IndexOf arbeiten.

cu
Narses
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 28.12.05 22:16 
Stichwort "selber bauen":
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
type
  TAssocList = class
    FKeys, FValues: TStringList;
   protected
     function GetStr(Key: String): String;
     procedure SetStr(Key: String; Value: String);
     constructor Create;
     destructor Destroy; override;
   public
     property Strings[Key: String]: String read GetStr write SetStr; default;
     procedure Delete(Key: String);
     procedure Clear;
  end;

constructor TAssocList.Create;
begin
  FKeys := TStringList.Create;
  FValues := TStringList.Create;
end;

destructor TAssocList.Destroy;
begin
  if FKeys <> nil then FKeys.Free;
  if FValues <> nil then FValues.Free;
end;

function TAssocList.GetStr(Key: String): String;
var
 I: Integer;
begin
  I := FKeys.IndexOf(Key);
  if I >= 0 then
   Result := FValues[I];
end;

procedure TAssocList.SetStr(Key: String; Value: String);
var
 I: Integer;
begin
  I := FKeys.IndexOf(Key);
  if I >= 0 then
   FValues[I] := Value else
  begin
   FKeys.Add(Key);
   FValues.Add(Value);
  end;
end;

procedure TAssocList.Delete(Key: String);
var
 I: Integer;
begin
  I := FKeys.IndexOf(Key);
  if I >= 0 then
  begin
   FKeys.Delete(I);
   FValues.Delete(I);
  end;
end;

procedure TAssocList.Clear;
begin
  FKeys.Clear;
  FValues.Clear;
end;

Anwendungsbeispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.ButtonClick(Sender: TObject);
var
 MyArray: TAssocList;
begin
  MyArray := TAssocList.Create;
  MyArray['test'] := 'was_auch_immer';
  MyArray.Free;
end;
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Mi 28.12.05 23:13 
ich hab irgendwo in der Delphi-Hilfe mal gelesen, dass das bei Properties einer Klasse geht :gruebel: es ist auf jeden Fall irgendwie möglich, denn bei TJvFormStorage.StoredValue[] muss man einen String als Array-"Index" angeben ;)
ich suche nochmal raus, wie und in wie fern das geht...

|EDIT:
Delphi Online Help (Delphi 2005) hat folgendes geschrieben:
Array-Eigenschaften

Array-Eigenschaften sind indizierte Eigenschaften. Sie werden beispielsweise für die Einträge eines Listenfeldes, die untergeordneten Objekte eines Steuerelements oder die Pixel einer Bitmap-Grafik verwendet.

Die Deklaration einer Array-Eigenschaft enthält eine Parameterliste mit den Namen und Typen der Indizes. Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
property Objects[Index: Integer]: TObject read GetObject write SetObject; 
property Pixels[X, Y: Integer]: TColor read GetPixel write SetPixel; 
property Values[const Name: string]: string read GetValue write SetValue;

Das Format der Liste ist mit dem Format der Parameterliste einer Prozedur oder Funktion identisch. Der einzige Unterschied besteht darin, dass die Parameterdeklarationen nicht in runden, sondern in eckigen Klammern angegeben werden. Im Gegensatz zu Arrays, bei denen nur ordinale Indizes erlaubt sind, können die Indizes von Array-Eigenschaften einen beliebigen Typ haben.

Bei Array-Eigenschaften müssen die Zugriffsbezeichner keine Felder, sondern Methoden angeben. Die Methode in einem read-Bezeichner muss eine Funktion sein, bei der Anzahl, Reihenfolge und Typ der Parameter mit der Indexparameterliste der Eigenschaft identisch sind und der Ergebnistyp mit dem Typ der Eigenschaft übereinstimmt. Die Methode in einem write-Bezeichner muss eine Prozedur sein, bei der Anzahl, Reihenfolge und Typ der Parameter mit der Indexparameterliste der Eigenschaft identisch sind. Außerdem muss ein zusätzlicher Wert- oder const-Parameter mit dem Typ der Eigenschaft vorhanden sein.

Die Zugriffsmethoden für die obigen Array-Eigenschaften können beispielsweise folgendermaßen deklariert werden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function GetObject(Index: Integer): TObject; 
function GetPixel(X, Y: Integer): TColor;
function GetValue(const Name: string): string;
procedure SetObject(Index: Integer; Value: TObject); 
procedure SetPixel(X, Y: Integer; Value: TColor);
procedure SetValue(const Name, Value: string);

Auf eine Array-Eigenschaft kann durch Indizieren ihres Bezeichners zugegriffen werden. So sind beispielsweise die Anweisungen
ausblenden Delphi-Quelltext
1:
2:
3:
if Collection.Objects[0] = nil then Exit; 
Canvas.Pixels[1020] := clRed; 
Params.Values['PATH'] := 'C:\BIN';

mit den folgenden Anweisungen identisch:
ausblenden Delphi-Quelltext
1:
2:
3:
if Collection.GetObject(0) = nil then Exit; 
Canvas.SetPixel(1020, clRed); 
Params.SetValue('PATH''C:\BIN');

Wenn Sie die Direktive default nach der Definition einer Array-Eigenschaft angeben, wird diese als Standardeigenschaft der betreffenden Klasse verwendet. Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type 
   TStringArray = class 
    public 
       property Strings[Index: Integer]: string ...; default
          ... 
    end;

Auf die Array-Standardeigenschaft einer Klasse kann mit der Kurzform Objekt[Index] zugegriffen werden. Diese Anweisung ist mit Objekt.Eigenschaft[Index] identisch. Ausgehend von der vorhergehenden Deklaration kann z. B. StringArray.Strings[7] zu StringArray[7] verkürzt werden. Jede Klasse kann nur eine Standardeigenschaft haben. Das Ändern oder Verbergen der Standardeigenschaft in abgeleiteten Klassen kann zu unerwünschten Ergebnissen führen, da der Compiler Bindungen an Eigenschaften immer statisch vornimmt.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 28.12.05 23:41 
Hast du denn überhaupt meinen Code oben angeschaut?
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Mi 28.12.05 23:46 
Ehrlich gesagt nicht ;) du hast angefangen eine neue Klasse allein fürs array zu implementieren, daher ging ich von einer anderen Lösung aus, sry.