Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: W1009: Redeklaration verbirgt ein Mitglied in der Basisklasse

  Alt 30. Dez 2010, 16:41
Ich soll einen Wrapper für einfaches Benutzen zweier völlig verschiedener Klassen (Druck, PDF-Export) bauen,
ohne dass Code bei deren Benutzung geändert werden soll.
Die Druckklasse definiert ein property FontName als Integer, die andere als String.

Daran kann ich aber nichts ändern.
Das wäre dann also das Entwurfsmuster Adapter.
Das Problem ist nun dass ein Integer, der auf einen Fontnamen verweisst eben nun mal kein FontName ist.
Richtig wäre hier zwei verschiedene Properties einzuführen, die sich gegenseitig beeinflussen:
Delphi-Quellcode:
TAdapterBase = class
public
  property FontIndex:Integer read GetFontIndex write SetFontIndex;
  property FontName:string read FFontName write FFontName;
end;
Über die Funktionen SetFontIndex und GetFontIndex wird nun versucht, einem Index einen Namen zuzuweisen (verlustfrei möglich) und einem Namen einen Index zuzuweisen (nicht immer möglich).
Man benötigt dazu eine kleine Tabelle für die Umwandlung:
Delphi-Quellcode:
TFontIndexRecord = record
  Name:string;
  Index:integer;
end;
const
FontIndexArray:array[0..3] of TFontIndexRecord = (
(Name:'Arial';Index:0),
(Name:'Courier New';Index:1),
...
);
Die Basisklasse speichert immer nur den FontName, weil dieser allgemeiner als der FontIndex ist.
  Mit Zitat antworten Zitat