Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Neue Komponente erstellen - Zahlenedit

  Alt 16. Jun 2006, 07:01
Hai gfjs,

pauschal kann man nicht sagen wo das inherited stehen muss/darf. In deinem Fall sollte es nach deinem Code stehen. Dann sind die "unerwünschten" Zeichen im OnKeyPress der Komponente schon raus gefiltert.

Hier mal ein Beispiel für die falsche Position in TMyClass2. In TMyClass1 ist es richtig.
Delphi-Quellcode:
  TMyClass1 = class(TObject)
  private
    fList : TObjectList;
  public
    constructor Create;
    destructor Destroy; override;
    function AddItem (aValue : TObject) : integer;
  end;

  TMyClass2 = class(TMyClass1)
  public
    constructor Create;
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  MyClass2 : TMyClass2;
begin
  MyClass2 := TMyClass2.Create;
end;

{ TMyClass1 }

function TMyClass1.AddItem(aValue: TObject) : integer;
begin
  fList.Add(aValue)
end;

constructor TMyClass1.Create;
begin
  inherited;
  fList := TObjectList.Create; // Hier wird eine Instanz von fList erzeugt
end;

destructor TMyClass1.Destroy;
begin
  fList.Free; // Hier wird fList wieder freigegeben.
  inherited;
end;

{ TMyClass2 }

constructor TMyClass2.Create;
begin
  fList.Add(nil); // Hier kommt ein Fehler weil fList noch nicht erzeugt wurde.
  inherited;
end;

destructor TMyClass2.Destroy;
var
  ndx: Integer;
begin
  inherited;
  for ndx := fList.Count - 1 downto 0 do // und hier weil fList nicht mehr existier
  begin
    fList.Delete(ndx);
  end;
end;
In der TMyClass1 wird eine Object vom Typ TObjectList erzeugt. Wenn ich im Construction von TMyClass2 vor dem inherited, welches in diesem Fall ja den Constructon von TMyClass1 aufruft, versuche auf fList zuzugreifen kommt es zu einer Schutzverletzung da von fList ja noch keine Instanz erzeugt wurde. Analog dazu knallt es beim freigeben von TMyClass2 da ich nachdem aufruf des Destructors von TMyClass1 noch einmal versuche auf fList zuzugreifen. Diese ist zu diesem Zeitpunkt aber schon zerstört worden.

Ich hoffe das hilft Dir etwas?
Stephan B.
  Mit Zitat antworten Zitat