Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi wiederverwendbarkeit .... aber wie?! (https://www.delphipraxis.net/61193-wiederverwendbarkeit-aber-wie.html)

polondo 18. Jan 2006 05:32


wiederverwendbarkeit .... aber wie?!
 
hi,

Ich hab ein Unterformular mit Kundendaten das von 3 verschiedenen Oberformularen genutzt werden soll.
Bei einem Klick soll ein bestimmtes Feld auf dem Oberformular gefüllt werden von dem das Unterformular aus erzeugt / ausgeführt wurde.
(per klick in ein Edit Feld auf dem Oberformular soll das Unterformular angezeigt werden)
Nur wie krieg ich mein Unterformular dazu sich zu merken von welchem Oberformular es stammt, um dann das richtige Feld auf dem richtigen Oberformular
zu füllen. Ich möchte gerne das Erzeugen von 3 Unterformularen mit exakt denselben Daten umgehen.

Weiß einer weiter? Gibt es da eine Lösungsmöglichkeit mit "Sender as Tobject"?!!?

mfg R.

SirThornberry 18. Jan 2006 06:05

Re: wiederverwendbarkeit .... aber wie?!
 
du könntest dem Unterformular eine Methode hinzufügen nach diesem Muster:
Delphi-Quellcode:
procedure TDeinUnterFormular.ZeigeUnterformular(Oberformular: Byte);
begin
  fOberformular := Byte;
  //füllen der Felder
  Show;
end;
durch das merken welches Oberformular das Unterformular angezeigt hat kann man auch später dies noch abfragen.

polondo 18. Jan 2006 06:48

Re: wiederverwendbarkeit .... aber wie?!
 
Erstmal Danke für die Antwort!

Aber kannst Du mir genauer erläutern wie das funktioniert? Ich versteh nicht ganz wie das mit dem Byte gehen soll.

tomsel 18. Jan 2006 07:36

Re: wiederverwendbarkeit .... aber wie?!
 
Zitat:

Zitat von SirThornberry
du könntest dem Unterformular eine Methode hinzufügen nach diesem Muster:
Delphi-Quellcode:
procedure TDeinUnterFormular.ZeigeUnterformular(Oberformular: Byte);
begin
  fOberformular := Byte;
  //füllen der Felder
  Show;
end;
durch das merken welches Oberformular das Unterformular angezeigt hat kann man auch später dies noch abfragen.

Zitat:

Zitat von polondo
Aber kannst Du mir genauer erläutern wie das funktioniert? Ich versteh nicht ganz wie das mit dem Byte gehen soll.

Nun, da hat sich der Sir nur verschrieben, er meinte wohl:

Delphi-Quellcode:
procedure TDeinUnterFormular.ZeigeUnterformular(Oberformular: Byte);
begin
  fOberformular := Oberformular;
  //füllen der Felder
  Show;
end;
Damit merkst sich das Unterform die die Nummer seines Oberform.

Da sich hier beide Units gegenseitig benötigen, hat man Probleme wegen des zirkulären Bezugs, falls beide Units die jeweils andere im Interface-Abschnitt einbinden.

Eine andere Möglichkeit wäre ein Ereignis "OnEditfeldGeklickt" im Unterform. Das Oberform kann sich in der entsprechenden Ereignisbehandlung die Daten von Unterform abholen.

noidic 18. Jan 2006 08:06

Re: wiederverwendbarkeit .... aber wie?!
 
Warum noch einen extra PArameter übergeben? Im Konstruktor wird doch bereits der Owner übergeben, dass ist ja das Oberformular, wenn man das Unterformular mit TUnterformular.Create( self ) aufruft.

Ich würde dennoch nicht das Unterformular Felder des Oberformulars befüllen lassen sondern auf dem Unterformular Properties bereitstellen, woraus das Oberformular die Daten für seine Felder bezieht. Dann gibts auch keine Probleme mit Zirkulärreferenzen.

tomsel 18. Jan 2006 08:14

Re: wiederverwendbarkeit .... aber wie?!
 
Zitat:

Zitat von noidic
Warum noch einen extra PArameter übergeben? Im Konstruktor wird doch bereits der Owner übergeben, dass ist ja das Oberformular, wenn man das Unterformular mit TUnterformular.Create( self ) aufruft.

Und wie benachrichtigt das Unterform seinen Owner über Datenänderungen? Mit TOberform(Owner).NeueDaten? Dann ist man wieder beim Zirkulären dingsda. Außerdem muss sichergestellt sein, dass der Owner vom erwarteten Typ ist. Die Lösung mit einem Ereignis ist flexibler, da dem Unterform der Typ des Oberform Wurscht sein kann.

Zitat:

Zitat von noidic
Ich würde dennoch nicht das Unterformular Felder des Oberformulars befüllen lassen sondern auf dem Unterformular Properties bereitstellen, woraus das Oberformular die Daten für seine Felder bezieht.

Genau das meinte ich mit "abholen", hab mich halt zu kurz gefasst.

polondo 18. Jan 2006 08:23

Re: wiederverwendbarkeit .... aber wie?!
 
danke für die Antworten!

Ich versuch mich mal jetzt an beiden Lösungsmöglichkeiten und schau was draus wird.

mfg R.


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