![]() |
dynamischer Array - direkte Belegung
Abend!
Es gibt ja prozeduren wo man einen dynamischen Array übergeben muss. Beispiel Polygon
Delphi-Quellcode:
Wie kann ich den im meinem Programm einen dynamischen Array sofort belegen und zwar so, dass ich ganz einfach einen Wert ändern kann ?? also praktisch so
Polygon([Point(4,4),Point(300,300),Point(150,300)]);
Delphi-Quellcode:
das funktioniert nur nicht.
MeinDynamischerArray := ['e','f','i','o'];
Gibt es einen anderen Weg , ohne dabei für diesen Array eine eigene Prozedur zu schreiben?? Das Ziel ist, einfach einen Wert zu ändern oder einen hinzuzufügen und zwar im Quelltext!! |
Re: dynamischer Array - direkte Belegung
hm,
also ehrlich gesagt versteh ich überhaupt garnicht was du meinst... :? |
Re: dynamischer Array - direkte Belegung
ich möchte einen dynamischen Array sofort und nur durch einen Befehl belegen und dabei alle Werte auf einmal übergeben.
|
Re: dynamischer Array - direkte Belegung
achsoo.
also ich glaube, das geht so nicht. würde das halt in einer schleife oder so machen. du musst zuvor auch noch mit SetLength() die Länge festlegen.... |
Re: dynamischer Array - direkte Belegung
Man könnte ja eine generische Prozedur (im Stil der ObjectList-Templates) mit offenem Array-Parameter schreiben :-D .
|
Re: dynamischer Array - direkte Belegung
dann müsste doch aber auch der Array, in dem die Werte gespeichert werden sollen, übergeben werden .
Wie sehe das auch ???? |
Re: dynamischer Array - direkte Belegung
Das geht auch noch, hätte ich nicht gedacht :mrgreen: .
Den Teil musst du nur einmal sehen, dann kannst du ihn schnell in eine Unit wegsperren :stupid: :
Delphi-Quellcode:
Das Beispiel ist nicht ganz so hässlich:
{$IFNDEF FILL_ARRAY_TEMPLATE}
unit FillArray_Template; interface type _ARRAY_ITEM_ = Integer; {$ENDIF FILL_ARRAY_TEMPLATE} {$IFNDEF FILL_ARRAY_TEMPLATE_SECOND_PASS} type _ARRAY_TYPE_ = array of _ARRAY_ITEM_; function FillArray(AItems: array of _ARRAY_ITEM_): _ARRAY_TYPE_; {$ENDIF FILL_ARRAY_TEMPLATE_SECOND_PASS} {$IFNDEF FILL_ARRAY_TEMPLATE} implementation {$DEFINE FILL_ARRAY_TEMPLATE_SECOND_PASS} {$ENDIF FILL_ARRAY_TEMPLATE} {$IFDEF FILL_ARRAY_TEMPLATE_SECOND_PASS} function FillArray(AItems: array of _ARRAY_ITEM_): _ARRAY_TYPE_; var i: Integer; begin SetLength(Result, Length(AItems)); for i := 0 to High(Result) do Result[i] := AItems[i]; end; {$IFNDEF FILL_ARRAY_TEMPLATE} end. {$ENDIF FILL_ARRAY_TEMPLATE} {$ENDIF FILL_ARRAY_TEMPLATE_SECOND_PASS} {$DEFINE FILL_ARRAY_TEMPLATE_SECOND_PASS}
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, FillArray_Template; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; {$DEFINE FILL_ARRAY_TEMPLATE} type _ARRAY_ITEM_ = string; {$INCLUDE FillArray_template.pas} type StringArray = _ARRAY_TYPE_; implementation {$R *.dfm} {$INCLUDE FillArray_template.pas} procedure TForm1.FormCreate(Sender: TObject); var s: StringArray; i: Integer; begin s := FillArray(['*blubb*', 'Hello', 'World', '*blubb*']); for i := 0 to High(s) do ShowMessage(s[i]); end; end. |
Re: dynamischer Array - direkte Belegung
TCanvas.Polygon (die ist das doch, oder?) braucht kein dynamisches Array. Die Konstruktion nennt man offenes Array, dort kann man auch ein statisches Array einsetzen. Um ein dynamisches Array als Parameter zu erzwingen, müsste man erst einen eigenen Typ deklarieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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