AGB  ·  Datenschutz  ·  Impressum  







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

Events überschreiben

Ein Thema von Mossi · begonnen am 31. Aug 2006 · letzter Beitrag vom 1. Sep 2006
Antwort Antwort
Mossi

Registriert seit: 6. Feb 2004
Ort: Wenzenbach
35 Beiträge
 
Delphi 7 Enterprise
 
#1

Events überschreiben

  Alt 31. Aug 2006, 13:55
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. (Beispiel-Tutorial)

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:
[Error] EnhEdit.pas(15): Method 'Enter' not found in base class
Welche Procedure muss ich in diesem Fall dann überschreiben? Bzw, wie bekommt man allgemein heraus, welche Procedure zu welchem Event gehört?

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.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#2

Re: Events überschreiben

  Alt 31. Aug 2006, 14:11
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:
procedure TWinControl.DoEnter;
begin
  if Assigned(FOnEnter) then FOnEnter(Self);
end;
Diese ist dynamic declariert, also überschreibbar.

Voila, das sollte die gesuchte Routine sein.

Ich hoffe, ich konnte Dir ein bißchen helfen.

Gruß

onlinekater
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Mossi

Registriert seit: 6. Feb 2004
Ort: Wenzenbach
35 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Events überschreiben

  Alt 31. Aug 2006, 16:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Events überschreiben

  Alt 31. Aug 2006, 16:33
Zitat von Mossi:
Aber wie macht man das, wenn man die VCL-Sourcen nicht zur Verfügung hat?
Du könntest probieren, in einem Beispielprojektchen einen Breakpoint in einem entsprechenden Eventhandler zu setzen und dir dann den Stack anschauen. Ich vermute, das funzt auch ohne VCL-Sourcen.

HTH, Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Mossi

Registriert seit: 6. Feb 2004
Ort: Wenzenbach
35 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Events überschreiben

  Alt 1. Sep 2006, 16:01
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.
  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 05:26 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