![]() |
Botschaft an Application
Hallo Leute,
ich habe derzeit folgendes Problem: In einer Anwendung soll ein Benutzer eine Terminverwaltung für spezielle Einsatzfälle bekommen. Nun ist es so, dass er in dieser Verwaltung an den verschiedensten Stelle auch entsprechende Termine löschen kann. Die Möglichkeit gebe ich dem Benutzer in entsprechenden MDI-Child's oder in Formularen meiner selbst geschriebenen Komponenten (Terminplaner, Kalender, etc.). Jetzt möchte ich, dass in meinem Hauptfenster in Form eines Protokolls diese Löschvorgänge angezeigt werden. Somit besteht die Notwendigkeit, egal von welcher Stelle aus, meinem Hauptfenster eine Nachricht über diesen Vorgang zukommen zu lassen. Mal ganz einfach -> "Termin XXX vom 01.09.2006 gelöscht! Bitte Benachrichtigung vornahmen". Bis diese Aufgabe erledigt ist bleibt der Mahneintrag in der Liste stehen. So, dass zum Verständnis, was ich ungefähr mache. Für mich ist aktuell die Frage, wie löse ich das Benachrichtigungsthema innerhalb meiner Application am einfachsten. Ideal ist ein zentraler Empfang mittels Botschaft, wobei ich für ein SendMessage nicht unbedingt das Handle meines Hauptfenster bis in die letzte Ecke durchreichen will. Auch Ereignisse müsste ich über jedes Object oder Fenster weiter reichen. Wenn einer da ne grundlegende Idee hat, her damit. Dank und Gruß oki |
Re: Botschaft an Application
Zitat:
wenn dein Hauptfenster die anderen Fenster erzeugt musst Du das Handle ja nicht durchreichen. Das kannst Du dann ja so ermitteln:
Delphi-Quellcode:
hWnd := (Owner AS TForm).Handle
![]() |
Re: Botschaft an Application
Hi (Hai) Sharky,
klar, hab ich verstanden und ist auch machbar für die MDI's. Nun ist es leider so, dass in meinen eigenen Komponenten für alle benötigten Owner beim creieren von Objecten und Fenstern üblicherweise self verwende. damit ist mein Main-window leider nicht mehr der Owner. Wenn ein eingebettetes Object keinen Owner erfordert und selber ein Fenster creiert, dann übergebe ich auch mal nil als Owner. Nun kann es sein, dass jemand sagt "unsauber programmiert", o.k. - stimmt dann wohl. aus diesem grund dachte ich ja auch, dass mann hier vielleicht etwas über Application machen kann, denn dass kennen doch eigentlich alle Teile meiner Application. Gruß oki |
Re: Botschaft an Application
Hallo oki,
benutzt Du ein gemeinsames Datenmodul oder dieselbe Tabelle? Dann könntest Du das Ereignis ![]() Gruß Jürgen |
Re: Botschaft an Application
Hi Jürgen,
eine Tabelle benutze ich nicht zwingend für jeden Vorgang den ich nach oben melden möchte. In diesem Beispiel ist das natürlich naheliegend. Mir geht es hier um einen Lösungsansatz, der mir schon bei mehreren Projekten aufgestoßen ist. Ich habe des öffteren den Bedarf, dass ich Botschaften an eine zentrale Stelle senden möchte. Da dachte ich im Moment an so'ne Sache wie z.B. OnMessage über Application. Nur wie setze ich eine eigene Botschaft dort hin ab? Laut Hilfe ist hier SendMessage nicht möglich, wobei ja SendMessage ein FensterHandle benötigt, was ich nicht haben will. gruß oki |
Re: Botschaft an Application
In der Unit Forms gibt es eine Variable Namens Application. Wenn Du nun Application.MainForm.Handle nimmst, kommt es immer am Hauptformular an.
|
Re: Botschaft an Application
Zitat:
ah ja. Aber versuch doch einmal, mit WinSight das versteckte Fenster Deiner Applikation zu finden. Ein solches erzeugt Delphi immer; das versteckt sich nämlich hinter der Variablen Application. Darüber müsstest Du dieses Fenster und folglich auch das Handle bekommen. Viel Erfolg! Jürgen |
Re: Botschaft an Application
Hi,
ich habs gefunden!!! Ob mein weg nun so richtig gut ist weis ich nicht, aber er funzt. Ich habe folgendes gemacht: Deklaration einer Botschaftskonstanten
Delphi-Quellcode:
Dann bekommt mein Main-Window eine entsprechende Behandlungsprocedur
wm_MsgEvent = wm_user + 101; /// Botschaft, dass eine neue Nachricht zum Einfügen in die Mahnliste vorliegt
Delphi-Quellcode:
Der Einfach heit halber hab ich hier den Standardparameter TMSG verwendet.
public
{ Public-Deklarationen } procedure WMMsgEvent(var Message: TMSG); message WM_MsgEvent; end; procedure TMainForm.WMMsgEvent(var Message: TMSG); begin MessageDlg(Format('MessageEvent: %s', [Message.msgText]), mtInformation, [mbOK], 0); end; Jetzt der eigentliche Teil. Die Variable Application besitzt die Eigenschaft "MainForm"; und somit läßt sich das Handle des Hauptfensters immer eindeutig ermitteln. Ich setzt die Botschaft dann wie folgt ab:
Delphi-Quellcode:
o.k. Dank an alle die beim Nachdenken geholfen haben,
// und jetzt Nachricht an Hauptfenster zum aktualisieren
PostMessage(Application.MainForm.Handle, wm_MsgEvent, 0, 0); gruß oki |
Re: Botschaft an Application
Zitat:
Gruß Jürgen |
Re: Botschaft an Application
Hi,
@Sidorion Tschuldige, dass ich deinen Beitrag übersehen hab. Aber da war der Gedanke dann doch der Gleiche. @Jürgen Jo, so scheint's. Nochmal dank. Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz