![]() |
Problem mit Vererbung
Ich wollte folgende Grundkronstruktion verwenden:
Delphi-Quellcode:
Nun soll es davon 2 verschiedene Tabtypen geben:
TTab = class(TObject)
private FSheet: TTabSheet; FTabs : TTabs; procedure SetSheet(const Value: TTabSheet); published property Sheet : TTabSheet read FSheet write SetSheet; property Tabs : TTabs read FTabs; public constructor Create(const APageControl : TPageControl); destructor Destroy; end;
Delphi-Quellcode:
Funktioniert soweit.
TMemoTab = class(TTab)
end; TExplorerTab = class(TTab) end; Nun habe ich auch eine Liste:
Delphi-Quellcode:
Nun soll TTab keine Funktionen haben.
TTabs = class(TObject)
private FTabs : TObjectList; end; Also habe ich alle Funktionen als "virtual; abstract;" bezeichnet. Wenn ich nun der Tabliste ein Tab hinzufüge mit folgender Funktion:
Delphi-Quellcode:
Dann gibt es dort einen Abstrakten Fehler.
procedure TTabs.Add(const ATab: TTab);
begin FTabs.Add(ATab); ATab.FTabs := self; end; Wenn ich nun die nicht als abstrakt bezeichne und "Quasileerfunktionen" einsetze, dann habe ich das Problem in der Add-Funktion, ATab nicht mehr "aktuell" ist. Folgender Aufruf (Tabs : TTabs):
Delphi-Quellcode:
Alles wunderbar... Jedenfalls scheint es so.
Tabs.Add(TExplorerTab.Create(pcTabs, CreatePath(Node)));
Wenn ich jetzt in der Add-Methode die Caption des TabSheets ändere, dann hat es keine Auswirkungen:
Delphi-Quellcode:
Wo liegt nun der Fehler?
procedure TTabs.Add(const ATab: TTab);
begin FTabs.Add(ATab); ATab.FSheet.Caption := 'BOM!'; // Oder auch so (Die Add-Methode darüber wird entfernt): (FTabs.Items[FTabs.Add(ATab)] as TTab).FSheet.Caption := 'BOM!'; ATab.FTabs := self; end; Wenn ihr noch Informationen braucht, dann sagt bitte welche, damit ich die nachliefern kann :) MfG xZise PS: Die TTabs Klasse:
Delphi-Quellcode:
TTabs = class(TObject)
private FTabs : TObjectList; FIcons : TIconList; FFileToolBar: TToolBar; FDirectoryToolBar: TToolBar; function GetTab(idx: Integer): TTab; procedure SetTab(idx: Integer; const Value: TTab); public property Tab[idx : Integer] : TTab read GetTab write SetTab; property FileToolBar : TToolBar read FFileToolBar write FFileToolBar; property DirectoryToolBar : TToolBar read FDirectoryToolBar write FDirectoryToolBar; procedure Add(const ATab : TTab); procedure Delete(const AIndex : Integer); constructor Create; destructor Destroy; override; end; |
Re: Problem mit Vererbung
Zitat:
|
Re: Problem mit Vererbung
außerdem hats du in TTab bereits FTabs deklariert, vielleicht kommt da was durcheinander?
|
Re: Problem mit Vererbung
Zitat:
Zitat:
Damit der Tab nachher "weis" in welcher Liste der gehört, um selber für die Tabliste Tabs zu erzeugen. Hier ist nochmal TTabs ^^
Delphi-Quellcode:
TTabs = class(TObject)
private FTabs : TObjectList; FIcons : TIconList; // wird nicht verwendet FFileToolBar: TToolBar; FDirectoryToolBar: TToolBar; function GetTab(idx: Integer): TTab; procedure SetTab(idx: Integer; const Value: TTab); public property Tab[idx : Integer] : TTab read GetTab write SetTab; property FileToolBar : TToolBar read FFileToolBar write FFileToolBar; property DirectoryToolBar : TToolBar read FDirectoryToolBar write FDirectoryToolBar; procedure Add(const ATab : TTab); procedure Delete(const AIndex : Integer); constructor Create; destructor Destroy; override; end; |
Re: Problem mit Vererbung
Zitat:
Zitat:
Das vergessene Override beim Destruktor hast du ja nun schon ergänzt... |
Re: Problem mit Vererbung
Hi,
Zitat:
Weil bei TStrings funktionierts ja auch :)
Delphi-Quellcode:
var
sl : TStrings; begin {...} sl := TStringList.Create; ini.ReadSections(sl); {...} end; Zitat:
Zitat:
MfG xZise |
Re: Problem mit Vererbung
Zitat:
Zitat:
Zitat:
|
Re: Problem mit Vererbung
Zitat:
Zitat:
Zitat:
So ! Ich habe jetzt TTab komplett "deabstrahiert" xD und die Add Methode überladen (mit TMemoTab und TExplorerTab) So funktionierts, aber das war nicht der Zweck des Vererben :) MfG xZise |
Re: Problem mit Vererbung
Zitat:
Zitat:
Zitat:
|
Re: Problem mit Vererbung
Meine Glaskugel meint, es könnten n paar override; fehlen...
mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz