Ich wollte folgende Grundkronstruktion verwenden:
Delphi-Quellcode:
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;
Nun soll es davon 2 verschiedene Tabtypen geben:
Delphi-Quellcode:
TMemoTab = class(TTab)
end;
TExplorerTab = class(TTab)
end;
Funktioniert soweit.
Nun habe ich auch eine Liste:
Delphi-Quellcode:
TTabs = class(TObject)
private
FTabs : TObjectList;
end;
Nun soll TTab keine Funktionen haben.
Also habe ich alle Funktionen als "
virtual; abstract;" bezeichnet.
Wenn ich nun der Tabliste ein Tab hinzufüge mit folgender Funktion:
Delphi-Quellcode:
procedure TTabs.Add(const ATab: TTab);
begin
FTabs.Add(ATab);
ATab.FTabs := self;
end;
Dann gibt es dort einen Abstrakten Fehler.
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):
Tabs.Add(TExplorerTab.Create(pcTabs, CreatePath(Node)));
Alles wunderbar... Jedenfalls scheint es so.
Wenn ich jetzt in der Add-Methode die Caption des TabSheets ändere, dann hat es keine Auswirkungen:
Delphi-Quellcode:
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;
Wo liegt nun der Fehler?
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;