首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于RTTI的有关问题请问

2012-05-21 
关于RTTI的问题请教。起因是这样的:我想将某个控件的left,top,width,height集中在一起显示,考虑了下,可能添

关于RTTI的问题请教。
起因是这样的:

我想将某个控件的left,top,width,height集中在一起显示,考虑了下,可能添加几个属性更简单。。所以就有了下面的代码。

定义了yPosition 包含四个属性y1Left,y2Top,y3Width,y4Height 在使用过程中,通过属性编辑器设置这几个属性是没问题的,但是在设计器中鼠标拖拉改变了窗体的大小和位置后,属性编辑器中却没有变化??delphi源码中找了相关的事件和消息,也没看出所以然,

相关代码如下:

Delphi(Pascal) code
unit yForm;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs;type  TyPosition = class(TPersistent)  private    FControl: TControl;    FyLeft:   Integer;    FyTop:    Integer;    FyWidth:  Integer;    FyHeight: Integer;    FOnChange: TNotifyEvent;    procedure SetyPosition(Index: Integer; Value: Integer);    function Gety1Left: Integer;     //试图用此方式,不行  protected    procedure Change; virtual;    //procedure AssignTo(Dest: TPersistent); override;    //property Control: TControl read FControl;  public    constructor Create(Control: TControl); virtual;    property OnChange: TNotifyEvent read FOnChange write FOnChange;  published    property y1Left:   Integer index 0 read FyLeft    write SetyPosition default 0;    property y2Top:    Integer index 1 read FyTop     write SetyPosition default 0;    property y3Width:  Integer index 2 read FyWidth   write SetyPosition default 0;    property y4Height: Integer index 3 read FyHeight  write SetyPosition default 0;  end;  TyForm = class(TForm)  private    FyPosition: TyPosition;     procedure SetyPosition(const Value: TyPosition);  protected    //  public    constructor Create(AOwner:TComponent);override;  published    property yPosition: TyPosition read FyPosition write SetyPosition ;  end;procedure Register;implementation{$R *.dfm}constructor TyForm.Create(AOwner:TComponent);begin  inherited Create(AOwner);  FyPosition := TyPosition.Create(Self);end;procedure TyForm.SetyPosition(const Value: TyPosition);begin  FyPosition.Assign(Value);end;constructor TyPosition.Create(Control: TControl);begin  inherited Create;  FControl := Control;  FyLeft   := FControl.Left ;  FyTop    := FControl.Top;  FyWidth  := FControl.Width;  FyHeight := FControl.Height;end;function TyPosition.Gety1Left: Integer;begin  Result := FControl.Left;end;procedure TyPosition.Change;begin  if Assigned(FOnChange) then FOnChange(Self);end;procedure TyPosition.SetyPosition(Index: Integer;Value: Integer);begin  //这里代码省略掉了。end;procedure Register;begin  //end;end.



[解决办法]
我记得TPersistent无法使用RTTI的,从TComponent开始继承吧
[解决办法]
探讨
我记得TPersistent无法使用RTTI的,从TComponent开始继承吧

[解决办法]
写错了,是OnResize,不是OnSize
[解决办法]
探讨
我记得TPersistent无法使用RTTI的,从TComponent开始继承吧

[解决办法]
需要重载setbounds方法。resize事件在窗体移动时貌似不会触发。

热点排行