Kleine Anmerkung, könnte evtl. eine Rolle spielen: Das Hauptformular, von dem aus aufgerufen wird, wird zur Laufzeit erzeugt. Bis dahin also nur ein verfügbares, instanzloses Formular. Hier der Code dazu:
Hier die Hilfsunit, in der die Prozedur steht (Hier ist auch die Funktion GetFilePath, die von der Problemprozedur aus der Klasse TMenschen aufgerufen wird, diese ist aber soweit in Ordnung und steht nicht im Zusammenhang mit der Zugriffsverletzung):
unit MenuProcesses;
interface
uses
Dialogs, Classes, Controls, Variants,
SysUtils, StdCtrls, Windows, Forms;
procedure LoadGame;
procedure CloseGame;
function GetFilePath: String;
implementation
uses uMain, uMenu;
procedure LoadGame;
begin
// MainForm (Das Spielfeld-Form) erzeugen
if MainForm = nil then MainForm:= TMainForm.Create(Application);
// MainForm aufrufen und den Fokus geben
MainForm.Show;
MainForm.Visible:= true;
end;
procedure CloseGame;
begin
// MainForm im Speicher wieder freigeben
if MainForm <> nil thenbeginMainForm.Release;MainForm:= nil;end;
end;
function GetFilePath: String;
begin
// Speicherort der Projektexe ermitteln
result:= ExtractFilePath(Application.ExeName);
end;
end.
Und dann noch der Aufruf, welche das Hauptformular erzeugt und anzeigt:
procedure TMenuForm.StartGameBtnClick(Sender: TObject);
begin
LoadGame;
end;
procedure TMenuForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseGame;
end;
Komischerweise funktioniert hier alles einwandfrei, obwohl es das selbe in Grün ist. Der einzigste Unterschied ist, das bei dem Aufruf der eine Zugriffsverletzung gibt die Prozedur die Klasse TMenschen als Ursprung hat und hier ist der Ursprung die Unit an sich.
Hoffe, so kann mir jemand weiterhelfen
danke und grüße
Strayble