Autor Beitrag
Daniel L.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140
Erhaltene Danke: 14

W7, W8
TurboD Prof, Delphi Community
BeitragVerfasst: Mo 08.11.10 23:31 
Hi,

vorweg: ich bin nicht ganz sicher, zu welcher Rubrik mein Problem gehört.

Ich bastele an einer datensensitiven Kompononete, in dem ich eine existierende Komponente mittels TFieldDataLink erweitere.

Beispiel : TMyDBEdit = class (TEdit)
...Die Eigenschaften Datasource und DataField kommen dazu

Soweit geht alle gut, die registrierte Komponente kann aufs Formular gezogen werden und funktioniert.

Nun soll die Komponente zur Laufzeit auf die Events der DataSet reagieren können, Z.B. auf BeforePost oder AfterCancel, weil neben dem normalen datensensitiven Verhalten noch ander Aktionen ausgeführt werden sollen.

Wenn ich z.B schreibe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TMyDBEdit.After_Cancel
begin
   showmessage ('After Cancel');
end;

und dann zuweise:

ausblenden Delphi-Quelltext
1:
After_Cancel := DataSource.DataSet.AfterCancel;					

so blockiere ich ja eine evtl. später vom User dieser Komponente geschriebene DataSet-Ereignissbehandlung AfterCancel.

So kann es also nicht gehen :?!?:

Gruss: Daniel

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 08.11.2010 um 22:58
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 09.11.10 06:46 
Über die DataLink-Klasse bekommst du ja Ereignisse von der DataSource. Dafür können mehrere DataLinks der DataSource hinzugefügt werden, damit eben nichts blockiert wird.

Wenn du irgendeine Aktion darüber nicht mitgeteilt bekommst (keine Ahnung, nie ausprobiert), kommst du nicht elegant da heran. Da bleibt dann vermutlich nur so etwas wie du es geschrieben hast, wenn du nicht auch die DataSource ändern willst.

// EDIT:
Ich hab mal kurz in den Quelltext geschaut:
Direkt an der Stelle, an der AfterCancel ausgelöst wird, wird direkt vorher das DataEvent der DataLinks ausgelöst (mit deDataSetChange als Event).
Daniel L. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140
Erhaltene Danke: 14

W7, W8
TurboD Prof, Delphi Community
BeitragVerfasst: Di 09.11.10 20:33 
OK - hat ne Weile gedauert, aber jetzt hab ich's:
wenn ich DataChange aus der DataLink - Klasse mit Abfragen des States der DataSet kombiniere, kann ich die gewünschten Ereignisse abfangen.

Danke für Deine Hilfe, Gruss: Daniel