Lustigerweise meldet zumindest mein XE2-Ent bei solchen Geschichten ein "Voller Arbeitsspeicher" bei [STRG]+[F9] und "zirkuläre Referenz" bei [F9] - Oder umgekehrt
Diese Meldung erscheint nur, wenn du die Units in Interface-Uses einträgst. Du sollst sie aber unter Implementation eintragen:
Delphi-Quellcode:
{ ****************************************************************************************************************
*** ZUGRIFF AUF UNITMAIN für EINSTELLUNGEN ETC. ***
**************************************************************************************************************** }
unit Main_Zugriff;
INTERFACE
USES
Vcl.Forms, System.Classes, System.SysUtils, JvRichEdit, JvDBRichEdit,
Vcl.DbGrids;
TYPE
TMain_Zugriff =
CLASS
PRIVATE
PUBLIC
Spalten_Filmtitel : Integer;
CONSTRUCTOR Create();
DESTRUCTOR Destroy;
override;
PROCEDURE Set_FormMain(
Const Links, Oben, Breit, Hoch : Integer;
Const Maximiert : Boolean);
PROCEDURE Get_FormMain(
Var Links, Oben, Breit, Hoch : Integer;
Var Maximiert : Boolean);
PROCEDURE StatusBarAktuell;
PROCEDURE LaenderEinlesen;
PROCEDURE LaenderAnzeigen;
PROCEDURE Set_Spalte_FilmTitel(
Const Spalte,Breite : Integer);
FUNCTION Get_Spalte_FilmTitel(
Const Spalte : Integer) : Integer;
END;
IMPLEMENTATION
USES
UnitMain, UnitData;
// Hier eintragen
{+-+- PUBLIC METHODEN -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-}
{ ****************************************************************************************************************
*** CREATE ***
**************************************************************************************************************** }
constructor TMain_Zugriff.Create;
begin
Spalten_Filmtitel := FormMain.DBGrid_Filmtitel.Columns.Count;
end;
{ ****************************************************************************************************************
*** DESTROY ***
**************************************************************************************************************** }
destructor TMain_Zugriff.Destroy;
begin
inherited;
end;
...
Ich habe hier eine Klasse entwickelt, die Zugriff auf Komponenten der Klasse TFormMain (Hauptformular) ermöglicht, und zwar von jeder anderen
Unit oder Form aus, die diese Klasse referenziert. Da gab's noch nie irgend einen Fehler, den ich nicht selbst verbockt hatte. Du kannst auch zwei Forms direkt verbinden, indem du den
Unit-Namen der einen Form unter Implementation (
nicht unter Interface!) in die Uses-Klausel einträgst. Ich hab z.B. manchmal im Hauptformular das Datenmodul referenziert und im Datenmodul das Hauptformular, immer jedoch unterhalb von Implementation. Das ist ganz wichtig!