Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unendlich Parameter (https://www.delphipraxis.net/157090-unendlich-parameter.html)

DarkItachi 29. Dez 2010 10:03

Delphi-Version: 2007

Unendlich Parameter
 
Hallöchen!

Wie kann man eine Procedure mit unendlich Parametern schreiben? Also wie ist die Syntax dafür?
WriteLN() hat das ja, aber ich finde WriteLN() nicht in der System-Unit...

Könnte mir das jemand erklären?

Dankeschön:-D

Klaus01 29. Dez 2010 10:08

AW: Unendlich Parameter
 
Hi Julian,

unendliche Anzahl an Parametern verschiedener Typen,
oder unendliche Anzahl eines Typs?

Grüße
Klaus

DarkItachi 29. Dez 2010 10:11

AW: Unendlich Parameter
 
In meinem Falle: Unendliche Anzahl von Strings;
Dabei soll das kein StringArray oder ähnliches sein...
Denn das wüsste ich ja schon... Ich will ja alles wissen ;)


BTW:
Ahhh. Auszug aus System.pas:
Code:
{ Predefined constants, types, procedures, }
             { and functions (such as True, Integer, or }
             { Writeln) do not have actual declarations.}
             { Instead they are built into the compiler }
             { and are treated as if they were declared }
             { at the beginning of the System unit.    }

rollstuhlfahrer 29. Dez 2010 10:22

AW: Unendlich Parameter
 
Die Format-Funktion nimmt "unendlich viele" Parameter entgegen, allerdings brauchst du dann ein
Delphi-Quellcode:
array of const
.

Bernhard

DarkItachi 29. Dez 2010 10:28

AW: Unendlich Parameter
 
gibt es dann noch eine andere Möglichkeit?

Ich möchte nämlich eine procedure schreiben, die öffentlich zugänglich ist, und kein User die Procedure ändern muss, damit er sie nutzen kann...

Ein Beispiel wäre eine ListView.Items.Add procedure:

Code:
procedure sProc1(a: TListView; [P1; [..., PN]]);
begin
 With a.Items.Add do begin

 end;
end;
Also wie die WriteLN procedure

Klaus01 29. Dez 2010 10:28

AW: Unendlich Parameter
 
.. bei WriteLn ist das Compiler Magic.
Ein Beispiel mit array of const kannst Du hier finden.

Grüße
Klaus

himitsu 29. Dez 2010 10:50

AW: Unendlich Parameter
 
bei einem Typ:
Delphi-Quellcode:
array of ...
(dieses muß aber in der Prozedur und nicht alseigentständiger Typ deklariert sein, also als Open-Array)
bei unbestimmten/gemischten Typen:
Delphi-Quellcode:
array of const
.
ansonsten gibt es noch die vordefinierten Parameter und überladene Prozeduren.

Delphi-Quellcode:
// beliebig viele Integer
procedure Test(Params: array of integer);

// beliebig viele gemischte Typen
procedure Test(Params: array of const);

// vordefiniert, mit einem Festen und 2 dynamischen Parametern, welche man setzen kann oder auch nicht
procedure Text(Param1: Integer; Param2: Integer = 0; Param3: Integer = 0);

// überladen (1 bis 3 Parameter)
procedure Text(Param1: Integer); overload;
procedure Text(Param1, Param2: Integer); overload;
procedure Text(Param1, Param2, Param3: Integer); overload;
Sowas wie WriteLn kann man leider nicht selber deklarieren :cry:

mkinzler 29. Dez 2010 12:20

AW: Unendlich Parameter
 
Oder lege ein Funktion mit sehr vielen vorbelegten Parametern an

Delphi-Quellcode:
  function MachWas( a: string; b: string = ''; c: string = ''; ...): string;

  ...

implementation


function MachWas( a: string; b: string = ''; c: string = ''; ...): string;
begin
    Result := a+b+c+...;
end;

Aphton 29. Dez 2010 13:26

AW: Unendlich Parameter
 
Zitat:

Zitat von Klaus01 (Beitrag 1070890)
.. bei WriteLn ist das Compiler Magic.

Kannst du das genauer erläutern? Evt. kann man da ja mit einem kleinen Hack etwas draus machen?!

MfG

mkinzler 29. Dez 2010 13:32

AW: Unendlich Parameter
 
Wenn du dir einen eigenen Compiler schreibst :green:
Compiler magic bedeutet dass es keine normale Funktion ist sondern von Compiler direkt umgesetzt wird


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Seite 1 von 2  1 2      

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