Funktion oder Methode?
Kurze Information, eine Methode ist eine Funktion eines Objektes:
- Code: Alles auswählen
type TTestClass = class
private
FCounter: Integer;
public
procedure TestMethode(...);
end;
...
var
GlobalCounter: Integer;
procedure TestFunction(...);
...
implementation
...
procedure TestFunction(...);
begin
Inc(GlobalCounter)
end;
procedure TTestClass.TestMethode(...);
begin
Inc(FCounter)
end;
Die Methdode gehört zu der Klasse TTestClass, und hat damit zugriff auf all ihre Felder (private variablen einer Klasse, werden mit FName bezeichnet) und damit können wir FCounter verwenden. Das bedeutet aber auch verschiedenene Klasseninstanzen werden verschiedene Counter haben.
Die Funktion gehört zu keiner Klasse und hat damit nur Zugriff auf die Globalen Variablen, z.B. GlobalCounter. Diese variable ist aber immer die selbe Variable unabhängig von wo/aus welchem Kontext man sie aufruft.
Da du mit Forms arbeitest, ist der Größte teil deines Projekts für gewöhnlich sowieso OOP (also spielt sich in Klassen ab), daher solltest du einfach ein TProcess feld zu der Klasse hinzufügen und darauf arbeiten. Globale Variablen sind für gewöhnlich nicht so schön, da es keine Zugriffskontrolle gibt.
Eine andere Lösung ist einfach den Process als parameter zu geben (um creation und destruction musst du dich dann außerhalb der Funktion kümmern):
- Code: Alles auswählen
function StartTheProcess(const proc: TProcess);
begin
if Proc.Running then
Proc.Terminate;
...
end;
Dann interresiert dich in der Funktion absolut nicht was drum herum abgeht. Z.B. im Funktionalen Programmieren, wo es keine Klassen oder Globalen Variablen gibt, wird das so eingesetzt und gibt die mit abstand sauberste Lösung (in dem sinne das all deine Funktionen keine Externen abbhängigkeiten haben und damit extrem viel einfacher zu warten sind)
Ich glaube aber in deinem Fall sind Klassen-Felder am einfachsten und besten