Zitat von
Muetze1:
Zitat von
xZise:
Das Hauptproblem ist selbst ohne abstrakten Methoden funktioniert das nicht
Oder müssen die nun abstrakt sein, damit er auch die richtige Methode aufruft?
Was bedeutet dabei nun "funktioniert nicht"? Wenn ich wieder auf die alte Aussage schliesse (abstrakter Fehler), dann kann dies in dem Falle nicht mehr sein.
Es wird nicht das korrekte Objekt übergeben.
Der abstrakte Fehler erscheint dann, wenn ich das alles als abstrakt deklariere nicht
Zitat von
Muetze1:
Zitat von
xZise:
Laut Debugger ist in der AddFunktion "FSheets" und ehm "FTabs" nil
Dann wird nicht der richtige Constructor aufgerufen. Somit ist die Frage von inherited etc. gegeben. Schonmal den Konstruktoraufruf im Add() debuggt? Wenn du in die Zeile mit F7 hineinstoperst, dann solltest du durch den entsprechenden Konstruktor (nach dem die Ermittlung der Parameter abgehandelt wurde) kommen, welcher dann nach deinem Quellcode und Aussagen doch eigentlich FSheets und FTabs initialisiert. Wenn dem nicht so ist, dann ist das nicht der Constructor. (wobei ich die Konstruktoren von den beiden abgeleiteten Klassen nicht kenne)
Also ich habe das einfach nochmal komplett durchgebuggt:
Zitat von
Muetze1:
Zitat von
xZise:
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
Das ist auch nicht das gewollte und dein vorgestelltes Konzept klappt auch 100%ig so wie du es vorhast. Es ist ein anderes Problem. Diese Lösung musst du nicht weiter verfolgen/benutzen.
Hier ist der Konstruktor von TExplorerTab (ich spare mir mal TMemoTab): (Aufgrund von inherited auch von TTab)
Delphi-Quellcode:
constructor TExplorerTab.Create(const APageControl: TPageControl; const APath : string);
begin
inherited Create(APageControl);
FSheet := TSheet.Create(APageControl);
FSheet.Caption := GetLastFolder(APath);
FPath := APath;
// Icons einlesen
FImages := TImageList.Create(APageControl);
FImages.Width := 32;
FImages.Height := 32;
ConvertTo32BitImageList(FImages);
FExt := TStringList.Create;
FExt.Add('folder');
FImages.AddIcon(GetIconFromFile('%SystemRoot%\system32\SHELL32.dll', 3));
FSheet.lvListView.LargeImages := FImages;
FSheet.lvListView.OnDblClick := DblClick;
FSheet.lvListView.OnMouseUp := MouseUp;
GenerateView;
end;
constructor TTab.Create(const APageControl: TPageControl);
begin
inherited Create;
end;
Zitat von
Muetze1:
Zitat von
r2c2:
Meine Glaskugel meint, es könnten n paar override; fehlen...
Wenn dem so ist, dann sollte xZise aber
arglistig Compilerhinweise verschwiegen haben.
Dem ist nicht so