AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Formulare verbinden geht nicht :(

Ein Thema von blubber443 · begonnen am 20. Mär 2013 · letzter Beitrag vom 21. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
blubber443

Registriert seit: 28. Jan 2012
Ort: Dresden
41 Beiträge
 
Delphi XE2 Professional
 
#1

2 Formulare verbinden geht nicht :(

  Alt 20. Mär 2013, 20:12
Delphi-Version: XE2
Moin,
ich hab 2 Formulare in meinem Projekt
mein hauptformular (form1 in unit1) und das 2. (form2 in unit2)

wenn ich von form1 auf form2 zugreife geht das
Delphi-Quellcode:
//Form 1

uses Unit2;

...

procedure sag_hallo();
begin
  Form2.Visible:=true;
  Form2.Label1.Caption:='Hallo';
end;
end.
wenn ich jedoch danach von form2 auf form1 zugreifen will geht das nicht
Delphi-Quellcode:
//Form 2

uses Unit1;

...

procedure sag_hallo();
begin
  Form1.Visible:=true;
  Form1.Label1.Caption:='Hallo';
end;
end.
als fehler kommt nicht genügend arbeitsspeicher, ich hatte den fehler schon öfters
und es kam IMMER wenn ich versuchte 2 formulare zu verknüpfen also mit dem
einem aufs jeweils andre zuzugreifen
mich intressiert ob man das irgendwie anders machen kann oder ob ich irgendwo noch was
schreiben muss

danke schonma im voraus

PS: das beispiel ist natürlich völliger schwachsinn
und dient nur zum verständnis des problems
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#2

AW: 2 Formulare verbinden geht nicht :(

  Alt 20. Mär 2013, 20:18
Hallo,

dein Beispiel hilft leider wenig, weil Du nichts dazu sagst, wann und durch was diese beiden Funktionen aufgerufen werden.

Zu wenig Arbeitsspeicher interpretiert meine Glaskugel als einen vollen Stack, ausgelöst durch eine nie endende Rekursion.

Grüße
  Mit Zitat antworten Zitat
blubber443

Registriert seit: 28. Jan 2012
Ort: Dresden
41 Beiträge
 
Delphi XE2 Professional
 
#3

AW: 2 Formulare verbinden geht nicht :(

  Alt 20. Mär 2013, 20:22
ich hab schon verschiedenes ausprobiert und auch auf andre weisen versucht auf die jeweils andre form zuzugreifen, der fehler wird aber schon angezeigt sobald ich die unit1 bei form2 erst einbinde, das heißt selbst wenn ich nix von form1 will aber nur die unit einbinde geht es nicht
  Mit Zitat antworten Zitat
blubber443

Registriert seit: 28. Jan 2012
Ort: Dresden
41 Beiträge
 
Delphi XE2 Professional
 
#4

AW: 2 Formulare verbinden geht nicht :(

  Alt 20. Mär 2013, 20:26
als fehler steht zirkuläre unit-referenz falls ihr damit was anfangen könnt
  Mit Zitat antworten Zitat
blubber443

Registriert seit: 28. Jan 2012
Ort: Dresden
41 Beiträge
 
Delphi XE2 Professional
 
#5

AW: 2 Formulare verbinden geht nicht :(

  Alt 20. Mär 2013, 20:28
ach wartet da gibs was im forum, ich nehme mal an das thema ist geschlossen
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: 2 Formulare verbinden geht nicht :(

  Alt 20. Mär 2013, 21:07
Hi,

der Fehler zirkuläre Unit Referenz erscheint nur dann, wenn du bei Unit 2 die Unit 1 an der falschen Stelle einbindest.

So sollte es funktionieren:


Bei Unit 1:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Unit2

implementation

end.

Bei Unit 2:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, ...

implementation

uses
  Unit1;

end.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: 2 Formulare verbinden geht nicht :(

  Alt 20. Mär 2013, 22:29
Moin, ich hab 2 Formulare in meinem Projekt mein hauptformular (form1 in unit1) und das 2. (form2 in unit2)
wenn ich von form1 auf form2 zugreife geht das
wenn ich jedoch danach von form2 auf form1 zugreifen will geht das nicht[]
Du kannst auch eine dritte Unit (ohne Form, z.B. UnitFormZugriff) erstellen, die Zugriff auf beide Form-Units hat. Diese dritte Unit bindest du dann in beiden Form-Units in den Uses-Abschnitt unterhalb des Implementation-Abschnitts ein. Ebenso bindest du in der UnitFormZugriff die beiden Form-Units in den Uses-Abschnitt unterhalb des Implementation-Abschnitts ein.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: 2 Formulare verbinden geht nicht :(

  Alt 21. Mär 2013, 08:17
Lustigerweise meldet zumindest mein XE2-Ent bei solchen Geschichten ein "Voller Arbeitsspeicher" bei [STRG]+[F9] und "zirkuläre Referenz" bei [F9] - Oder umgekehrt
  Mit Zitat antworten Zitat
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#10

AW: 2 Formulare verbinden geht nicht :(

  Alt 21. Mär 2013, 10:17
Eigentlich sollte man es aber vermeiden, dass 2 Klassen sich gegenseitig kennen müssen. Dasselbe gilt für Fomulare (sind ja schließlich auch nur Klassen). Wenn ein Formular eine Schnittstelle (etwa in Form einer Property) anbietet, kann ein anderes darüber auf das Formular zugreifen und ggf. vice versa. Dafür ist es dann aber nicht mehr notwendig, dass das Fomular mit der Schnittstelle das andere kennt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz