Autor Beitrag
Georg08
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Mo 19.07.10 21:27 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 90
Erhaltene Danke: 4

Win XP
Delphi 7 Enterprise
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
    function GetArticle(ID: cardinal; ADeCode: boolean = false): TArtikel; overload;
    function GetArticle(Num: integer): TArtikel; overload;

_________________
Liebe Kinder, es stimmt ... solnage auch nur der ertse und lezte Bchutsabe rihctig ist und alle andreen Bcuhsatben irgendwie vorahnden sind,
dann knan man es dennonch lesen, also macht nur weiter so, wir verstehen euch schon
Georg08 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Mo 19.07.10 21:35 
Also so?:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 90
Erhaltene Danke: 4

Win XP
Delphi 7 Enterprise
BeitragVerfasst: Mo 19.07.10 21:37 
Ja, das sollte so klappen.

ABER:

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

_________________
Liebe Kinder, es stimmt ... solnage auch nur der ertse und lezte Bchutsabe rihctig ist und alle andreen Bcuhsatben irgendwie vorahnden sind,
dann knan man es dennonch lesen, also macht nur weiter so, wir verstehen euch schon
Georg08 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Mo 19.07.10 21:40 
Naja habs jetzt mal ausprobiert

Fehler war:
Die Prozeduren dürfen nicht im published Teil stehen...
Fehler:
ausblenden Quelltext
1:
[Fehler] Unit1.pas(18): Nur eine Methode aus einer Gruppe überladener Methoden darf 'published' sein					


Hier der Funktionierende Code:
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 90
Erhaltene Danke: 4

Win XP
Delphi 7 Enterprise
BeitragVerfasst: 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.

_________________
Liebe Kinder, es stimmt ... solnage auch nur der ertse und lezte Bchutsabe rihctig ist und alle andreen Bcuhsatben irgendwie vorahnden sind,
dann knan man es dennonch lesen, also macht nur weiter so, wir verstehen euch schon
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.