更新时间: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;