Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi dynamischer Array - direkte Belegung (https://www.delphipraxis.net/53355-dynamischer-array-direkte-belegung.html)

Merlin1988 14. Sep 2005 20:07


dynamischer Array - direkte Belegung
 
Abend!

Es gibt ja prozeduren wo man einen dynamischen Array übergeben muss. Beispiel Polygon

Delphi-Quellcode:
Polygon([Point(4,4),Point(300,300),Point(150,300)]);
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

Delphi-Quellcode:
MeinDynamischerArray := ['e','f','i','o'];
das funktioniert nur nicht.
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!!

n0b0dy 14. Sep 2005 20:08

Re: dynamischer Array - direkte Belegung
 
hm,

also ehrlich gesagt versteh ich überhaupt garnicht was du meinst... :?

Merlin1988 14. Sep 2005 20:10

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.

n0b0dy 14. Sep 2005 20:16

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....

Khabarakh 14. Sep 2005 20:23

Re: dynamischer Array - direkte Belegung
 
Man könnte ja eine generische Prozedur (im Stil der ObjectList-Templates) mit offenem Array-Parameter schreiben :-D .

Merlin1988 14. Sep 2005 20:28

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 ????

Khabarakh 14. Sep 2005 20:40

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:
{$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}
Das Beispiel ist nicht ganz so hässlich:
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.

Phistev 14. Sep 2005 21:54

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