AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Zirkularen Bezug von zwei Forms wie vermeiden ?
Thema durchsuchen
Ansicht
Themen-Optionen

Zirkularen Bezug von zwei Forms wie vermeiden ?

Offene Frage von "stahli"
Ein Thema von RWarnecke · begonnen am 31. Mai 2011 · letzter Beitrag vom 1. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 31. Mai 2011, 20:13
Delphi-Quellcode:
procedure tuwas(var AButton: TButton);
begin
  AButton.Caption := 'helloworld';
end;

procedure tuwasanderes(var AButton: TButton; const AText: string);
begin
  AButton.Caption := 'helloworld';
  AButton.Hint := AText;
end;
So einfach ist das.
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod (31. Mai 2011 um 20:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 31. Mai 2011, 21:45
äh, wozu übergibst du die Objekt-Referenz als var Parameter?

Das wäre ja ein Hinweis, dass in der Procedere die Objekt-Referenz verändert werden könnte.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 07:19
Eben drum. Das ist ja der Sinn der ganzen Übung.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 07:24
Eben drum. Das ist ja der Sinn der ganzen Übung.
Und wo wird da die Referenz verändert?

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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 08:39
Ups, der Post hatte sich wohl irgendwie verlaufen
Nja, bevor ich den dort drüben löschen lass...
Zitat:
Die Logik steuert deine Forms.
Code:
LogicUnit
  interface
    uses Unit1, Unit2;

Unit1 und Units2
  implementation
    uses LogicUnit;
In der Logik werden die Fenster erstellt und verwaltet (wie z.B. das Enablen/Diablen von Buttons).

Die Forms können sich jetzt an die Logik wenden und diese bitten etwas zu machen, wie z.B. eine Funktionalität abzuschalten (und damit auch den Button zu disablen)


PS: Wenn man ganz krank ist, dann bekommt man auch mehrere Forms in eine Unit rein.
Nur der Formdesigner mag sowas nicht unbedingt, aber Compiler und Debugger ist sowas vollkommen egal.

[add]
Das funktioniert auch, aber mit der Gewissheit, dass die Referenz auf das Objekt nicht verändert werden kann
Ohne CONST geht es bei den Objekten genauso gut ... erzeugt genau den selben Code (ASM), ist etwas kürzer (Quellcode)
und sagt nicht "implizit" aus, daß da nichts verändert wird (Objektinhalt).
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Jun 2011 um 10:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 16:08
[add]
Das funktioniert auch, aber mit der Gewissheit, dass die Referenz auf das Objekt nicht verändert werden kann
Ohne CONST geht es bei den Objekten genauso gut ... erzeugt genau den selben Code (ASM), ist etwas kürzer (Quellcode)
und sagt nicht "implizit" aus, daß da nichts verändert wird (Objektinhalt).
Keiner versteht mich

Ich spreche doch von dem Pointer auf das Objekt (eben halt die Referenz darauf), weil nur der wird übergeben.
Mit einem var Parameter signalisiere ich, das dieser übergebene Wert sich in der Procedere verändern kann (hier also der Pointer). Und bei einer Objekt-Referenz möchte man das nur in den seltensten Fällen.

Wenn der Objekt-Inhalt nicht geändert werden soll/darf, darum muss sich das Objekt selber kümmern.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 11:15
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 11:21
.. ein Ansatz könnte das Observer-Pattern sein.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 11:38
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.
Ok, da Du meinst dass das Konzept nicht stimmt, ist die Frage, wie Du hier vorgehen würdest ? Ich möchte in der Form1 im oberen Teil des Fensters eine Buttonleiste haben. Diese Buttons sollen einmal aktiviert und deaktiviert werden Aufgrund der Aktionen im restlichen Teil des Fensters. Zudem sollen die Buttons die Eingaben in den einzelnen Formularen auch verarbeiten. Dazu kenne ich drei Möglichkeiten :
  • MDI
  • Frames
  • Forms
Bei allen drei Möglichkeiten habe ich zirkulare Bezüge bei der oben beschriebenen Aufteilung. Ich möchte auch nicht auf jedem Formular, eine eigene Buttonleiste setzen, da ich sonst für über 20 Formulare immer die gleichen Funktionen schreiben. Wo sollen da die Fehler in meinem Konzept sein ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Zirkularen Bezug von zwei Forms wie vermeiden ?

  Alt 1. Jun 2011, 11:47
Ich möchte auch nicht auf jedem Formular, eine eigene Buttonleiste setzen, da ich sonst für über 20 Formulare immer die gleichen Funktionen schreiben.
Wie so das? Lagere den redundanten Code in eine separate Unit aus und rufe den Code aus den Formularen aus auf.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 1. Jun 2011 um 11:56 Uhr)
  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 15:33 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-2025 by Thomas Breitkreuz