请教高手(50分)

  • 主题发起人 主题发起人 ggwen
  • 开始时间 开始时间
G

ggwen

Unregistered / Unconfirmed
GUEST, unregistred user!
我想从TCustomControl下面派生出一个类,类的样子有我自己来画,但我在Paint里面写
的代码不起作用,请问打各位达侠帮忙???
 
如果你想设计自己的样子的话,要重载一个构造函数:
procedure CreateParams(var Params: TCreateParams); virtual;
这个函数是在TWincontrol中定义的,重载它就可以改变外观了,用Paint只能改变在Canvas
上画的东西。
你研究一下TCreateParams这个参数就可以了,我就不多说了
 
谢过这位大哥!
 
不过,现在我在程序里动态的创建一个该类的一个对象,什么也看不到,这是怎么回事??
 
你要把创建的类的Parent属性设为某个窗体,程序靠Parent属性来判断在哪个控件
上面显示你创建的东西
 
设置parent 后
然后就可以
SHOW
 
可以拉,那怎么允许他获得焦点呀,现在他的不到焦点??麻烦大哥拉!
 
鼠标点上不救或的焦点了吗?
你是想自动获得焦点吗,还是说你想看到获得焦点后的效果?
 
现在鼠标点不上去,就像Panel那样?
 
把代码贴出来
 
TMyEdit = class(TCustomControl)
private
procedure CreateParams(var Params: TCreateParams); override;
procedure SetSelText(const Value: string);
procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
protected
procedure Change; dynamic;
published
property TabStop default True;
property Text;
public
constructor Create(AOwner: TComponent); override;
procedure SetSelTextBuf(Buffer: PChar);
end;

constructor TMyEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Color := clWhite;
Width := 121;
Height := 25;
TabStop := True;
ParentColor := False;
end;

procedure TMyEdit.SetSelTextBuf(Buffer: PChar);
begin
SendMessage(Handle, EM_REPLACESEL, 0, LongInt(Buffer));
end;

procedure TMyEdit.SetSelText(const Value: String);
begin
SendMessage(Handle, EM_REPLACESEL, 0, Longint(PChar(Value)));
end;

procedure TMyEdit.CMEnter(var Message: TCMGotFocus);
begin
inherited;
end;

procedure TMyEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
CreateSubClass(Params, 'MyEDIT');
with Params do
begin
Style := Style and not WS_BORDER;
ExStyle := ExStyle or WS_EX_CLIENTEDGE;
end;
end;


procedure TMyEdit.CMFontChanged(var Message: TMessage);
begin

end;

procedure TMyEdit.CNCommand(var Message: TWMCommand);
begin
if (Message.NotifyCode = EN_CHANGE) then Change;
end;

procedure TMyEdit.CMTextChanged(var Message: TMessage);
begin
inherited;
if not HandleAllocated or (GetWindowLong(Handle, GWL_STYLE) and
ES_MULTILINE <> 0) then Change;
end;

procedure TMyEdit.Change;
begin
inherited Changed;
end;

 
多人接受答案了。
 
后退
顶部