AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zirkuläre Referenzen

Ein Thema von lxo · begonnen am 2. Mär 2021 · letzter Beitrag vom 2. Mär 2021
Antwort Antwort
Seite 1 von 2  1 2   
lxo

Registriert seit: 30. Nov 2017
257 Beiträge
 
Delphi 12 Athens
 
#1

Zirkuläre Referenzen

  Alt 2. Mär 2021, 08:32
Delphi-Version: 10.4 Sydney
Hallo,

gibt es noch andere Wege eine zirkuläre Unit-Referenz zu vermeiden für diesen Anwendungsfall? (siehe Anhang)
Am einfachsten wäre ja sonst im Implementation-Uses-Block der Unit uChildForm, uMainForm einzutragen.
Damit hätte ich dann aber eine zirkuläre Unit-Referenz.

Um dies zu vermeiden, könnte man das ja auch wie im Beispiel mit Events machen.
Gibt es noch andere Möglichkeiten?
Angehängte Dateien
Dateityp: zip Test UnitReferenz.zip (2,2 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
240 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 09:43
Du kannst ein Interface entwickeln welches Du in einer globalen unit definierst, die keine andern Units einbindest. Dieses Interface implementierest Du dann für das Objekt, das die jeweilige Operation ausführst.

Eintragen im Implementation fall geht zwar, hat aber negative Auswirkung auf die Versionskontrolle (welche unit wurde verändert und muss neu erstellt werden) und, soweit ich weiß, auf die Compilierzeit.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF

Geändert von jziersch ( 2. Mär 2021 um 09:45 Uhr)
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
257 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 10:10
Du kannst ein Interface entwickeln welches Du in einer globalen unit definierst, die keine andern Units einbindest. Dieses Interface implementierest Du dann für das Objekt, das die jeweilige Operation ausführst.

Eintragen im Implementation fall geht zwar, hat aber negative Auswirkung auf die Versionskontrolle (welche unit wurde verändert und muss neu erstellt werden) und, soweit ich weiß, auf die Compilierzeit.
Tut mir leid, ich versteh nicht genau wie ich das umsetzen sollte ohne eine zirkuläre Referenz.
Hättest du da evtl. ein Beispiel?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 10:28
Unit3 enthält die Interfacedeklaration (praktisch könnte auch jeder seine egene Interfacedeklaration benutztn, so lange sie "gleich" sind, dann braucht man keine dritte Unit)
und dann verwenden beide Units 1 und 2 dieses Interface und schon haben sie unterienander keinerlei Abhängigkeiten mehr.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 10:31
Interfaces können auch mit Forms, Frames, DataModules etc. genutzt werden.

Delphi-Quellcode:
type
  IMyMainForm_Interface = interface
    [GUUID]
    procedure OpenMainForm(Sender: Tobject);
  end;

...
...
...

type
  TTMainForm = class(TForm, IMyMainForm_Interface )
...
    procedure OpenMainForm(Sender: Tobject);
  end;
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
257 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 10:35
Interfaces können auch mit Forms, Frames, DataModules etc. genutzt werden.

Delphi-Quellcode:
type
  IMyMainForm_Interface = interface
    [GUUID]
    procedure OpenMainForm(Sender: Tobject);
  end;

...
...
...

type
  TTMainForm = class(TForm, IMyMainForm_Interface )
...
    procedure OpenMainForm(Sender: Tobject);
  end;
Aber wie kann ich jetzt im uChildForm das MainForm öffnen ohne dies einzubinden?
Irgendwie versteh ich das gerade nicht.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 11:02
Siehe Anhang. Ein skizzenhaftes Beispiel, ist natürlich verbesserungswürdig.
Angehängte Dateien
Dateityp: zip UnitReferenz_2021-03-02_11-01-48.zip (2,7 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
240 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 11:03
[/QUOTE]
Aber wie kann ich jetzt im uChildForm das MainForm öffnen ohne dies einzubinden?
Irgendwie versteh ich das gerade nicht.[/QUOTE]

In der globalen Unit (die braucht man dann doch) definierts Du eine globale interface referenz.

In MainForm im OnCreate weist Du dies dann auf "Self" zu.

Im Child fragst Du die Variable ab und kannst Deine Prozedur aufrufen.

Alternativ kann natürlich jedes Child diese Variable haben und diese wird beim Erstellen gesetzt, sozusagen der "Owner"

Edit: Der Vorschlag von TiGÜ implementiert dies - sogar für das Child.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF

Geändert von jziersch ( 2. Mär 2021 um 11:05 Uhr)
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
257 Beiträge
 
Delphi 12 Athens
 
#9

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 11:22

In der globalen Unit (die braucht man dann doch) definierts Du eine globale interface referenz.

In MainForm im OnCreate weist Du dies dann auf "Self" zu.

Im Child fragst Du die Variable ab und kannst Deine Prozedur aufrufen.

Alternativ kann natürlich jedes Child diese Variable haben und diese wird beim Erstellen gesetzt, sozusagen der "Owner"

Edit: Der Vorschlag von TiGÜ implementiert dies - sogar für das Child.
Ok das hab ich verstanden.
Ist aber nicht so wie ich es mir vorgestellt habe.
Mit der Lösung kann ich nur mit jeweils einer Instanz von MainForm oder ChildForm arbeiten.

Beim Öffnen möchte ich jedoch immer eine neue Instanz erzeugen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#10

AW: Zirkuläre Referenzen

  Alt 2. Mär 2021, 11:24
Hier noch eine Lösung auf Basis von System.Messaging.
Angehängte Dateien
Dateityp: zip UnitReferenz Messaging.zip (2,5 KB, 28x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:31 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