且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-12-05 18:07:58

TTCustomListView 而不是 TListView ,并仅公开要显示的属性和事件。您可以使用VCL源(在 ComCtrls 单元中)以完全相同的方式查看 TListView 的完成方式方式(当然, TListView 除外)。这是一个这样做的(非常无用的)示例:

Create your class from TTCustomListView instead of TListView, and just expose the properties and events you want to make visible. You can use the VCL source (in the ComCtrls unit) to see how it was done for TListView in exactly the same way (except TListView exposes them all, of course). Here's a (very useless) example of how to do so:

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 $ c $的课程c>祖先,您可以创建一个包装器类,并将要更改的类作为私有字段包含在其中,并且仅通过发布的新属性公开所需的功能。这样的事情应该会让您入门(我只是公开一两个属性,您可以从那里获取它):

For classes where you don't have a TCustom ancestor, you can create a wrapper class and include the class you want to alter as a private field within it, and only expose the functionality you want through new properties you publish. Something like this should get you started (I'll just expose a property or two, and you can take it from there):

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;