我创建了一个TListView后代组件…它完美地运行,但我想知道是否有可能删除后代中我不想要的TListView属性.我不想在对象检查器中显示的属性是LargeImages,RowSelect,ShowColumnHeader,ShowWorkAreas,ViewStyle,OwnerData,OnData和OnDataFind.后代只有一个viewstyle vsIcon.
这是组件的接口部分:
TImageEnListView = class(TListView) private FImageList: TImageList; FImageIndex: integer; FStringList: TStringList; FThumbnailWidth: integer; FThumbnailHeight: integer; FIconVerticalSpacing: integer; FIconHorzontalSpacing: integer; FFolder: string; FShadowedThumbnail: boolean; FShowCaptions: boolean; FShowTips: boolean; FBackgroundWorker: TBackgroundWorker; FTaskDialog: TTaskDialog; procedure BackgroundWorkerWork(Worker: TBackgroundWorker); { Event after threading is complete } procedure BackgroundWorkerWorkComplete(Worker: TBackgroundWorker; Cancelled: Boolean); { Event for Feedback to GUI } procedure BackgroundWorkerWorkFeedback(Worker: TBackgroundWorker; FeedbackID,FeedbackValue: Integer); public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; { Clears thumbnails,fileList and imageList } procedure ClearThumbnails; procedure InfoTip(Sender: TObject; Item: TListItem; var InfoTip: string); procedure Data(Sender: TObject; Item: TListItem); procedure DataFind(Sender: TObject; Find: TItemFind; const FindString: string; const FindPosition: TPoint; FindData: Pointer; StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean; var Index: Integer); procedure FillItems; property BackgroundWorker: TBackgroundWorker read FBackgroundWorker; published { Published declarations } property Folder: string read FFolder write FFolder; property FileList: TStringList read FStringList write FStringList; property ImageList: TImageList read FImageList write FImageList; property ThumbnailWidth: integer read FThumbnailWidth write FThumbnailWidth default 170; property ThumbnailHeight: integer read FThumbnailHeight write FThumbnailHeight default 120; property ShadowedThumbnail: boolean read FShadowedThumbnail write FShadowedThumbnail default True; property ShowTips: boolean read FShowTips write FShowTips default False; property ShowCaptions: boolean read FShowCaptions write FShowCaptions default True; end;
解决方法
从
TTCustomListView
而不是TListView创建您的类,只显示您想要显示的属性和事件.你可以使用VCL源代码(在ComCtrls单元中)以完全相同的方式查看它是如何为TListView完成的(当然,除了TListView公开它们之外).这是一个(非常无用的)如何做的例子:
TImageEnListView = class(TCustomListView) ... other code published // Only expose some of the properties that are protected // in TCustomListView. Meaningless from a use standpoint,// but demonstrates the technique property Columns; property ColumnClick; property Constraints; property DragCursor; property DragKind; property DragMode; property Enabled; property Font; property FlatScrollBars; property FullDrag; property GridLines; property HideSelection; end;
对于没有TCustom祖先的类,您可以创建一个包装类,并将要更改的类包含在其中的私有字段中,并且仅通过您发布的新属性公开所需的功能.这样的事情应该让你开始(我只是暴露一两个属性,你可以从那里拿走它):
type TMySpecialListView=class(TComponent) private FEnListView: TImageEnListView; function GetThumbnailHeight: Integer; function GetThumbnailWidth: Integer; procedure SetThumbnailHeight(Value: Integer); procedure SetThumbnailWidth(Value: Integer); public constructor Create(AOwner: TComponent); override; published property ThumbnailHeight: Integer read GetThumbnailHeight write SetThumbnailHeight; property ThumbnailWidth: Integer read GetThumbnailWidth write SetThumbnailWidth; end; implementation { TMySpecialListView } constructor TMySpecialListView.Create(AOwner: TComponent); begin inherited; FEnhListView := TImageEnListView.Create(Self); FEnhListView.Parent := Self.Parent; // Set other properties needed like width and height. You // can get the ones you need from your current .dfm values // for a new blank form with your TImageEnListView dropped // on it. end; function TMySpecialListView.GetThumbnailHeight: Integer; begin Result := FEnhListView.ThumbnailHeight; end; function TMySpecialListView.GetThumbnailWidth: Integer; begin Result := FEnhListView.ThumbnailWidth; end; procedure TMySpecialListView.SetThumbnailHeight(Value: Integer); begin if Value <> FEnhListView.ThumbnailHeight then FEnhListView.ThumbnailHeight := Value; end; procedure TMySpecialListView.SetThumbnailWidth(Value: Integer); begin if Value <> FEnhListView.ThumbnailWidth then FEnhListView.ThumbnailWidth := Value; end;