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 Procedure mit vielen Parametern ... (https://www.delphipraxis.net/77489-procedure-mit-vielen-parametern.html)

moelski 20. Sep 2006 10:47


Procedure mit vielen Parametern ...
 
Moin !

Ich stehe da gerade mal wieder vor einem kleinen Problem ...
Und zwar erstelle ich gerade eine Unit die mir grundlegende Reporting Funktionen für die WPTools zur Verfügung stellt.
Das kann dann z.B. so aussehen:

Delphi-Quellcode:
procedure WriteText(RTFMemo : TWPCustomRtfEdit;
                    Mode   : TWPCreateDemoText;
                    Text   : String;
                    Color  : TColor;
                    Font   : String);
Nun möchte ich aber bei Standarttext nicht immer alle Parameter angeben. Sondern ich will nur das nötigstes (also den Text und das zu verwendenen RTF) angeben.
Aber eine Notation wie ...
Delphi-Quellcode:
WriteText(RTF, ,   'Wir erstellen einen kleinen Reoprt ...',,);
quitiert der Compiler sofort mit "Nicht genügend wirkliche Parameter" oder "Ausdruck erwartet, aber ',' gefunden"

Gibts da irgendeinen Weg? Oder muss ich mir wirklich mehrere Funktionen anlegen die dann mitunter nur eine kleine Teilmenge der Parameter bieten? :coder2:

alcaeus 20. Sep 2006 10:50

Re: Procedure mit vielen Parametern ...
 
Moin,

du musst den Default-Wert in der Deklaration angeben:
Delphi-Quellcode:
procedure Foo(Bar: String; Foobar: Integer = 0);
;)

Greetz
alcaeus

moelski 20. Sep 2006 10:51

Re: Procedure mit vielen Parametern ...
 
Sachen gibts :shock:

Danke :thumb:

Werds gleich mal probieren.

moelski 20. Sep 2006 10:56

Re: Procedure mit vielen Parametern ...
 
Öhm ... Das klappt mit werten die hinten angehängt werden ...

Aber wenn ich nun in
Delphi-Quellcode:
procedure WriteText(RTFMemo : TWPCustomRtfEdit;
                    Mode   : TWPCreateDemoText = wpAppendText;
                    Text   : String           = '';
                    Color  : TColor           = clBlack);
                    Font   : String           = 'Arial');
das "Mode" nicht angeben will, Text - Font aber schon?

Weglassen geht dann nicht, denn dann sagt er das die Typen nicht stimmen ...
Und einfach ein , , geht auch nicht ...

Gibts da auch noch nen Trick ?

himitsu 20. Sep 2006 11:04

Re: Procedure mit vielen Parametern ...
 
Zitat:

Zitat von moelski
Weglassen geht dann nicht, denn dann sagt er das die Typen nicht stimmen ...
Und einfach ein , , geht auch nicht ...

Gibts da auch noch nen Trick ?

Ja, du kannst die funktion sschießlich auch noch überladen ^^

Code:
procedure WriteText(RTFMemo : TWPCustomRtfEdit;
                    [color=#ff0000][b]Mode   : TWPCreateDemoText = wpAppendText;[/b][/color]
                    Text   : String           = '';
                    Color  : TColor           = clBlack;
                    Font   : String           = 'Arial'); [color=#ff0000][b]Overload;[/b][/color]
procedure WriteText(RTFMemo : TWPCustomRtfEdit;
                    Text   : String           = '';
                    Color  : TColor           = clBlack;
                    Font   : String           = 'Arial'); [color=#ff0000][b]Overload;[/b][/color]


...

procedure WriteText(RTFMemo : TWPCustomRtfEdit;
                    Text   : String           = '';
                    Color  : TColor           = clBlack;
                    Font   : String           = 'Arial');
begin
  WriteText(RTFMemo, [color=#ff0000][b]wpAppendText[/b][/color], Text, Color, Font);
end;
[edit]
ich haße diese nichtaktualisierende Cache beim Editieren -.-''

moelski 20. Sep 2006 11:11

Re: Procedure mit vielen Parametern ...
 
Moin !

Allet klar. Thx !

oki 20. Sep 2006 11:20

Re: Procedure mit vielen Parametern ...
 
Hi,

Du kannst auch eine Structur (Record) übergeben. Das lohnt aber nur bei vielen Parametern. Hier Füllst du den Record erst mit null (Fillchar-Methode) und weist dann deine wenigen Parameter zu. Diesen Record übergibst du dann in deiner Methode als Parameter.
Delphi-Quellcode:
type
  TMyRecord = Record
    Param1   : String;
    Param2   : String;
    Param3   : String;
    Param4   : Integer;
    Param5   : Integer;
    Param6   : String;
    Param7   : String;
  end;

Procedure Todo(Params : TMyRecord);
Ein Aufruf kann dann wie folgt geschehen:

Delphi-Quellcode:
procedure Test;
var Params : TMyRecord;
begin
  Fillchar(Params, Sizeof(TMyRecord), #0);
  Params.Param1 := 'Mein wert:';
  Params.Param4 := 5;
  ToDo(Params);
end;
Was du dann in ToDo machst weist du besser wie ich. Beachte aber, dass mit FillChar alle werte auf 0 gesetzt werden. Entsprechende Prüfungen auf gültige Werte sind somit obligatorisch.

Gruß oki

hoika 20. Sep 2006 11:40

Re: Procedure mit vielen Parametern ...
 
Hallo,

ich würde keine Struktur, sondern eine Klasse benutzen.
Das hat den Vorteil, dass im constructor der Klasse
die default-Werte angegeben werden können.


Heiko

3_of_8 20. Sep 2006 12:18

Re: Procedure mit vielen Parametern ...
 
Dafür muss sie erzeugt und freigegeben werden...

hoika 20. Sep 2006 12:32

Re: Procedure mit vielen Parametern ...
 
Hallo,

dafür vergisst man das Setzen der default-Parameter nicht.


Heiko


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