Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Austausch" zwischen Programmteilen, wie? (https://www.delphipraxis.net/129456-austausch-zwischen-programmteilen-wie.html)

guidok 19. Feb 2009 13:28


"Austausch" zwischen Programmteilen, wie?
 
Tut mir leid, aber ein besserer Titel ist mir jetzt erst mal nicht eingefallen, damit trotzdem klar wird, was ich meine, erkläre ich mal ein wenig.

Ich habe ein Mainform, welches zwei Panels enthält, eines für die Übersicht und eines für die Details.

Das Formular für die Übersicht enthält einen Treeview und wird mit alClient beim Programmstart im Übersichtspanel auf der Mainform angezeigt. Im Detailpanel können, je nachdem worauf in der Übersicht geklickt wird, unterschiedliche Inhalte (Formulare) angezeigt werden. Die Daten werden in einem zusätzlichen Datenobjekt (separate Unit) gehalten.

Wozu der ganze Aufwand? Ganz einfach, um die einzelnen Units übersichtlicher und in sich abgeschlossen zu halten.

Das Problem:

Ich muss jetzt irgendwie das Mainform davon informieren, dass in der Übersicht ein Inhalt für die Detailansicht ausgewählt wurde, damit das entsprechende Formular angezeigt werden kann. Die anzuzeigenden Daten sind einfach über eine eindeutige ID aus dem Datenobjekt zu ermitteln.

Mir fällt jetzt als Lösung nur ein, im Übersichtsformular entsprechende Ereignisse zu definieren, auf die die Mainform reagieren kann. Das wäre wahrscheinlich auch die OOP-Lösung. Hat jemand eine bessere Idee dazu?

mkinzler 19. Feb 2009 13:38

Re: "Austausch" zwischen Programmteilen, wie?
 
Innerhalb einer Exe oder als PlugIn(Dll, Bpl)?

thkerkmann 19. Feb 2009 13:40

Re: "Austausch" zwischen Programmteilen, wie?
 
Hi,

ich hätte die Übersicht im Mainform gehalten - weil das ist, was das Mainform ausmachen sollte: Übersicht ;-)

Gruss

guidok 19. Feb 2009 13:41

Re: "Austausch" zwischen Programmteilen, wie?
 
Ja, innerhalb einer Exe. Ich verwende nur Formulare, damit ich die Komponenten (in den Untermodulen) einfach grafisch anordnen kann.

guidok 19. Feb 2009 13:44

Re: "Austausch" zwischen Programmteilen, wie?
 
Zitat:

Zitat von thkerkmann
Hi,

ich hätte die Übersicht im Mainform gehalten - weil das ist, was das Mainform ausmachen sollte: Übersicht ;-)

Gruss

Das werde ich vielleicht noch machen...

Aber, so wie es jetzt ist, habe ich

1. Den Code für die Übersicht in einer getrennten Unit
2. Ich kann die Übersicht leicht gegen eine andere Darstellung austauschen, sogar zur Laufzeit.

hoika 19. Feb 2009 13:49

Re: "Austausch" zwischen Programmteilen, wie?
 
Hallo,

du kannst MVC (Model-View-Controller) oder Observer-Pattern benutzen.
Das Observer kommt deinen Ereignissen schon etwas nahe.

Bsp. gibt es im Netz.


Heiko

mkinzler 19. Feb 2009 13:52

Re: "Austausch" zwischen Programmteilen, wie?
 
Standardmässig sind Formulare public. Sauber natürlich per Interface-Methoden

Sir Rufo 19. Feb 2009 22:02

Re: "Austausch" zwischen Programmteilen, wie?
 
Mahlzeit,

wieso Ereignisse? Ein Ereignis reicht doch, oder auf wieviele Arten möchtest du deine MainForm darüber informieren, dass es ein Update gibt?

Das Ereignis kann man auch selbst defnieren (schau doch mal nach der Definition von TNotifyEvent). Dort kann man z.B. auch die ID übertragen oder sogar das Detail-Objekt (was man ja haben sollte, wenn es denn schon OOP sein soll ;) )

cu

Oliver

BTW: Dieses ist gerade mit OOP sehr elegant und smart zu lösen, wenn man alles komplett in OOP programmiert

guidok 20. Feb 2009 07:29

Re: "Austausch" zwischen Programmteilen, wie?
 
Zitat:

Zitat von Sir Rufo
wieso Ereignisse? Ein Ereignis reicht doch, oder auf wieviele Arten möchtest du deine MainForm darüber informieren, dass es ein Update gibt?

Stimmt. So habe ich es jetzt auch gemacht. Es gibt ein Ereignis, welches die MainForm informiert. Im Ereignis werden u.a. die geklickte Object-ID übergeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 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