Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Beliebige Menge von Objekten als Parameter übergeben? (https://www.delphipraxis.net/75681-beliebige-menge-von-objekten-als-parameter-uebergeben.html)

PeterPanino 23. Aug 2006 14:08


Beliebige Menge von Objekten als Parameter übergeben?
 
Wie kann man in einer Prozedur als Parameter eine Menge von nicht-ordinalen Objekten übergeben, z.B.:

Delphi-Quellcode:
var
  e1, e2, e3: TEdit;

// Fehler: E2001 Ordinaltyp erforderlich:
procedure DoSomething(MyEdits: Set of TEdit);
begin
  //
end;

//...
  DoSomething([e1, e3]);
//...
Ich möchte für den Paramater keinen Array-Typ verwenden, sondern am besten einen Typ, mit dem eine beliebige Menge von Objekten übergeben werden kann.

hanselmansel 23. Aug 2006 14:16

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Wenn es dir darum geht, eine beliebige Menge zu übergeben, kannst du ein dynamisches Array verwenden.

MfG,

hanselmansel

Khabarakh 23. Aug 2006 14:17

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Für so etwas gibt es Delphi-Referenz durchsuchenOffene Array-Parameter.

Jürgen Thomas 23. Aug 2006 14:27

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Wenn es verschiedenartige Parameter sein sollen, kannst Du Dich am Quelltext der Format-Funktion orientieren:
{Delphi_2005}\source\Win32\rtl\sys\SysUtils.pas
Delphi-Quellcode:
procedure FmtStr(var Result: string; const Format: string;
  const Args: array of const);
Jürgen

PeterPanino 23. Aug 2006 14:48

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von Jürgen Thomas
Wenn es verschiedenartige Parameter sein sollen, kannst Du Dich am Quelltext der Format-Funktion orientieren:
{Delphi_2005}\source\Win32\rtl\sys\SysUtils.pas
Delphi-Quellcode:
procedure FmtStr(var Result: string; const Format: string;
  const Args: array of const);
Jürgen

Hm, in der Hilfe ist Args als array of TVarRec deklariert, im Quelltext von FmtStr jedoch als array of const. ???

PeterPanino 23. Aug 2006 14:57

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
... und FmtStr ruft FormatBuf auf, das eine Assembler-Routine ist ...

Bei Arrays muss man den einzelnen Array-Elementen vorher die Werte zuweisen. Eleganter und einfacher wäre es, wenn man die Objektnamen einfach als Parameter in den Prozeduraufruf schreiben könnte, also z.B. DoSomething([e1, e3]); aber das geht ja nicht, weil Set of kein ordinaler Typ ist.

Geht das also in Object.Pascal nicht?

Meflin 23. Aug 2006 14:58

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Geht das also in Object.Pascal nicht?
Nein.


hanselmansel 23. Aug 2006 15:04

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Soweit ich weiß kannst du sehrwohl Mengen als Parameter übergeben. Du hast nur versucht, eine Menge von Objekten (oder auch deren Namen... :gruebel: ) zu erstellen, und daran hapert es AFAIK. Die Elemente müssen einen ordinalen also zählbaren Typ haben.
Es funktioniert zum Beispiel mit allen Zahlen bis 255 oder den Wochentagen oder ein paar Farben oder so... :|

Darum wird dir oben geraten ein Array von Objekten zu übergeben. :thumb:

moonwhaler 23. Aug 2006 15:06

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Wie also genau funktioniert es dann?
Zitat:

Zitat von Meflin
Zitat:

Geht das also in Object.Pascal nicht?
Nein.

Wie also funktioniert es dann genau? Mich würde das auch interessieren...

Gruss.

P.S.: Eine doppelte Verneinung ist ja wieder als Bejaung zu verstehen, richtig?

Khabarakh 23. Aug 2006 15:08

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von PeterPanino
Eleganter und einfacher wäre es, wenn man die Objektnamen einfach als Parameter in den Prozeduraufruf schreiben könnte, also z.B. DoSomething([e1, e3]);

Genau das ermöglichen dir doch offene Array-Parameter :gruebel: .

hanselmansel 23. Aug 2006 15:09

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von moonwhaler
Wie also funktioniert es dann genau? Mich würde das auch interessieren...

Ohne es nochmal auf absolute Richtigkeit zu prüfen: So wie es Jürgen und Khabarakh gesagt haben.

red box missing...

Meflin 23. Aug 2006 15:12

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von moonwhaler
P.S.: Eine doppelte Verneinung ist ja wieder als Bejaung zu verstehen, richtig?

Nein, esgeht nicht, oder ja, es geht nicht heisst beides es geht nicht ;)

das was du willst geht eben nur über arrays, aber nicht in der Form Foo(Param1, Param2,...ParamN)!!


Khabarakh 23. Aug 2006 15:14

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von Meflin
aber nicht in der Form Foo(Param1, Param2,...ParamN)!!

Die will er doch gar nicht :zwinker: . Die Aufrufform in seinem ersten Beitrag lässt sich exakt mit offenen Array-Parametern bewerkstelligen.

PeterPanino 23. Aug 2006 15:24

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von Meflin
aber nicht in der Form Foo(Param1, Param2,...ParamN)!!

Die will er doch gar nicht :zwinker: . Die Aufrufform in seinem ersten Beitrag lässt sich exakt mit offenen Array-Parametern bewerkstelligen.

Ja, aber dann muss die einzelnen Array-Elemente vorher zuweisen, und genau das möchte ich ja vermeiden ...

Meflin 23. Aug 2006 15:26

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von Khabarakh
Die will er doch gar nicht :zwinker: . Die Aufrufform in seinem ersten Beitrag lässt sich exakt mit offenen Array-Parametern bewerkstelligen.

Stimmt :oops: die würde nur ich gerne haben :mrgreen:

Zitat:

Zitat von PeterPanino
Ja, aber dann muss die einzelnen Array-Elemente vorher zuweisen, und genau das möchte ich ja vermeiden ...

Nein, musst du nicht :gruebel: du weist die Elemente ja im Funktionsaufruf zu... da musst du vorher kein array Füllen!


JasonDX 23. Aug 2006 15:27

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von PeterPanino
Ja, aber dann muss die einzelnen Array-Elemente vorher zuweisen, und genau das möchte ich ja vermeiden ...

Nein. Einfach mal ausprobieren:
Delphi-Quellcode:
procedure proc(params: array of TEdit);
var
  i: integer;
begin
  for i := low(params) to high(params) do
    with params[i] do
      Text := Name;
end;

  proc([Edit1, Edit2, Edit3, Edit4]);
  proc([]);
  proc([Edit1, Edit3]);
Kompiliert und funktioniert einwandfrei ;)

greetz
Mike

PeterPanino 23. Aug 2006 15:45

Re: Beliebige Menge von Objekten als Parameter übergeben?
 
Zitat:

Zitat von Meflin
Nein, musst du nicht :gruebel: du weist die Elemente ja im Funktionsaufruf zu... da musst du vorher kein array Füllen!

Ja, du hast recht! Wusste ich vorher nicht, dass das geht. Danke für dein Durchhaltevermögen! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:28 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