kostenloser Webspace werbefrei: lima-city


C++: Kommunikation/Datenaustausch zwischen Formularen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    kalle2908

    kalle2908 hat kostenlosen Webspace.

    Hallo Leute,

    mal ne Frage ich muss für die Uni ein Projekt machen dabei geht es um Anwendungen mit mehreren Fenstern. Unter anderem MDI Anwendungen und eben Kommunikation zwischen Formularen.. Mit letzterem habe ich ein Problem. Ich habe mir einige Lösungsmethoden überlegt aber keine ist sehr universell. Es sollte möglich Formularelemente aber auch Variablen zu Kopieren.

    Hier meine Ansätze:

    1. Beide Formulare Bekomme eine Methode in der ihr ein Wert übergeben wird. Das wäre ähnlich dem geter und seter Prinzip. D.h. für jedes Element nen Extra geter und seter also durch aus machbar aber zu umständlich wenn es vorher gar nicht sicher ist ob es benötigt wird.

    2. Zwei Formulare die mit einander Kommunizieren sollen bekommen jeweils einen Pointer von der Instanz des anderen Fensters. Neben einigen Fehlern im Programm ist außerdem das Problem das ich die Instanz als Attribut der Klassen machen muss heißt also ich mache da ne Instanz TForm2 *komFenster; Soweit kein prob aber was wenn ich jetzt gar nicht mit einerm Fenster der Klasse TForm2 kommunizieren möchte sondern von TForm3 oder sowas?
    dann habe ich folgendes gemacht TForm *komFenster da alle Fensterklassen davon abgeleitet werden kann ich die ja da auch rein schreiben, aber dann kann ich nicht mehr auf die Attribute von den Fenstern zugreifen die nicht schon in TForm Vorkommen.

    Ich benutze im Übrigen Borland / CodeGear aber letztenendes geht es ja um das Prinzip kann mir vllt jemand sagen wie es universell möglich ist Daten auszutauschen.

    MfG kalle2908
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c****s

    Beide Ansätze sind gut und realisierbar.

    Der in meinen Augen sauberere Ansatz wäre allerdings die Kommunikation über das Eventhandling deiner Anwendung mitlaufen zu lassen. Das hängt jetzt davon ab, womit du deine Fenster programmierst:
    - Bei MFC oder Win-API kannst du nutzerdefinierte Events erstellen, denen als Payload die zu setzende Information mitgeben und über die Main-Msg-Loop (das WaitForSignleEvent-Ding in der winmain) zu den einzelnen Fenstern pumpen.
    - Bei QT definierst du bei deinen Fenstern einfach Slots und Signals und verbindest diese miteinander.

    Die Frage ist, ob diese Verwaltung nicht eine Ebene höher gehört: Sprich über deinen verschiedenen Formularen oder InternalFrames liegt ein großes Elternobjekt, das ich nun mal "Desktop" nenne. Der Desktop kennt alle seine Fenster, Formulare und was-weiß-ich-nicht. Wenn nun ein Kind des Desktops mit einem anderen kommunizieren will, schickt Kind A die Nachricht an den Desktop und der dispatcht das ganze wieder an die anderen Kinder. Ein Beispiel:

    Du hast einen Desktop und darunter 4 Elemente: 1 Eingabeformular, 1 tabellarische Ausgabe und 1 graphische Ausgabe. Wenn du nun am Eingabeformular etwas änderst, dann sagt diese Formular dem Desktop "die Eigenschaft ABC hat nun den Wert 123". Daraufhin schickt der Desktop diese Information an alle Kinder (also die beiden Ausgaben) und diese aktualisieren sich.
  4. Autor dieses Themas

    kalle2908

    kalle2908 hat kostenlosen Webspace.

    naja wie gesagt meine beiden lösung sind meiner meinung nach nicht so optimal weil sie nicht unbedingt besonders universell oder modular sind.

    Ich erstelle das ganze mit der VCL von Borland.

    Zu deinem Ansatz:

    Aus dem Schlagwort "Nachricht" entnehme ich das ich mit Messages arbeiten soll ? (ist nur ne Vermutung weil ich noch nichts mit Messages zu tun hatte, also nicht genau weiß wozu man sie einsetzt.) Wenn das so gemeint ist werde ich es mal versuchen .


    MfG Kalle2908
  5. c****s

    Bei VCL kann ich dir leider nicht helfen, da ich keine Paläoinformatik betreibe und ich auch nicht ganz nochvollziehen kann, wieso man an der Uni Dinge vermittelt, die bar jeden Gegenwartbezuges sind. Schön, dass euer Prof mal in seiner Jugend vor dem Krieg mit Borland Turbo-C geproggt hat, aber darum muss er euch das doch nicht antun.
  6. Autor dieses Themas

    kalle2908

    kalle2908 hat kostenlosen Webspace.

    naja zu seiner verteidigung muss ich sagen das es da auch schon neue Version CodeGear mit dem arbeite ich.

    Naja jetzt sollen wir eben selbständig verschiedene Themen erarbeiten und Dokumentieren. Problem ist nur so das der (wie ich auch) Modularität und Wiederbenutzbarkeit sehr wichtig findet. Wäre auch nicht weiter schlimm, aber es gibt dazu keine Literatur und jede der Lösungen die ich mir bis jetzt irgendwo an ihre Grenzen gestoßen ist die eine früher die andere später. Ich werde mal sehen ob ich eine Extra Klasse implementiere die Instanzen auf die Formulare enthält und dann durch Aufruf einer Methode entsprechend reagiert (Vllt. hast du das eben auch eher gemeint Messages waren es wahrscheinlich nicht, da habe ich eben nachgelesen).

    Danke schon mal für deine hilfe vlt. kennt ja jemand noch ne besser Lösung oder nen Buch/ ne Webseite

    MfG kalle2908
  7. c****s

    Noch ein Gedanke:

    Wenn du im größeren Stile Kommunikation zwischen Prozessen betreiben willst, lies dich mal in die Thematik "named pipes" ein. Die gibt es originär unter Unix/Linux, aber auch unter MacOS (heißen da Sockets) und unter Windows (heißen da auch "named pipes").

    http://en.wikipedia.org/wiki/Named_pipe
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!