Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Richtige Prozedur Anhand der Parameter finden


Georg08 - Mo 19.07.10 21:27
Titel: Richtige Prozedur Anhand der Parameter finden
Hallo,
Wenn ich in Delphi z.B. TFileStream.Create eingebe habe ich 3 verschiedene Prozeduren zur auswahl. Diese erkennt Delphi dann anhand der Anzahl der Parameter (nehme ich an ;-) )
Ich würde gerne auch so etwas Programmieren, dass ich eine Prozedur habe und anhand der Anzahl an Parametern wird dann die jeweilige Aktion ausgeführt...

1. Kann man soetwas in Delphi programmieren
2. Wenn ja dann wie :-)

Danke


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 19.07.2010 um 21:45


MaPsTaR - Mo 19.07.10 21:29

Wenn ich dich richtig verstanden habe:

Du schreibst mehrere Funktionen mit dem gleichen Namen aber unterschiedlichen Parametern und setzt hinter jede davon die Direktive overload.

Bsp:

Delphi-Quelltext
1:
2:
    function GetArticle(ID: cardinal; ADeCode: boolean = false): TArtikel; overload;
    function GetArticle(Num: integer): TArtikel; overload;


Georg08 - Mo 19.07.10 21:35

Also so?:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
type TWaswißich = class(TComponent)
  Button1: TButton;
  procedure Click(Sender: TObject); overload;
  procedure Click (Sender: TObject; Text: String); overload;
private
public
end;

var
TWaswißich: TComponent;

implementation

procdure TWaswißich.Click(Sender: TObject);
begin
  (Sender as TButton).Caption:= 'Geklickt';
end;
procdure TWaswißich.Click (Sender: TObject; Text: String);
begin
  (Sender as TButton).Caption:= Text;
end;

(Nicht getestet, will nur wissen ob es so geht...)


MaPsTaR - Mo 19.07.10 21:37

Ja, das sollte so klappen.

ABER:


Delphi-Quelltext
1:
2:
var
Waswißich: TWaswißich;


Georg08 - Mo 19.07.10 21:40

Naja habs jetzt mal ausprobiert

Fehler war:
Die Prozeduren dürfen nicht im published Teil stehen...
Fehler:

Quelltext
1:
[Fehler] Unit1.pas(18): Nur eine Methode aus einer Gruppe überladener Methoden darf 'published' sein                    


Hier der Funktionierende Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure Klick(Sender: TButton); overload;
    procedure Klick(Sender: TButton; Text: String); overload;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Klick(Button3);
end;

procedure TForm1.Klick(Sender: TButton);
begin
  Sender.Caption:= 'geklickt';
end;

procedure TForm1.Klick(Sender: TButton; Text: String);
begin
  Sender.Caption:= Text;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Klick(Button3, Edit1.Text);
end;

end.


MaPsTaR - Mo 19.07.10 21:48

Dieser Fehler ist bei mir noch nicht aufgetreten.
Liegt vielleicht daran, dass Click als Methode von TForm schon vorhanden ist.


jaenicke - Di 20.07.10 05:46

published ist für die Eigenschaften und Events, die im Objektinspektor angezeigt werden sollen, wenn eine Komponente installiert wird. Diese müssen natürlich eindeutig sein.
Da Methoden dort ohnehin nicht erscheinen, ist das eigentlich egal, aber da gehören ohnehin keine Methoden hin.

Du hattest die Methoden in die Default-Sichtbarkeit geschrieben, nämlich ganz ohne Sichtbarkeitsangabe. Dort gehören keine eigenen Felder hin, das ist der Bereich, den Delphi für die automatisch angelegten Sachen benutzt. Wenn du selbst etwas einfügst, gehört das explizit unter private, usw.