AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Vererbung

Ein Thema von xZise · begonnen am 1. Okt 2007 · letzter Beitrag vom 3. Okt 2007
 
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Problem mit Vererbung

  Alt 1. Okt 2007, 17:20
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;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
 


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 22:19 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