AGB  ·  Datenschutz  ·  Impressum  







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

Komponentenentwicklung: Eigenes Ereignis

Ein Thema von little-x · begonnen am 4. Jun 2007 · letzter Beitrag vom 4. Jun 2007
Antwort Antwort
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#1

Komponentenentwicklung: Eigenes Ereignis

  Alt 4. Jun 2007, 12:23
Hallo,

nachdem ich das Handbuch gequält habe (oder besser mich), und auch über die Suche nichts darüber gefunden habe.

Einfach ausgedrückt: Meine Komponente sollte darauf reagieren, wenn sich eine (applikationsweit) globale Variable ändert. Es handelt sich bei der Variable nicht um eine Property der Komponente. Bin bisher nur bis zur Deklaration des Ereignisses gekommen und hänge da jetzt fest

Delphi-Quellcode:
  private
        { Private-Deklarationen }
        FOnMyVarChange: TNotifyEvent;
  protected
      { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
        property OnMyVarChange: TNotifyEvent read FOnMyVarChange write FOnMyVarChange;

Irgendwo muss ich das Ereignis letztlich auslösen. Über Sinn und Unsinn, und wo die Variable letztlich deklariert ist, soll man sich an der Stelle keine Gedanken machen. Setzt mal voraus dass es diese gibt... Wie programmiert man das, dass auf Änderungen dieser Variable meine Komponente ein Ereignis auslöst?


Viele Grüße
manchmal machts mich mürbe
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Komponentenentwicklung: Eigenes Ereignis

  Alt 4. Jun 2007, 12:26
Bisher hast du alles richtig gemacht.
Es fehlt noch:
Delphi-Quellcode:
procedure TMyCompo.DoMyChange; // virtual, protected
begin
   if Assigned(FOnMyVarChange) then
      FOnMyVarChange(self);
end;
Wenn sich was ändert einfach innerhalb der Komponente obige Methode aufrufen.
Andreas
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#3

Re: Komponentenentwicklung: Eigenes Ereignis

  Alt 4. Jun 2007, 12:28
Wenn die Variable eine Eigenschaft der Komponente ist, dieser Eigenschaft eine Setter-Methode verpassen und dort das Ereignis feuern.

Ist die Variable aber kein Teil des Objekts, und so ist es ja bei dir, falls ich das richtig verstanden habe, wirst du wohl an jeder Stelle im Code, an der die Variable gesetzt wird, das Ereignis einzeln auslösen müssen.

Zum Auslösen von Ereignissen findest du mehr in der OH.

//Edit
Wie man das Ereignis auslöst hat shmia ja bereits demonstriert
  Mit Zitat antworten Zitat
little-x

Registriert seit: 13. Apr 2007
Ort: Brandenburg
60 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Komponentenentwicklung: Eigenes Ereignis

  Alt 4. Jun 2007, 15:51
Also danke erstmal für Eure Hilfe...

Ich muss dann doch etwas genauer werden. Meine Komponente ist ein abgeleitetes DBEdit. Im Grunde muss ich das Ereignis OnStateChange der verbundenen DataSource reagieren.

Zitat:
Ist die Variable aber kein Teil des Objekts, und so ist es ja bei dir, falls ich das richtig verstanden habe, wirst du wohl an jeder Stelle im Code, an der die Variable gesetzt wird, das Ereignis einzeln auslösen müssen.
Das dumme ist ja dass ich mich in der Komponente befinde, und demnach an die Ereignissteuerung der verbundenen DataSource nicht rankomme. Die Einstellung OnStateChange der DataSource will ich auch ungern zur Laufzeit überschreiben, da ich mir nciht die Möglichkeit nehmen möchte, dieses Ereignis später in der Anwendung zu nutzen.

Demzufolge ist meiner Ansicht nach ein eigenes Ereignis für den DBEdit erforderlich. Ich dachte so in etwa an die Windows-Messages, und dann über das Handle der DataSource irgendwie die Dinger abzufangen...
Aber da verlassen mich meine Kenntnisse...
manchmal machts mich mürbe
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Komponentenentwicklung: Eigenes Ereignis

  Alt 4. Jun 2007, 15:55
für mich sieht das so aus als ob du von DataSource ableiten solltest.
Das abgeleitete Object sollte dann die Möglichkeit bieten das sich weitere Objecte bei dem Datasorce registrieren und bei änderungen benachrichtigt werden.

Die sauberste Lösung ist also von DataSource und von DBEdit abzuleiten und beide Nachfahren so zu erweitern das sie miteinander kommunizieren können.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Komponentenentwicklung: Eigenes Ereignis

  Alt 4. Jun 2007, 18:50
Zitat von SirThornberry:
für mich sieht das so aus als ob du von DataSource ableiten solltest.
Das abgeleitete Object sollte dann die Möglichkeit bieten das sich weitere Objecte bei dem Datasorce registrieren und bei änderungen benachrichtigt werden.
Es gibt zwei fast unbekannte Klassen, die intern ein DB-sensitives Control mit einer DataSource verknüpfen:
TDataLink und TFieldDataLink
Im Fall eines DBEdit wäre TFieldDataLink richtig.
Die Sache ist etwas komplex; deshalb sollte man auf Torry's nach datensensitiven Controls Ausschau halten, downloaden, lernen und dann abkupfern.
Andreas
  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 17:13 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