Autor Beitrag
lilalaunebaer
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.02.03 21:46 
Hallo !

Ist es irgendwie möglichm auch die geerbten Ereignisse (wie z.B. OnChange) irgendwie zu verändern, bzw. alles so lassen, nur einige Standarddinge immer auszuführen ?
Gibts da sowas wie

ausblenden Quelltext
1:
2:
3:
4:
 neudeklaration von OnChange; (mit override ?!)
         inherited OnChange;
         -eigender Code-
         end;


Ich möchte nämlich eine eigene Combobox erstellen, bei der bei OnChange immer etwas ausgeführt werden soll, aber das Ereignis immernoch im Objektinspektor unter OnChange eine eigene Methode bekommen kann.

Ich hoffe ich bin ein bisschen verständlich.

Die zweite Sache: Hat hier jemand Ahnung von DB-Komponentenentwicklung ? Habe schon ein bisschen war probiert, ich möchte aber eine komplette Komponente auf TWinControl erstellen, mit Combobox, SQLQuery, DataSource und so, die Combobox soll das aktuelle ergebnis der SQL automatisch anzeigen. Geht das ohne weiteres, oder muss ich da gleich die DBCtrls neu schreiben ?

Danke,
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 03.02.03 10:48 
Hallo,

lilalaunebaer hat folgendes geschrieben:
Ist es irgendwie möglichm auch die geerbten Ereignisse (wie z.B. OnChange) irgendwie zu verändern, bzw. alles so lassen, nur einige Standarddinge immer auszuführen ?


ein Event ist ja nichts anderes als eine Eigenschaft und diese kannst Du nicht überschreiben. Allerdings: Wenn zum Beispiel bei einer tComboBox das OnChange-Event auslöst wird wurde zuvor eine Procedure aufgerufen die dann das Event auslöst. Jetzt kannst Du diese Procedure überschreiben um eigene Anweisungen vor oder nach dem Event auslösen.

Die tComboBox hat zum Beispiel unter anderem folgende Events:
ausblenden Quelltext
1:
2:
property OnChange: TNotifyEvent;
property OnDrawItem: TDrawItemEvent;

Diese Events werden von der jeweiligen folgenden Procedure ausgelöst:
ausblenden Quelltext
1:
2:
procedure Change; dynamic;
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); virtual;
Diese Procedure könntest Du in Deiner eigenen Komponente überschreiben:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure Change; override;

{...}

procedure tMyComboBox.Change;
begin
  { Hier Deine Anweisungen die vor dem Auslösen 
     des Events ausgeführt werden sollen. }

  inherited Changed;

  { Hier Deine Anweisungen die nach dem Auslösen 
     des Events ausgeführt werden sollen. }
end;


Ich hoffe das hat Dir ein weing geholfen.

Gruß
TINO
lilalaunebaer
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 03.02.03 14:55 
Ich bin auch wieder mal an Blödheit nicht zu übertreffen ..

Kommt wohl daher, das ich erst seit kurzem die Notwendigkeit habe, eigene Komponenten zu entwickeln ...

thx @ TINO, hat absolut geholfen !