Autor Beitrag
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Mo 23.06.03 22:05 
Also ich habe ein TSQLQuery-Objekt. Dieses Objekt hat das Event "AfterScroll". Ich Leite nun mein eigenes Objekt von TSQLQuery ab und möchte das dieses Objekt immer bei AfterScroll eine bestimmte Sache ausführt. Wie mache ich das richtig ohne Das Event zu sperren.

Bis jetzt habe ich das ganze so realisiert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type TMeineKlasse = class(TSQLQuery)
  constructor create(owner:Tcomponente); override;
  procedure MeinOnScrollEvent(sender:TDataSet);
end;

constructor TMeineKlasse;
begin
  AfterScroll := MeinOnScrollEvent(nil);
end;

procedure TMeineKlasse.MeinOnScrollEvent(sender:TDataSet);
begin
  // meine Aktionen.
end;


Diese Variante funktioniert jedoch nur solange bis jemand das AfterScroll Event benutzt um auch etwas zu machen. Dann wird meine Prozedure nicht mehr ausgeführt. Wie lautet der Code damit eine Instanz meiner Klasse auch noch das Event AfterScroll verwenden kann?

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt (Bitte Signatur ändern, s. Richtlinien!)

_________________
Result := 42; Application.ProcessMessages;
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 24.06.03 11:43 
:roll: hmm... muss das nicht so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type TMeineKlasse = class(TSQLQuery) 
  constructor create(owner:Tcomponente); override
  procedure MeinOnScrollEvent(sender:TDataSet); 
end

constructor TMeineKlasse.create(...); 
begin 
  OnAfterScroll := MeinOnScrollEvent; // <-- geändert
end

procedure TMeineKlasse.MeinOnScrollEvent(sender:TDataSet); 
begin 
  // meine Aktionen. 
end;


PS: erstell doch noch ein event, das du dann in 'MeinOnScrollEvent' aufrufst. Oder leite das objekt von einer ...custom klasse ab, dann kannst du die sichtbarkeit noch beeinflussen, sodass man nach aussen nur das neue event sieht :wink:

_________________
mfg.
mâximôv
BeniSchindler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Di 24.06.03 12:30 
Danke, aber das was du unter dem Delphicode geschrieben hast, war genau das was ich nicht weiss wie es geht. Ich habe jetzt jedoch eine andere Variante gefunden die funktioniert. Aber nochmal danke fürs drüber nachdenken.

Ich habe das ganze jetzt so gelöst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type TMeineKlasse = class(TSQLQuery)  
  procedure DataEvent(Event : TDataEvent; info : longint); override;  
end;

procedure TMeineKlasse.DataEvent(Event : TDataEvent; info : longint); override;  
begin
  inherited;
  if Event = deDataSetScroll then begin
    //hier steht der Code der Nach einem Scroll abgehandelt werden soll.
  end;
end;

_________________
Result := 42; Application.ProcessMessages;
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 24.06.03 13:10 
Noch besser :D Hätte ich dir auch vorgeschlagen, wusste aber nicht ob es da eine virtuelle-proc zum überschreiben gibt.

_________________
mfg.
mâximôv
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 24.06.03 14:02 
Hallo,

ein Event kann man nicht überschreiben da es ja nur eine Eigenschaft eines Objekts ist. Eine Methode dagegen kann man (wenn diese entsprechend definiert ist) überschreiben.

In den meisten Fällen existiert aber neben dem Event auch eine entsprechende Methode die man ableiten kann um ebenfalls auf das Ereignis zu reagieren.

Gruß
Tino
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 24.06.03 14:32 
schön gesagt :roll:

_________________
mfg.
mâximôv