delphi – 如何从后代组件中删除属性

我创建了一个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;

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...