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
Narses: 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 procedure Klick(Sender: TButton); overload; procedure Klick(Sender: TButton; Text: String); overload; public 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!