Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#9

AW: 2 Formulare verbinden geht nicht :(

  Alt 21. Mär 2013, 10:11
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!
  Mit Zitat antworten Zitat