关于继承控件的问题???(10分)

  • 主题发起人 主题发起人 sunnysheng
  • 开始时间 开始时间
S

sunnysheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我在书上看到可以从可视化的构件继承。不一定要注册,不注册的控件可以正常在程序中使用。
  【例】自己定义一个中国Edit控件。特点是回车键当Tab键来使用。
type
TMyEdit=class(TEdit)
private procedure WndProc(var msg: TMessaeg); override;
end; //类的定义部分。在其中覆盖了父类的虚拟方法 WndProc

procedure TMyEdit.WndProc(var msg: TMessage);//实现的时候不要写override
begin
if (msg.msg = wm_keyDown) and (msg.wParam = vk_Return) then
parent.perform(wm_nextDlgCtl,0,0)
else
inherited;
end; //当按了回车键的时候,给父窗口发消息,移动焦点到下一个控件

我把这段代码放到哪个地方啊,还有能不能直接像添加Edit控件一样添加到窗口里任意移动位置啊,能不能根据这段代码写一个演示程序啊
 
在使用时加载这个unit文件就行
 
可以和你的程序的unit写到一起
也可以单独写一个unit,然后其他单元uses
要象其他控件那样使用,那你就要把它包装成一个控件吧:
Delphi->File->New->Component
输入父类名 TEdit
输入自己的类名:TMyEdit
然后输入路径--->确定--->把你的这段程序拷贝到里面就可以了

完整的控件(TMyEdit)单元:

unit MyEdit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TMyEdit = class(TEdit)
private
{ Private declarations }
procedure WndProc(var msg: TMessage); override;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('MyComponent', [TMyEdit]);
end;

{ TMyEdit }

procedure TMyEdit.WndProc(var msg: TMessage);
begin
if (msg.msg = wm_keyDown) and (msg.wParam = vk_Return) then
parent.perform(wm_nextDlgCtl,0,0)
else
inherited;
end;

end.
只需要把它安装上去就可以了
 
后退
顶部