Hi,
Zitat von
Muetze1:
Zitat von
xZise:
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.
Nur, wenn du eine TTab Instanz übergibst anstatt z.B. einer TExplorerTab Instanz.
Aber warum funktioniert das denn nicht? TExplorerTab ist do ein Nachfahre von TTab? Müsste ich also die Funktio überladen?
Weil bei TStrings funktionierts ja auch
Delphi-Quellcode:
var
sl : TStrings;
begin
{...}
sl := TStringList.Create;
ini.ReadSections(sl);
{...}
end;
Zitat von
Muetze1:
Zitat von
xZise:
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;
Wird denn im Constructor von TTab auch ordentlich FSheet entsprechend belegt mit auch der Instanz wo du die Caption Änderung erwartest?
Nein, aber der Konstruktor von TExplorer/MemoTab, welche ich ja ausschließlich übergebe.
Zitat von
Muetze1:
Das vergessene Override beim Destruktor hast du ja nun schon ergänzt...
Selbst wenn würde es keinen Fehler verursachen, da Explizit nirgends .Free aufgerufen wird.
MfG
xZise