TMyListView = class(TListView)
private
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Click;override;
procedure DragDrop(Source: TObject; X, Y: Integer);override;
procedure DragOver(Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);override;
procedure ColumnClick(Sender:TObject;Column: TListColumn);//*************
published
end;举例:
Click,DragDrop如上声明,
实现为
procedure TMyListView.Click;
begin
inherited;
//一些我自己的代码
end;procedure TMyListView.DragDrop(Source: TObject; X, Y: Integer);
begin
inherited;
//一些我自己的代码
end;可是,ColumnClick该怎样声明?才会被Delphi认可。
private
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Click;override;
procedure DragDrop(Source: TObject; X, Y: Integer);override;
procedure DragOver(Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);override;
procedure ColumnClick(Sender:TObject;Column: TListColumn);//*************
published
end;举例:
Click,DragDrop如上声明,
实现为
procedure TMyListView.Click;
begin
inherited;
//一些我自己的代码
end;procedure TMyListView.DragDrop(Source: TObject; X, Y: Integer);
begin
inherited;
//一些我自己的代码
end;可是,ColumnClick该怎样声明?才会被Delphi认可。
published
想想TListView.OnColumnClick是怎么触发的
打开TListView声明的单元搜索OnColumnClick调用的地方
发现线索:
procedure TCustomListView.ColClick(Column: TListColumn);
begin
if Assigned(FOnColumnClick) then FOnColumnClick(Self, Column);
end;
我查了一下,如果是静态的就不能用override覆盖。
所以,这个问题是很难的。
如果有人能搞定,我整体转分100,
决不食言,另会加100,给各位顶的朋友。
//自己点点,看看有没有效果
type
TMyListView = class(TListView)
private
protected
procedure ColClick(Column: TListColumn); override;
published
end;{ TMyListView }procedure TMyListView.ColClick(Column: TListColumn);
begin
inherited;
ShowMessage('ok');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
with TMyListView.Create(Self) do
begin
Parent := Self;
with Columns.Add do Caption := 'Name';
ViewStyle := vsReport;
end;
end;
type
TMyListView = class(TListView)
private
protected
procedure ColClick(Column: TListColumn); override;
published
end;{ TMyListView }procedure TMyListView.ColClick(Column: TListColumn);
begin
inherited;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
with TMyListView.Create(Self) do
begin
Parent := Self;
with Columns.Add do Caption := 'Name';
ViewStyle := vsReport;
OnColumnClick := ListView1ColumnClick;
end;
end;procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
ShowMessage('ok');
end;
property ColumnClick: Boolean read FColumnClick write SetColumnClick default True;
可以看出,ColumnClick是属性.可以忽略了.2
procedure ColClick(Column: TListColumn); dynamic;
是一个动态方法. (可以override);3
property OnColumnClick: TLVColumnClickEvent read FOnColumnClick
write FOnColumnClick;4
OnColumnClick事件的触发.
procedure TCustomListView.ColClick(Column: TListColumn);
begin
if Assigned(FOnColumnClick) then FOnColumnClick(Self, Column);
end;//-----
zswangII(伴水清清)(一贴不灌,何以灌天下?)
的思路是没错的.对于楼主的
"大家一定忽略了ColumnClick的父类中不是Virtual或者dynamic",
估计楼主看错了----没有这个方法.
另:
或许误会楼主的意思了.
我漏说了我的目的。
我一直认为,我自己编程的新境界是“代码与界面相分离”。
而实现这种境界的方式,就是“自制控件”。
我的ColumnClick是为了在该Column上显示一个上/下箭头的图片,就象资源管理器一样。
不想在form中去写,太乱太难看了。要写到自制控件里去。另:to zswangII。原来,你的意思是ColClick,可以实现ColumnClick吗?让我试试看。
呵呵。
多谢各位。