Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Zwischen dynamischen Forms kommunizieren (https://www.delphipraxis.net/179117-zwischen-dynamischen-forms-kommunizieren.html)

rocksoft 15. Feb 2014 05:32

Zwischen dynamischen Forms kommunizieren
 
Hallo zusammen,

stecke wieder fest und komme nicht auf die lössung, ich möchte gerne zwischen 2 dynamisch erzeugten forms kommunizieren: das heist auf ein bestimmten Feld von der Form1 in die Form2 kopieren, focus setzen oder auslesen.

leider bekomme ich diese fehler meldung.
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt ERP.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x0087b67b: read of address 0x000003a8' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

hat jemand eine lössung für mich?

mercy

jaenicke 15. Feb 2014 07:21

AW: Zwischen dynamischen Forms kommunizieren
 
Ohne etwas Quelltext kann dir da niemand konkret helfen, aber ich vermute, dass du die Instanzen durcheinander bringst. Sprich auf eine Formularvariable zugreifst, dessen Formular gar nicht da ist.

Richtig wäre z.B.:
Delphi-Quellcode:
var
  SecondForm: TSecondForm;
begin
  SecondForm := TSecondForm.Create(nil);
  try
    SecondForm.OnExampleChange := ExampleChangeEvent;
    if IsPositiveResult(SecondForm.ShowModal) then
      DoSomethingWith(SecondForm.ExampleResult);
  finally
    SecondForm.Free;
  end;
end;

rocksoft 15. Feb 2014 20:56

AW: Zwischen dynamischen Forms kommunizieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jaenicke,

da hast du recht ohne ein wenig quellcode und ohne Glasskugel wird es sehr schwer :) haenge mal ein bsp als anhang.

ein schönen WE

Volker Z. 15. Feb 2014 23:05

AW: Zwischen dynamischen Forms kommunizieren
 
Hallo,

ich kann aus dem Quellcode nicht erschließen was Du eigentlich erreichen möchtest (vermutlich nur so ein Testballon).

Aber: Dass Deine Vorgehensweise "in die Hose gehen muss" ist schon klar - oder?. Mit
Delphi-Quellcode:
PCForm := aForm.Create (TabSheet);
- die Prüfung
Delphi-Quellcode:
if Assigned(aForm) then
ist eigentlich unnötig wie ein Kropf - erstellst Du zwar jeweils eine Instanz von TForm2 bzw. TForm3, aber der Compiler stellt Dir doch da keine automatische Zuordnung PCForm zur Variable Form2 bzw. Form3 her (das müsstest Du schon selbst übernehmen); dementsprechend bleiben diese beiden Variablen nun mal nicht initialisiert - und damit muss es beim Zugriff auch scheppern.

Vielleicht erklärst Du erst mal was Du eigentlich vor hast und letztlich erreichen möchtest; gekoppelt an die Frage: "Wie könnte man das dann elegant lösen?"

Gruß

rocksoft 16. Feb 2014 06:15

AW: Zwischen dynamischen Forms kommunizieren
 
Hallo Volker,

ja der quellcode ist nur ein test, da ich einige VLC benutze, würde es bei viele nicht laufen.

der Zweck an sich, ist es wenn man die Form3 bearbeitet und möchtet man gerne die werte aus der Form2.Edit1.Text auslesen, oder auf die Form2 springen und den focus auf ein bestimmten Feld setzen, z.B wenn man ein neuen Datensatz anlegt, das der focus zur der KND-Nr springt.

Was ich erreichen will?
Ich möchte eine application machen wo alle Forms in ein Pagecontrol(Tabsheets) zu sehen sind und bei bedarf auf ein bestimmten Tabsheets springen und auf ein bestimmten edit den focus setzen.

Wie du schon sagst
"Wie könnte man das dann elegant lösen?" oder was muss ich machen das einer Zuordnung stat findet?

Perlsau 16. Feb 2014 06:46

AW: Zwischen dynamischen Forms kommunizieren
 
Dafür benötigst du doch keine weiteren Forms, das kannst du alles in einem einzigen Formular erledigen. Platziere deine Eingabe-Formulare (nicht Forms, sondern die zu einem Formular angeordneten Eingabefelder) jeweils auf verschiedenen Tabsheets und gut ist. Wozu eigene Forms, die dann sowieso in Tabsheets eingebettet sein sollen?

Davon abgesehen stellt es einen äußerst schlechten Programmierstil dar, wenn man Daten aus Editfeldern anderer Forms auslesen muß, um gewisse Berechnungen beginnen zu können. Daten sollten zentral verwaltet werden, so daß sie von allen benötigten Forms aus erreichbar sind.

Sir Rufo 16. Feb 2014 10:12

AW: Zwischen dynamischen Forms kommunizieren
 
Es macht durchaus Sinn mit mehreren Formularen zu arbeiten, gerade dann, wenn die Anzahl der TabSheets dynamisch sein kann, oder es sonst zu komplex werden würde (Monster-Formular).

