AGB  ·  Datenschutz  ·  Impressum  







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

[Kompoente] Ereignisse überschreiben

Ein Thema von xZise · begonnen am 12. Feb 2007 · letzter Beitrag vom 12. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 15:45
Wie kann ich ein Ereignis der Stammkomponente überschreiben?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 15:56
Delphi-Quellcode:
Type
  TMyProcedureWithSender = procedure(_Sender: TObject) of object;

  TFoo = class(TBar)
  private
    FOnClick: TMyProcedureWithSender;
    fooClick(_Sender: TObject);
  public
    property OnClick: TMyProcedureWithSender read FOnClick write FOnClick; // oder direkt als Variable
    constructor Create(_Owner: TComponent); override;
  end;

  constructor TFoo.Create(_Owner: TComponent);
  begin
    inherited;
    inherited OnClick := fooClick; // das "wirkliche" OnClick zuweisen
  end;

  procedure TFoo.fooClick(_Sender: TObject); // falls "wirklich" geklickt wurde
  begin
    if assigned(FOnClick) then begin // nachschauen ob eine "Benutzerdefinierte" Prozedur für OnClick vorhanden ist
      FOnClick; // wenn ja, dann ausführen
    end;
  end;
Bin ziemlich sicher, dass sich da auch was in der Suche finden lässt. Hoffe, dass das so in etwa funzt.
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#3

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 15:57
HAI, Problem sollte nicht das Quellcode schreiben sein, sondern an welcher stelle ich die DCU´s u.ä. setze?
wenn ich das für alle Projekte haben will. ansonsten ist das von berens OK.
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 16:02
Also ich muss KeyDown und KeyPress überschreiben bzw. etwas dazuschreiben....

1.) Und weitere Parameter füge ich einfach ein, so wie bei normalen Prozeduren?
2.) Ist "fooclick" eine Prozedur?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 16:03
Hum. Wenn du im Quelltext mit STRG einen Klick z.B. auf "TButton" machst, solltest du zum Quelltext davon kommen und den überschreiben können.

Mein Tip: Nicht machen!
Sondern: Leite Dir einmal alle Klassen ab, die Du brauchst (z.B. "TMyButton") und verwende diese dann.

Wenn du allen Objekten eine bestimmte Funktion/Prozedur hinzufügen möchstest (z.b. für alle deine Komponenten die Funktion "About"), solltest Du Dir vielleicht mal sowas wie Interfaces anschauen (kenn mich mit denen noch net so aus...)

Edit: Ja, fooClick kannst du benennen wie du willst. Mit anderen Events kannst du das genauso machen, allerdings muss der Typ der Variable, in der du die "Benutzerdefinierte" Prozedur abspeicherst, vom selben Typ sein, wie die, die du aufrufen willst.

z.B. anstatt von TMyProcedureWithSender = procedure(_Sender: TObject) of object;
TMyProcedureWithKey = procedure(_Sender: TObject, _Key: Key) of object;

etc.

Ich glaube, du musst auch noch die Parameter immer mitgeben, wenn du diese Prozedur aufrufst:
Delphi-Quellcode:
procedure TFoo.fooClick(_Sender: TObject);
  begin
    if assigned(FOnClick) then begin
      FOnClick(_Sender); // <-- hier _Sender, _Key und was nicht alles übergeben
    end;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#6

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 16:05
versuchs doch mal mit Strg + linke MausTaste auf z.B. : TBar dann kommst du nach TBar und kannst da die decrarationen übernehmen...
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 16:11
Zitat von xZise:
Also ich muss KeyDown und KeyPress überschreiben bzw. etwas dazuschreiben....

1.) Und weitere Parameter füge ich einfach ein, so wie bei normalen Prozeduren?
2.) Ist "fooclick" eine Prozedur?
KeyPress zu überschreiben geht so (z.B. bei einem TEdit soll nicht der Buchstabe 'A' zugelassen werden):
Delphi-Quellcode:
type
  TMyEdit = class(TEdit)
  protected
    procedure KeyPress(var Key: Char); override;
  end;

{...}

procedure TMyEdit.KeyPress(var Key: Char);
begin
  if Key = 'Athen
    Key := #0;
  else
    inherited;
end;
Wenn Du zusätzliche Parameter einführen willst bin ich mir nicht ganz sicher, sollte aber theoretisch so gehen:
Anstatt override; verwendest Du reintroduce;.
Bei inherited; musst Du dann inherited KeyPress(Key); schreiben.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 16:19
Hmm
Hi Martin... Dsa scheint nicht ganz zu gehen, oder ich habe was übersehen:
Zitat:
Deklaration von 'KeyDown' unterscheidet sich von vorheriger Deklaration
Ja Und zwar, habe ich vergessen, das "Sender : TObject" zu entfernen

Zitat von yörsch:
versuchs doch mal mit Strg + linke MausTaste auf z.B. : TBar dann kommst du nach TBar und kannst da die decrarationen übernehmen...
Das Problem war, das ich bei Memo keine Anhaltspunkte gefunden habe...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 16:34
Klappt es denn so?
Delphi-Quellcode:
type
  TMyMemo = class(TMemo)
  protected
    procedure KeyDown(var Key: Word; Shift: TShiftState; Test: Boolean); reintroduce;
  end;

{...}

procedure TMyMemo.KeyDown(var Key: Word; Shift: TShiftState; Test: Boolean);
begin
  if Test then
    inherited KeyDown(Key, Shift);
end;
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: [Kompoente] Ereignisse überschreiben

  Alt 12. Feb 2007, 16:40
Ne Maritin ^^ Du hast alles richtig gemacht... Er hat deine Variante kompliert... Nur hatte ich das "Sender" mitkopiert Deshalb...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:43 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