Autor Beitrag
M.Mü
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Di 12.05.09 16:43 
Hallo,

ich habe folgendes Problem:
Ich habe die Klasse TTabSheet abgeleitet, um sie mit zwei Funktionen zu erweiteren, die Konfigurationsdaten aus einer Datei auslesen bzw. hineinschreiben. Angestoßen werden diese durch entsprechende Funktionen im TPageControl, dass ich ebenfalls abgeleitet und erweitert habe. Kurz skizziert sähe das ganze wie folgt aus.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  TConfigSheet = class(TTabSheet)
  public
    procedure WriteToConfigFile(ARoot: IXMLNode);
    procedure ReadFromConfigFile(ARoot: IXMLNode);
  end;

  TConfigPageControl = class(TPageControl)
  public
    procedure WriteToConfigFile(FileName: string);
    procedure ReadFromConfigFile(FileName: string);
    property irgendwas: string read ...
  end;


Ausserdem verwenden die ConfigSheets auch Variablen aus dem ConfigPageControl. (property irgendwas)

Die Frage ist nun: Wie kann ich es einrichten, dass beide jeweils nur den Partner akzeptieren? Ich will vermeiden, dass mein ConfigPageControl auch normale TabSheets annimmt bzw. ein normales PageControl meine ConfigSheets annimmt. Beides würde ja unweigerlich zum Fehler führen.

VG M.Mü
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.05.09 18:47 
Das Problem ist, dass TPageControl.InsertPage nicht virtuell ist. Du kannst diese Methode also nicht überschreiben. Deshalb wird die Annahme eines TTabSheet schlecht zu verhindern sein. Durch neueinführen (reintroduce) von InsertPage könnte es klappen.

Dass dein TabSheet auf ein falsches PageControl kommt kannst du aber gut verhindern indem du die property PageControl selbst neu einführst.