Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Neue Klasse (Nachkommen) (https://www.delphipraxis.net/178684-neue-klasse-nachkommen.html)

LarsSchwencke 21. Jan 2014 12:22

Neue Klasse (Nachkommen)
 
Hallo,

folgendes Problem.
Ich möchte einen Nachkommen der Klasse TSpeedButton so verändern dass
eine Metode X ausgeführt wird wenn sich das Feld Enabled ändert.
Kennt jemand eine Lösung?
Kleines Demo wäre nicht schlecht.

Vielen Dank für Eure bemühungen.

MfG
Lars

baumina 21. Jan 2014 12:36

AW: Neue Klasse (Nachkommen)
 
Ich würde es so in der Art versuchen:

Delphi-Quellcode:
  TMySpeedButton = class(TSpeedButton)
  private
    procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  end;

Sir Rufo 21. Jan 2014 14:18

AW: Neue Klasse (Nachkommen)
 
@baumina
Diese Nachricht wird schon von Delphi-Referenz durchsuchenTControl empfangen.
Dort wird aber einfach nur Delphi-Referenz durchsuchenTControl.Invalidate aufgerufen und die ist
Delphi-Quellcode:
public
und
Delphi-Quellcode:
virtual
.

Delphi-Quellcode:
  TMySpeedButton = class( TSpeedButton )
  private
    FOldEnabled : Boolean;
    FOnEnabledChanged : TNotifyEvent;
  public
    procedure Invalidate; override;
  published
    property OnEnabledChanged : TNotifyEvent read FOnEnabledChanged write FOnEnabledChanged;
  end;

{ TMySpeedButton }

procedure TMySpeedButton.Invalidate;
begin
  inherited;
  if FOldEnabled <> Enabled then
  begin
    FOldEnabled := Enabled;
    if Assigned( OnEnabledChanged ) then
      OnEnabledChanged( Self );
  end;
end;

baumina 21. Jan 2014 14:22

AW: Neue Klasse (Nachkommen)
 
Aber wenn ich einen Blick in Buttons.pas werfe, holt sich der TSpeedButton das auch so ab.

Sir Rufo 21. Jan 2014 14:30

AW: Neue Klasse (Nachkommen)
 
Zitat:

Zitat von baumina (Beitrag 1244726)
Aber wenn ich einen Blick in Buttons.pas werfe, holt sich der TSpeedButton das auch so ab.

stimmt auch wieder :)

aber dadurch überschreibt man das Handling für den originalen SpeedButton ...

DeddyH 21. Jan 2014 14:32

AW: Neue Klasse (Nachkommen)
 
AFAIK ist das auch das ganz normale Vorgehen, wenn man eine bestimmte Message gesondert behandeln möchte.

Sir Rufo 21. Jan 2014 14:43

AW: Neue Klasse (Nachkommen)
 
Zitat:

Zitat von DeddyH (Beitrag 1244728)
AFAIK ist das auch das ganz normale Vorgehen, wenn man eine bestimmte Message gesondert behandeln möchte.

Nur doof, wenn dann der SpeedButton zwar die Eigenschaft Enabled wechselt, die Anzeige dazu aber nicht mehr passt ;)

DeddyH 21. Jan 2014 14:47

AW: Neue Klasse (Nachkommen)
 
Dazu ruft man ja auch inherited auf.

Sir Rufo 21. Jan 2014 14:53

AW: Neue Klasse (Nachkommen)
 
Zitat:

Zitat von DeddyH (Beitrag 1244733)
Dazu ruft man ja auch inherited auf.

aua :wall: ... ich brauch wohl einen Kaffee (oder zwei :mrgreen:)

LarsSchwencke 24. Jan 2014 16:23

AW: Neue Klasse (Nachkommen)
 
Hallo,

vielen Dank für die Menge an Infos.
Habe es so realisiert wie baumina es
vorgeschlagen hat und es funktioniert bestens.
Danke.:-D

MfG
Lars


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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-2025 by Thomas Breitkreuz