AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Zwischen dynamischen Forms kommunizieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zwischen dynamischen Forms kommunizieren

Ein Thema von rocksoft · begonnen am 15. Feb 2014 · letzter Beitrag vom 17. Feb 2014
Antwort Antwort
Benutzerbild von rocksoft
rocksoft

Registriert seit: 7. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#1

Zwischen dynamischen Forms kommunizieren

  Alt 15. Feb 2014, 05:32
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
Robert
--
mfg Robert
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zwischen dynamischen Forms kommunizieren

  Alt 15. Feb 2014, 07:21
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;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 7. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Zwischen dynamischen Forms kommunizieren

  Alt 15. Feb 2014, 20:56
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
Angehängte Dateien
Dateityp: rar Test.rar (2,7 KB, 5x aufgerufen)
Robert
--
mfg Robert
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#4

AW: Zwischen dynamischen Forms kommunizieren

  Alt 15. Feb 2014, 23:05
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 PCForm := aForm.Create (TabSheet); - die Prüfung 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ß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 7. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Zwischen dynamischen Forms kommunizieren

  Alt 16. Feb 2014, 06:15
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?
Robert
--
mfg Robert
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Zwischen dynamischen Forms kommunizieren

  Alt 16. Feb 2014, 06:46
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.
  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
 
#7

AW: Zwischen dynamischen Forms kommunizieren

  Alt 16. Feb 2014, 10:12
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.
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
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#8

AW: Zwischen dynamischen Forms kommunizieren

  Alt 17. Feb 2014, 00:40
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ß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 7. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Zwischen dynamischen Forms kommunizieren

  Alt 17. Feb 2014, 03:24
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
Robert
--
mfg Robert
  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 04:11 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