TCustomDBGridオブジェクトの親クラス ( ) の一部であるTCustomDBGrid
保護されたプロパティ Options( ) にアクセスする必要がある子孫コンポーネントを作成しています。問題は、クラスに再導入された同じ名前のプロパティが存在するが、別のタイプ ( TDBGridOptions ) を持つことです。TGridOptions
TCustomGrid
TCustomDBGrid
簡素化されたこの宣言を確認してください
TCustomGrid= = class(TCustomControl)
protected
//I need to access this property
property Options: TGridOptions read FOptions write SetOptions
default [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine,
goRangeSelect];
end;
TCustomDBGrid = class(TCustomGrid)
protected
//a property with the same name is reintroduced in this class
property Options: TDBGridOptions read FOptions write SetOptions
default [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines,
dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack];
end;
TDBGridEx = class(TCustomDBGrid)
protected
//inside of this method I need to access the property TCustomGrid.Options
procedure FastDraw(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
end;
クラッカー クラスを使用してこのプロパティにアクセスする方法を理解しました。
type
TCustomGridClass=class(TCustomGrid);
{ TDBGridEx }
procedure TDBGridEx.FastDraw(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState);
var
LOptions: TGridOptions;
LRect : TRect;
begin
......
LOptions := TCustomGridClass(Self).Options; //works fine
LRect := ARect;
if not (goFixedVertLine in LOptions) then
Inc(LRect.Right);
if not (goFixedHorzLine in LOptions) then
Inc(LRect.Bottom);
.....
end;
しかし、好奇心のために、これを解決するための別の回避策またはより良い方法が存在するかどうか疑問に思っています。