AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Projektmanagment : aus Units auf Form zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Projektmanagment : aus Units auf Form zugreifen

Ein Thema von 64Jabor · begonnen am 4. Mär 2009 · letzter Beitrag vom 4. Mär 2009
Antwort Antwort
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#1

Projektmanagment : aus Units auf Form zugreifen

  Alt 4. Mär 2009, 21:16
Hallo DP,

leider bin ich Neuling in Delphi und gerade in der OOP!
Ich habe in meinem Projekt ein Hauptformular und außerdem mehrere Units eingebunden.
Im uses-Teil der Unit des Formulars eingetragen, kann ich von dieser Formular-Unit auf alle freigegebenen Objekte der anderen Units zugreifen.
Nun möchte ich dies allerdings in umgekehrter Richtung erreichen.
Natürlich kann ich nicht einfach in jeder Unit wiederum die Hauptunit einbinden

Nur die Frage ist, wie gehts?
Ich habe selbstverständlich schon in der DP gesucht und auch lange gegoogelt in der Annahme, dass dieses Problem von Anfängern schon tausendfach angesprochen worden ist, aber wahrscheinlich habe ich die falschen Suchbegriffe verwendet, weil ich nicht genau weiß...wie man das Problem nennt ^^

Freue mich über jeden Hinweis!

greetZ 64Jabor
Sebastian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Projektmanagment : aus Units auf Form zugreifen

  Alt 4. Mär 2009, 21:24
Zitat:
Natürlich kann ich nicht einfach in jeder Unit wiederum die Hauptunit einbinden Very Happy
Warum nicht? Ist nur die Frage ob man das machen sollte. Aber möglich ist es, indem du die Rückwärtseinbindung im Implementation-Abschnitt durchführst.

Besser ist aber Gemeinsames auszulagern
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

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

Re: Projektmanagment : aus Units auf Form zugreifen

  Alt 4. Mär 2009, 21:26
Du kannst einmal Units im Interface-Teil einbinden und einmal im Implementation-Teil. Über diese beiden Teile kannst Du eine cirkulare Verknüpfung der Units hinbekommen. Aber sei vorsichtig dabei, es kann da schnell zu Fehlermeldungen kommen.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#4

Re: Projektmanagment : aus Units auf Form zugreifen

  Alt 4. Mär 2009, 21:41
@RWarnecke
Achso, damit kann ich den Kreislauf schließen ohne diese Fehlermeldung ^^

@mkinzler
Globale Variablen/Konstanten habe ich in eine Unit eingebaut, sodass jede Unit die sie einbindet diese nutzen kann.
Das Problem ist nur, dass ich in meinen Funktionen/Prozeduren auf Objekte des Hauptformulares nutzen will - zB. ein TImage.
Das ginge dann nicht mehr von der Unit oder den anderen aus, aber mit dem Kreisprinzip kann ich dann in der einen Unit den kreislauf schließen, sodass eventuell auftretende Fehler nur dort liegen können...


Vielen Dank!
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Projektmanagment : aus Units auf Form zugreifen

  Alt 4. Mär 2009, 21:58
Die meisten dieser Probleme kannst du durch ein ordentliches Design deines Programmes vermeiden. Wenn du zirkuläre Referenzen hast, dann deutet das darauf hin, dass du etwas nicht richtig durchdacht hast (natürlich steht jeder, der beginnt zu Programmieren vor diesem Problem). 99,9% der Fälle lassen sich jedoch auch anders lösen.

Ich gebe dir mal einen kleinen Denkanstoß:

Ein selbst gebastelter modaler Dialog (Form2, Unit2) soll einen String in Edit24 des Hauptformulars ändern.

Schlechte Lösung:
Delphi-Quellcode:
unit Form1;

[...]

procedure TForm1.Button18Click(Sender: TObject);
begin
  Form2.ShowModal;
end;

[...]

unit Form2;

[...]

implementation

uses Unit1;

procedure TForm2.Button29Click(Sender: TObject);
begin
  Form1.Edit24.Text := 'Dies ist mein Text';
end;
Besser:
Delphi-Quellcode:
unit Unit1;

[...]

implementation

procedure TForm1.ButtonClick(Sender: TObject);
begin
  Edit24.Text := Form2.ShowDialog;
end;

[...]

unit Unit2;

[...]

implementation

type
  TForm2 = class(TForm)
    [...]
  public
    function ShowDialog: string;
  end;

[...]

interface

function TForm2.ShowDialog: string;
begin
  ShowModal;

  result := 'Dies ist mein Text';
end;
Andere Probleme kannst du zum Beispiel über Methodenzeiger (in Delphi als "Ereignisse" missbraucht) lösen: Möchtest du etwas auf Form1 durch den nicht modalen dialog Form2 steuern, informiert Form2 Form1 über den vorher übergebenen Methodenzeiger über die Änderung. Auch hier gibt es keine zirkulären Referenzen.

Edit: Ansich ist es für ein einfaches Projekt nichts schlimmes mit diesen Zirkulären Referenzen zu arbeiten. Die Wiederverwendbarkeit deines Codes geht dann aber gegen Null, wie du auch an meinem Beispiel oben siehst.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#6

Re: Projektmanagment : aus Units auf Form zugreifen

  Alt 4. Mär 2009, 22:14
Danke für deine Code!

Ich verstehe, was du meinst und du hast völlig Recht wenn du sagst, dass es bei kleineren Projekten legitim ist, mit zirkularen Referenzen zu arbeiten, denn es ist wohl eindeutig mehr Aufwand, allerdings universeller einsetztbar.
Wahrscheinlich werde ich es bei meinem doch eher kleineren Projekt bei den Zirkularen lassen, aber bei größeren Projekten, ist dies durchaus empfehlenswert, vielen Dank!
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:23 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