AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Problem mit Eigenschaft Enabled
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Eigenschaft Enabled

Ein Thema von Eppos · begonnen am 8. Sep 2010 · letzter Beitrag vom 9. Sep 2010
Antwort Antwort
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
523 Beiträge
 
Delphi 11 Alexandria
 
#1

Problem mit Eigenschaft Enabled

  Alt 8. Sep 2010, 21:50
Hallo zusammen,

ich habe mir eine Button-Component erstellt, abgleitet von TAdvGlowButton.
In dieser Component möchte ich das setzen von Enabled kontrollieren.

Mein Code sieht wie folgt aus:

Delphi-Quellcode:
unit MyButton;

interface

uses
  SysUtils, Classes, Controls, AdvGlowButton, graphics;

type
  TMyButton = class(TAdvGlowButton)
  private
    fEnabled : Boolean;
    fNewEnabled : Boolean;
    procedure SetEnabled( Value : Boolean );
    procedure SetNewEnabled( Value : Boolean );
    { Private declarations }
  protected
    { Protected declarations }
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Public declarations }
  published
    property Enabled : Boolean read fEnabled write SetEnabled;
    property NewEnabled : Boolean read fNewEnabled write SetNewEnabled;
    { Published declarations }
  end;

procedure Register;

implementation

uses
  Dialogs;

procedure Register;
begin
  RegisterComponents('MYC', [TMyButton]);
end;

{ TMyButton }
constructor TMyButton.Create(AOwner: TComponent);
begin
  inherited;
  fNewEnabled := True;
end;

destructor TMyButton.Destroy;
begin
  inherited;
end;

procedure TMyButton.SetNewEnabled( Value : Boolean );
begin
  fNewEnabled := Value;
end;

procedure TMyButton.SetEnabled( Value : Boolean );
begin
  If fNewEnabled then
    fEnabled := value
  else
    fEnabled := False;
end;

end.
Wenn ich nun Enbaled setze hat das keine Auswirkungen mehr (Component wird nicht ausgegraut). Was mach ich falsch?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Problem mit Eigenschaft Enabled

  Alt 8. Sep 2010, 21:56
Du setzt nirgendwo die ursprüngliche Enabled-Eigenschaft sondern lediglich deine eigene neue Variable.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
523 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Problem mit Eigenschaft Enabled

  Alt 8. Sep 2010, 22:01
wie meinst du das?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

AW: Problem mit Eigenschaft Enabled

  Alt 8. Sep 2010, 23:39
Du musst den orginal Setter (der hoffentlich virtual deklariert ist) überschreiben.

Stattdessen verdeckst du nur die alte Enabled-Eigenschaft. Das bringt nichts
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Problem mit Eigenschaft Enabled

  Alt 9. Sep 2010, 05:57
Ist TAdvGlowButton nicht von TControl abgeleitet?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
523 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Problem mit Eigenschaft Enabled

  Alt 9. Sep 2010, 08:48
kann mir jemand sagen was ich im Code ändern müsstedas es stimmt?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Problem mit Eigenschaft Enabled

  Alt 9. Sep 2010, 08:58
Du musst entweder die Methode zum setzen von Enabled überschreiben oder du rufst setzt die ursprüngliche Enabled-Eigenschaft in deiner neuen Set-Methode. Denn derzeit machst du nichts anderes als neue Eigenschaften zu definieren die zufällig "Enabled" heißen.

mit
inherited Enabled := NeuerWert; kannst du den ursprünglichen Enabled Wert setzen.

Aber die richtige Variante ist eben das überschreiben der Methode zum setzen. Am besten du schaust dir dafür mal Tutorials zur Vererbung an wo es um überschreiben, überladen etc. geht. Ohne diese Grundlagen wirst du sonst recht bald wieder bei diesem Thema scheitern.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Eppos

Registriert seit: 7. Aug 2006
Ort: Heilbronn
523 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Problem mit Eigenschaft Enabled

  Alt 9. Sep 2010, 09:17
inherited hat mir gefehlt, danke!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Problem mit Eigenschaft Enabled

  Alt 9. Sep 2010, 09:42
Aber wie gesagt ist das der falsche Weg. Denn wenn jemand deine Komponente verwendet und diese auf TControl castet um Enabled zu setzen, wird deine Set-Methode niemals aufgerufen und derjenige wundert sich dann was da los ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

AW: Problem mit Eigenschaft Enabled

  Alt 9. Sep 2010, 17:19
Du musst die Methoden GetEnabled und/oder SetEnabled überschreiben:
Delphi-Quellcode:
type
  TMyButton = class(TAdvGlowButton)
  private
   ...
  protected
    function GetEnabled: Boolean; override;
    procedure SetEnabled(Value: Boolean); override;
...

procedure TMyButton.SetEnabled(Value: Boolean); override;
begin
  // eigener Code vorher Hier
  inherited SetEnabled(Value);

  // eigener Code nachher Hier
end;
Andreas
  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 06:28 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