AGB  ·  Datenschutz  ·  Impressum  







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

Ereignis zu TJvLED hinzufügen

Ein Thema von Alexander Roth · begonnen am 25. Dez 2006 · letzter Beitrag vom 25. Dez 2006
Antwort Antwort
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#1

Ereignis zu TJvLED hinzufügen

  Alt 25. Dez 2006, 10:11
Hallo und frohe Weihnachten,

also ich habe mit Komponentenprogrammierung noch so gut wie keine Erfahrung.
Nun will ich von der Komponente TJvLED (eine Jedi Kompo) eine Komponente ableiten, die zusätzlich das Ereignis OnColorChange (also wenn die Farbe geändert wird) besitzt.

Dazu erstmal den Code von TJvLED
Delphi-Quellcode:
  TJvCustomLED = class(TJvGraphicControl)
  private
    FImgPict: TBitmap;
    FImgMask: TBitmap;
    FTimer: TTimer;
    FColorOn: TColor;
    FColorOff: TColor;
    FActive: Boolean;
    FStatus: Boolean;
    FOnChange: TNotifyEvent;
    {$IFDEF VisualCLX}
    FAutoSize: Boolean;
    procedure SetAutoSize(Value: Boolean);
    {$ENDIF VisualCLX}
    procedure SetColorOn(Value: TColor);
    procedure SetColorOff(Value: TColor);
    procedure SetInterval(Value: Cardinal);
    function GetInterval: Cardinal;
    procedure SetActive(Value: Boolean);
    function GetActive: Boolean;
    procedure SetStatus(Value: Boolean);
    function GetStatus: Boolean;
    procedure DoBlink(Sender: TObject);
  protected
    procedure ColorChanged; override;
    procedure Paint; override;
    property Active: Boolean read GetActive write SetActive default False;
    property Color default clLime;
    property ColorOn: TColor read FColorOn write SetColorOn default clLime;
    property ColorOff: TColor read FColorOff write SetColorOff default clRed;
    property Interval: Cardinal read GetInterval write SetInterval default 1000;
    property Status: Boolean read GetStatus write SetStatus default True;
    {$IFDEF VisualCLX}
    property AutoSize: Boolean read FAutoSize write SetAutoSize;
    {$ENDIF VisualCLX}
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  end;

  TJvLED = class(TJvCustomLED)
  published
    property Active;
    property Align;
    property Anchors;
    property AutoSize;
    {$IFDEF VCL}
    property DragCursor;
    property DragKind;
    property OnEndDock;
    property OnStartDock;
    {$ENDIF VCL}
    property ColorOn;
    property ColorOff;
    property Constraints;
    property DragMode;
    property Height default 17;
    property Interval;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property Status;
    property Visible;
    property Width default 17;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDrag;
  end;
Dann habe ich:
Delphi-Quellcode:
  TALED=class(TJVLED)
  private
    FOnColorChange:TNotifyEvent;
  protected
    procedure ColorChanged;
  published
    property OnColorChange:TNotifyEvent read FOnColorChange write FOnColorChange;
  end;
und
Delphi-Quellcode:
procedure TALED.ColorChanged;
begin
  inherited ColorChanged;

  if Assigned(FOnColorChange) then
     FOnColorChange(self);
end;
doch es wird kein Ereignis ausgelöst.
Habe ich die falsche Procedure zum auslösen des Ereignisses gewählt?
Wo wird dann die Farbe geändert?

Hoffe ihr könnt mir helfen.

MFG und frohe Feiertage

Alexander
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Ereignis zu TJvLED hinzufügen

  Alt 25. Dez 2006, 10:24
Zitat von Alexander Roth:
procedure ColorChanged; override;
Dieses override zeigt dir, dass ColorChanged eine virtuelle Methode ist, die überschrieben wird. Und genau dieses override fehlt bei deiner Komponente. Dadurch ersetzt deine Methode nicht die originale in die virtuellen Methodentabelle. Dies hat zur Folge, dass bei einem Aufruf der Methode die "alte" aufgerufen wird, weil der Aufruf über die virtuellen Methodentabell durchgeführt wird. Du musst also nur bei deiner ColorChanged Deklaration ein override anhängen.
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Ereignis zu TJvLED hinzufügen

  Alt 25. Dez 2006, 15:08
Genial. Das klappt sogar!!!

Mega vielen Dank.

Gruß Alexander
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  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 19:04 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