![]() |
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Zitat:
Das funktioniert auch, aber mit der Gewissheit, dass die Referenz auf das Objekt nicht verändert werden kann:
Delphi-Quellcode:
procedure tuwas( const AButton: TButton );
begin AButton.Caption := 'helloworld'; end; procedure tuwasanderes( const AButton: TButton; const AText: string ); begin AButton.Caption := 'helloworld'; AButton.Hint := AText; end; |
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Ups, der Post hatte sich wohl irgendwie verlaufen :shock:
Nja, bevor ich den dort drüben löschen lass... Zitat:
[add] Zitat:
und sagt nicht "implizit" aus, daß da nichts verändert wird (Objektinhalt). |
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Also wenn ich auf zirkulare Referenzen stoße bei mir im Code, dann ist das für mich ein Zeichen, dass mein Konzept nicht stimmt.
|
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
|
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Zitat:
|
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Zitat:
|
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
@Rolf
Zeigst Du mal einen Screenshot? Sollen die Buttons im Hauptformular liegen und verschiedene Zustände (auch aus weiteren Formularen) anzeigen (ähnlich den Ribbons)? Kreuzbezüge innerhalb der implementations-Abschnitte sind sicherlich kein Problem. Dafür sind sie ja u.a. gedacht. Die Frage ist, ob man überhaupt irgendwann Button-Eigenschaften (oder andere Controleigenschaften wie Visible o.ä.) auswerten sollte.
Delphi-Quellcode:
ist zwar machbar, aber eine Trennung von Daten und GUI sollte man bestenfalls dort schon umsetzen.
if ButtonTest.Enabled ...
Für kleine, schnelle Projekte ist das kein Problem, aber für größere Projekte sollte man Daten+Geschäftslogik von der GUI ordentlich trennen (je nach weiteren Ansprüchen und Umgebung). Die GUI präsentiert dann nur Daten und Zustände und schiebt Änderungen, Berechnungen, speichern, Laden usw. an. Die Daten- und Geschäftslogik greift aber nie auf Eigenschaften der GUI zu. Man könnte also mit einer Variablen bzw. Property "TestEnabled" arbeiten, diese irgendwo speichern und laden und bei jeder Wertänderung, die Darstellung des/der zugehörigen Buttons anpassen. Useraktionen ändern wiederum dann den Propertyinhalt (wie in einer DBCheckBox z.B.). Um die Verbindung einfach zu gestalten, gibt es unterschiedliche Herangehensweisen. Vorhandene Controls müssen dazu quasi an eine Eigenschaft gebunden werden -> ![]() |
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Zitat:
TGUI.Button1_OnClick(...) begin RufeProzedurMachwasAusDerLogikUnitAuf end; Dazu muss die Logikunit aber irgendwo im Uses-Block stehen, oder? Umgekehrt ergibt eine Berechnung in der Logik-Unit, dass jetzt in der GUI 3 Buttons Enabled werden müssen. Um auf diese zuzugreifen, muss doch einem Uses-Block die GUI stehen. Hab ich dann nicht wieder genau die zirkuläre Referenz? |
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Zitat:
Zitat:
Wenn dann z.B 3 Button zu schalten sind, kann die DatenUnit 3 Variablen Button1..3 verwalten, die erst mal nil sind. Die GUI kann dann im OnCreate ihre eigenen Button zuweisen: DatenUnit.Button1 := Form1.Button1; DatenUnit.Button2 := Form1.Button2; DatenUnit.Button3 := Form1.Button3; Nun kann die DatenUnit die GUI steuern, ohne diese zu kennen. Wenn bzw. so lange keine GUI-Controls zugewiesen wurden, muss die DatenUnit tolerieren, dass die 3 Button noch nil sind. So ist das wunderbar übersichtlich und man kann später auch recht einfach an den Formularen etwas ändern, ohne die Berechnungen dabei berührt werden. Man hat halt keine Berechnungen in OnClick-Behandlungen z.B. Noch besser handelbar wird das Ganze, wenn die DatenUnit nicht 3 Button-Variablen, hält, die dann von der GUI zugeweisen werden, sondern wenn man den Controls einfach sagen kann: Zeige Du mal die Einschaft SOWISO an. Dann muss natürlich eine Verfahrensweise vorhanden sein, die sich um eine solche Verbindung und gegenseitige Änderungsinformationen kümmert. Aber die DatenUnit kennt dann zur Compilezeit NICHT die Formularunits (GUI). Uff, jetzt bin ich nicht mal sicher, ob ich das verstehen würde... :-) |
AW: Zirkularen Bezug von zwei Forms wie vermeiden ?
Selbst das würde ich nicht so lösen, weil da hat man ja wieder eine Verknüpfung von Daten und Oberfläche. Denn was machst du, wenn ein vierter Button dazu kommt? Dann bist du wieder an der Daten Unit am rumfummeln. Statte die Daten Unit mit Ereignissen aus, die du dann in der Oberfläche zuweisen und darauf reagieren kannst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz