Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi On-The-Fly-Array als Übergabeparameter (https://www.delphipraxis.net/62330-fly-array-als-uebergabeparameter.html)

Akku 2. Feb 2006 22:22


On-The-Fly-Array als Übergabeparameter
 
Hallo,
ich habe folgendes Problem:
Ich würde gerne ein Array aus Booleans der Größe 5 on-the-fly erstellen, an eine Funktion übergeben und dort in einen record abspeichern.

Der Code sieht so aus:

Delphi-Quellcode:
POutputObject = ^TOutputObject;
  TOutputObject = record
    Ref: TOutput;
    [b]fittingDim: array of Boolean;[/b]
  end;

  procedure RegisterOutputClass(ObjRef: TOutput; [b]format: array of Boolean[/b]);

var
  ListOfOutputObjects: TListOfOutputObjects;

implementation

procedure RegisterOutputClass(ObjRef: TOutput; [b]format: array of Boolean[/b]);
var
  POObject : POutputObject;
begin

  new(POObject);

  POObject^.Ref := ObjRef;
  [b]POObject^.fittingDim := format;[/b]
end;

Der Funktionsaufruf sieht so aus:

Delphi-Quellcode:
  RegisterOutputClass(TOutText, [b][true, true, false, false, false][/b]);
Bei der Zuweisung
Delphi-Quellcode:
[b]POObject^.fittingDim := format;[/b]
bekomme ich allerdings immer die Fehlermeldung: Incompatible Types: 'Array' and 'dynamic array'

Weiß jemand weiter?

- Danke!

Gruß - Max

SubData 2. Feb 2006 22:25

Re: On-The-Fly-Array als Übergabeparameter
 
Du musst das Array vorher mit Array of Boolean deklarieren, mit SetLength die Größe zuweisen und danach die Werte in das Array eintragen und damit dann an die Funktion übergeben...

Du übergibst quasi eine "Konstante" (nämlich das Array), wo aber eine Variable (ein dynamisches Array) erwartet wird.

Edit: Kurfassung:

Delphi-Quellcode:
procedure Blah;
var
  bArray : Array of Boolean;
begin
  SetLength(bArray, 5);
  bArray[0] := True;
  bArray[1] := False;
  bArray[2] := True;
  bArray[3] := False;
  bArray[4] := True;
  DeineFunktion(DeinObjekt, bArray); // <-- Damit dürfte es dann gehen :)
end;

Akku 2. Feb 2006 22:37

Re: On-The-Fly-Array als Übergabeparameter
 
: edit - hab Blödsinn geschrieben schnell weg damit.

Akku 2. Feb 2006 22:43

Re: On-The-Fly-Array als Übergabeparameter
 
Leider rufe ich

Zitat:

DeineFunktion(DeinObjekt, bArray); // <-- Damit dürfte es dann gehen :)
aber nicht aus einer Funktion auf, sondern aus dem begin-end-teil einer unit - keine Chance, dass irgendwie kompakt zu lösen?

- THX

Ferber 3. Feb 2006 05:24

Re: On-The-Fly-Array als Übergabeparameter
 
@Akku:
Zitat:

Zitat von Akku
Ich würde gerne ein Array aus Booleans der Größe 5 on-the-fly erstellen, an eine Funktion übergeben und dort in einen record abspeichern.

Was meinst du mit 'in einem Record abspeichern' ?

Soll der Record in eine Datenbank ?

Du definierst Records und Zeiger auf Records. Sollen diese in einer Liste verwaltet werden ?

Hat 'FittingDim' was mit Installationsmaterial zu tun ?
Möchtest du damit kennzeichnen ob verschiedene Dimensionen verfügbar sind ?

Ein wenig mehr Hintergrundinfo wäre schon hilfreich ! :?

Wenn deine Aufgabenstellung so ist wie ich nur vermuten kann, würde ich den Datentyp Integer verwenden und
die verschiedenen Wahrheitswerte herausmaskieren. :gruebel:

Aus einem Integer(=Longint=32Bit) erhältst du 32 Boolean(=256Bit) => Billawerbung: Sie sparen 28 Byte !

Zurück zur ursprünglichen Frage:

Delphi-Quellcode:
type
  TBoolArray = Array of Boolean;

procedure ArrayTest(a:TBoolArray);
begin
end;

function BoolArrayOf(const Values: array of Boolean):TBoolArray;
begin
  // hier code ähnlich 'VarArrayOf'
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ArrayTest(BoolArrayOf([True, False, True]));
end;
Denke so könnt's funktionieren. :?

marabu 3. Feb 2006 08:13

Re: On-The-Fly-Array als Übergabeparameter
 
Hallo Max,

unabhängig davon, ob es eine bessere Lösung gibt, lässt sich dein syntaktisches Problem durch die Verwendung eines expliziten Array-Typs lösen. Ersetze einfach "array of Boolean" durch Types.TBooleanDynArray und alles wird gut.

Grüße vom marabu

Akku 5. Feb 2006 16:24

Re: On-The-Fly-Array als Übergabeparameter
 
also su Types.TBooleanDynArray hab ich leider nichts gefunden.
Ich werde es jetzt wohl in einem Integer maskieren.

Danke!

marabu 5. Feb 2006 17:04

Re: On-The-Fly-Array als Übergabeparameter
 
Types.TBooleanDynArray ist die sogenannte qualifizierte Schreibweise. Es soll dir sagen, dass der Typ TBooleanDynArray in der Unit Types deklariert ist. Du solltest vielleicht die von dir verwendete Delphi-Version in dein DP-User-Profil eintragen.

Freundliche Grüße

marabu


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