Allerdings sollte man niemals von aussen auf die konkreten Elemente zugreifen um ein bestimmtes Verhalten zu bekommen.

Wenn das Formular x in die Grundstellung soll, dann erstellt man dort eine Methode Grundstellung die von aussen aufgerufen wird. Das Formular selber, weiß wie es diese Grundstellung zu erledigen hat.

Auf die Daten greift man auch nicht direkt zu, sondern entweder über Properties oder über ein ein entsprechendes Datenobjekt, was die Daten der Form beinhaltet. Änderungen in der form gehen in das Datenobjekt und Änderungen am Datenobjekt werden in der Form angezeigt.

Volker Z. 17. Feb 2014 00:40

AW: Zwischen dynamischen Forms kommunizieren
 
Hallo,

Zitat:

Was ich erreichen will?
Ich möchte eine application machen wo alle Forms in ein Pagecontrol(Tabsheets) zu sehen sind und bei bedarf auf ein bestimmten Tabsheets springen und auf ein bestimmten edit den focus setzen.
Naja, aus Deinen Ausführungen jetzt viel sinnvolles herauszufiltern, da tue ich mich jetzt ehrlich gesagt etwas schwer (hüpf von A nach B, setze dabei vielleicht den Fokus in ein bestimmtes (oder vielleicht doch noch nicht definiertes) TEdit-Control, aber nur, wenn Weihnachten und Ostern auf einen Tag zusammenfallen, oder das Raum-Zeit-Kontinuum auf Ursa Beta Minor derart ins straucheln gerät, so dass nur noch ein weit ausgedehntes PAL-Feld und zwei kurz hintereinander geschluckte pangalaktischer Donnergurgler den tiefen und letzlich endgültigen Blick in den totalen Durchblickstrudel verhindern; vorausgesetzt, dass die noch relativ junge Disziplin der Instochastic rechtzeitig die mathematisch zwar fundierte und aber noch zu beweisende Formel: P(Pottwal) = P(Petunientopf) - 1/8 so kurz nach halb zwölf, tatsächlich zutrifft, wenn man nachmittags gegen halb Drei in einen Pub in Islington ein Bitter schlabbert.

Aber jetzt zu etwas konstruktiverem: Wie Sir Rufo schon richtig anmerkte sollte der Zugriff auf Eigenschaften eines Forms nun wirklich nicht von außen erfolgen. Du solltest Dir Schnittstellen in Deinem MainForm definieren, so dass die "eingebetteten Formulare" (Formulare auf den TabSheets) auf diese Schnittstellen zugreifen können (eventuelle Zustandsänderungen o. ä. melden) und das MainForm dann entsprechend "alle anderen Forms" informiert. Dazu müssten natürlich die eingebetteten Formulare die notwendigen Schnittstellen bereitstellen. Wege dies zu erreichen gibt es viele.

Was für Dich am günstigsten wäre, kann ich nur raten - leider.

Gruß

rocksoft 17. Feb 2014 03:24

AW: Zwischen dynamischen Forms kommunizieren
 
Hallo zusammen,

@Perlsau
Zitat:

Dafür benötigst du doch keine weiteren Forms, das kannst du alles in einem einzigen Formular erledigen. Platziere deine Eingabe-Formulare (nicht Forms, sondern die zu einem Formular angeordneten Eingabefelder) jeweils auf verschiedenen Tabsheets und gut ist. Wozu eigene Forms, die dann sowieso in Tabsheets eingebettet sein sollen?
Also der sinn und zweck ander sache ist, das man mehreren Formulare nach bedarf laden kann z.B Form für Kunden, Artikel etc, mag MDI nich so sehr


Zitat:

Davon abgesehen stellt es einen äußerst schlechten Programmierstil dar, wenn man Daten aus Editfeldern anderer Forms auslesen muß, um gewisse Berechnungen beginnen zu können. Daten sollten zentral verwaltet werden, so daß sie von allen benötigten Forms aus erreichbar sind.
Da stimme ich voll zu, dann werde ich mal meine faulheit zu seite legen und es besser zur machen :)

@Sir Rufo
Zitat:

Wenn das Formular x in die Grundstellung soll, dann erstellt man dort eine Methode Grundstellung die von aussen aufgerufen wird. Das Formular selber, weiß wie es diese Grundstellung zu erledigen hat.

Auf die Daten greift man auch nicht direkt zu, sondern entweder über Properties oder über ein ein entsprechendes Datenobjekt, was die Daten der Form beinhaltet. Änderungen in der form gehen in das Datenobjekt und Änderungen am Datenobjekt werden in der Form angezeigt.
Da werde ich mich da mal einlesen, fallst du tutorial oder sinnvolle quelle hast wäre ich dir Dankbar für den link.

@Volker Z.
aber bitte nur bei Vollmond :)

werde mal Sir Rufo's rat mal folgen.

besten dank an alle


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