Hallo ihr,
also...das was Nils da gebaut hast ist eine Methode einer Klasse. Diese kann nur angewendet werden, falls man eine Instanz der Klasse (in diesem Fall Form1) hat. Aufrufkonvention:
Delphi-Quellcode:
<Objektvariable>.<MethodenName>
//Oben z.B.:
Form1.RemoveFile;
Je nachdem wo man sie deklariert sind sie "mehr oder weniger sichtbar". Eine Funktion, die im private-Bereich deklariert wurde, wird nur in der eigenen
Unit aufrufbar sein. Im public-Bereich hingegen ist sie fuer alle sichtbar.
Das zweite sind "normale" Funktionen/Prozeduren, welche es ja auch schon im guten alten DOS-Pascal gab. Es gibt mehrere Wege diese zu implementieren:
- Einfache implementierung ohne interface-Deklaration: Die Funktionen werden einfach im implementation-Teil geschrieben, z.B.:
Delphi-Quellcode:
unit Foo;
interface
implementation
function Bar: Integer;
begin
Result := 42;
end;
end.
Diese Funktionen sind nur in der eigenen Unit sichtbar, aber auch nur nachdem sie deklariert wurden. Dies wuerde also zu einem Fehler fuehren:
Delphi-Quellcode:
unit Foo;
interface
implementation
function Bar: Integer;
begin
Result := FooBar;
end;
function FooBar: Integer;
begin
Result := 42;
end;
end.
- Implementierung mit vorhergehender Deklaration: Dabei wird der Funktionskopf im interface-Teil deklariert, die Implementierung erfolgt wie vorhin im implementation-Teil:
Delphi-Quellcode:
unit Foo;
interface
function Bar: Integer;
implementation
function Bar: Integer;
begin
Result := 42;
end;
end.
Die Funktionen sind dabei auch ausserhalb der Unit sichtbar. Weiters sind die Funktionen bereits deklariert, also wuerde dieser Code diesmal funktionieren:
Delphi-Quellcode:
unit Foo;
interface
function Bar: Integer;
function FooBar: Integer;
implementation
function Bar: Integer;
begin
Result := FooBar;
end;
function FooBar: Integer;
begin
Result := 42;
end;
end.
- Forward-Deklaration von Funktionen: Wir haben vorhin gesehen, dass Funktionen, welche im implementation-Teil implementiert werden, ohne vorher deklariert zu werden, erst nach der Funktion selbst "sichtbar" sind. Was tun wenn die Prozeduren nur in der Unit sichtbar sein sollen, aber trotzdem der zweite Code aus dem ersten Abschnitt funktionieren soll? Dafuer gibt es das Schluesselwort forward:
Delphi-Quellcode:
unit Foo;
interface
implementation
function Bar: Integer;
forward;
function FooBar: Integer;
forward;
function Bar: Integer;
begin
Result := FooBar;
end;
function FooBar: Integer;
begin
Result := 42;
end;
end.
Das Schluesselwort forward sagt dem Compiler, dass die Funktion hier nur deklariert wurde, die Implementierung aber spaeter folgt. So sind die Funktionen ausserhalb der Unit nicht sichtbar, aber der Aufruf von FooBar in Bar funktioniert trotzdem.
So, ich hoffe das Tippen hat sich wenigstens gelohnt und die Tipps helfen (ok..einen Teil hat Khabarakh schon erklaert, aber meins ist genauer
)
Greetz
alcaeus