AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Botschaft an Application

Ein Thema von oki · begonnen am 1. Sep 2006 · letzter Beitrag vom 4. Sep 2006
Antwort Antwort
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

Botschaft an Application

  Alt 1. Sep 2006, 09:58
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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Botschaft an Application

  Alt 1. Sep 2006, 10:06
Zitat von oki:
... nicht unbedingt das Handle meines Hauptfenster bis in die letzte Ecke durchreichen will....
Hai oki,

wenn dein Hauptfenster die anderen Fenster erzeugt musst Du das Handle ja nicht durchreichen.
Das kannst Du dann ja so ermitteln:
hWnd := (Owner AS TForm).Handle Hier habe ich das in meinem Beispiel so gemacht.
Stephan B.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Botschaft an Application

  Alt 1. Sep 2006, 10:30
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
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Botschaft an Application

  Alt 1. Sep 2006, 11:45
Hallo oki,

benutzt Du ein gemeinsames Datenmodul oder dieselbe Tabelle? Dann könntest Du das Ereignis Delphi-Referenz durchsuchenTTable.AfterDelete in Deinem Hauptformular auswerten.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Botschaft an Application

  Alt 4. Sep 2006, 08:38
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
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#6

Re: Botschaft an Application

  Alt 4. Sep 2006, 09:55
In der Unit Forms gibt es eine Variable Namens Application. Wenn Du nun Application.MainForm.Handle nimmst, kommt es immer am Hauptformular an.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#7

Re: Botschaft an Application

  Alt 4. Sep 2006, 09:55
Zitat von oki:
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.
Hallo oki,

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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Botschaft an Application

  Alt 4. Sep 2006, 10:19
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

  wm_MsgEvent = wm_user + 101; /// Botschaft, dass eine neue Nachricht zum Einfügen in die Mahnliste vorliegt Dann bekommt mein Main-Window eine entsprechende Behandlungsprocedur

Delphi-Quellcode:
  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;
Der Einfach heit halber hab ich hier den Standardparameter TMSG verwendet.
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:
  // und jetzt Nachricht an Hauptfenster zum aktualisieren
  PostMessage(Application.MainForm.Handle, wm_MsgEvent, 0, 0);
o.k. Dank an alle die beim Nachdenken geholfen haben,

gruß oki
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#9

Re: Botschaft an Application

  Alt 4. Sep 2006, 10:32
Zitat von oki:
ich habs gefunden!!!

Ob mein weg nun so richtig gut ist weis ich nicht, aber er funzt.
Nach allem, was ich über Botschaften gelernt habe, dürfte das genau der richtige Weg sein. Das bestätigt auch @Sidorion, der zeitgleich mit meinem letzten Hinweis genau auf Application.MainForm.Handle hingewiesen hat.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Botschaft an Application

  Alt 4. Sep 2006, 10:38
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
  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 20:45 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