![]() |
Events überschreiben
ich hab ein kleines Problem beim Events überschreiben.
In so ziemlich jedem Tutorial wird als Beispiel immer TEdit mit dem Event OnKeyPress verwendet. Man überschreibt dann einfach die procedure KeyPress und schon klappt es. ( ![]() Jetzt möchte ich aber OnEnter überschreiben und hab dann mal gedacht, dass die dazugehörige Procedure sicherlich 'Enter' heißt. Als Fehler beim Compilieren bekomm ich dann aber
Code:
Welche Procedure muss ich in diesem Fall dann überschreiben? Bzw, wie bekommt man allgemein heraus, welche Procedure zu welchem Event gehört?
[Error] EnhEdit.pas(15): Method 'Enter' not found in base class
Die Unit EnhEdit sieht im moment folgendermaßen aus (vereinfachtes Beispiel):
Delphi-Quellcode:
unit EnhEdit;
interface uses SysUtils, Classes, Controls, StdCtrls, Graphics; type TEnhEdit = class(TEdit) private { Private declarations } protected { Protected declarations } procedure KeyPress(var Key: Char); override; procedure Enter; override; public { Public declarations } published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('RHO', [TEnhEdit]); end; { TEnhEdit } procedure TEnhEdit.Enter; begin inherited; end; procedure TEnhEdit.KeyPress(var Key: Char); begin if not (Key in ['0'..'9']) then key:=#0; inherited KeyPress(Key); end; end. |
Re: Events überschreiben
Hallo!
In diesem Fall ist es recht einfach, die benötigte Procedure zu finden. Da Du ja eine Enterprise Version zur Verfügung hast, hast Du auch die Quellen der VCL-Komponenten zur Verfügung. Du möchtest hier ein Event überschreiben, für den man in der Komponente auch einen Eventhandler zuweisen kann. Der Eventhandlereintragspunkt ist OnEnter. Als erstes mußt Du Dir nun raussuchen, welcher Vorfahr von TEdit den Eintragspunkt implementiert. In diesem Fall ist das TWinControl in der Unit Controls. (Ich habe mich von TEdit solange zu den jeweiligen Vorfahren durchgehangelt, bis ich fündig wurde). Hier suchst Du Dir nun raus, wo denn der Handler, so eingetragen, aufgerufen wird. Im QuellText nach OnEnter suchen führt Dich in die Procedure DoEnter:
Delphi-Quellcode:
Diese ist dynamic declariert, also überschreibbar.
procedure TWinControl.DoEnter;
begin if Assigned(FOnEnter) then FOnEnter(Self); end; Voila, das sollte die gesuchte Routine sein. Ich hoffe, ich konnte Dir ein bißchen helfen. Gruß onlinekater |
Re: Events überschreiben
Danke. ja, das hilft mir schon sehr viel und ich komme so auch weiter und ich sehe das so auch als erledigt an.
Aber wie macht man das, wenn man die VCL-Sourcen nicht zur Verfügung hat? Hintergrund ist der, dass ich neben der D7 Ent auch noch D2005PE verwende und da eben keine Sourcen zur Verfügung habe. Natürlich kann ich so zumindest die wichtigsten Sachen immer bei der D7 nachschlagen, aber andere müssten doch theoretisch das Problem auch haben. |
Re: Events überschreiben
Zitat:
HTH, Uli. |
Re: Events überschreiben
Ok. Mit dem Stack bin ich nicht wirklich weiter gekommen. Aber unter D2005 hab ich jetzt schon gesehen, dass man da mit der Doku schon etwas weiter kommt (ok, geht auch unter D7). Da steht ja immer drin wovon ein Event abgeleitet ist. Dann muss man eben die Methoden der entsprechenden Klasse durchgehen und hoffen das passende zu finden. Es handelt sich dabei ja scheinbar immer um ähnliche Namen.
Also auf jeden Fall mal vielen Dank für die Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz