我是 Delphi 的新手,我正在构建一个从 TStringGrid 派生的自定义控件。我需要访问 OnResize 事件处理程序。我如何访问它?TStringGrid 的父级有一个 OnResize 事件
问问题
2728 次
3 回答
10
发布OnResize
事件,默认情况下在TControl
.
在自己的后代中,您不应使用事件本身,而应使用触发事件的方法。这样做会让组件的用户有机会实现自己的事件处理程序。
覆盖调整大小方法:
type
TMyGrid = class(TStringGrid)
protected
procedure Resize; override;
published
property OnResize;
end;
{ TMyGrid }
procedure TMyGrid.Resize;
begin
// Here your code that has to be run before the OnResize event is to be fired
inherited Resize; // < This fires the OnResize event
// Here your code that has to be run after the OnResize event has fired
end;
于 2013-02-06T11:25:35.007 回答
2
覆盖 Resize 有一个问题:不仅会在实际调整网格大小时调用该事件,而且还会在您更改 RowCount 时调用该事件。
在一个程序中,当用户调整网格大小时,我需要向网格添加/删除行。换句话说,我必须让网格充满行/数据。但是,当我添加/删除行时,数据无法访问。
所以,我用了这个:
protected
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
.....
Implementation
procedure TMyGrid.WMSize(var Msg: TWMSize);
begin
inherited;
if (csCreating in ControlState) then EXIT; { Maybe you also need this } { Don't let grid access data during design }
ComputeRowCount;
AssignDataToRows;
end;
于 2014-04-22T15:42:56.357 回答
0
您可以简单地将 TStringGrid 放置在 TPanel 内并将其与 alClient 对齐,然后使用 TPanel 的已发布 Resize 事件进行任何操作。
于 2014-01-18T21:33:24.040 回答