组合控件焦点问题 ( 积分: 100 )

  • 主题发起人 主题发起人 holyszq
  • 开始时间 开始时间
H

holyszq

Unregistered / Unconfirmed
GUEST, unregistred user!
TpanCodeName = Class(TPanel)

constructor TPanCodeName.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FName := TEdit.Create(nil);
FName.Parent := self;
FName.Left := 65;
end;

在设计期这个FName TEdit控件可以获得焦点,如何设置可以让选择FName 转成选择TPanCodeName类
 
怎么都没有人回答?
 
想在设计期不能选,还是运行期也不能获得焦点
 
想在设计期不能选,运行期能获得焦点!
 
unit Test;

interface

uses
SysUtils, Classes, Controls, ExtCtrls, StdCtrls, Messages;

type
TTest = class(TPanel)
private
{ Private declarations }
FEdit: TEdit;
FEditOldWndProc: TWndMethod;
procedure FEditWndProc(var Message: TMessage);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('My Controls', [TTest]);
end;

{ TTest }

constructor TTest.Create(AOwner: TComponent);
begin
inherited;
FEdit := TEdit.Create(nil);
FEdit.Parent := Self;
FEdit.Left := 10;
FEdit.Top := 10;
if csDesigning in ComponentState then
begin //接管消息处理函数
FEditOldWndProc := FEdit.WindowProc;
FEdit.WindowProc := FEditWndProc;
end;
end;

destructor TTest.Destroy;
begin
FEdit.Free;
inherited;
end;

procedure TTest.FEditWndProc(var Message: TMessage);
begin
if not (Message.Msg = WM_SETFOCUS) then //过滤获取焦点消息
FEditOldWndProc(Message);
end;

end.
 
非常感谢,ANiDelphi的回答,你的答案虽然可以实现不能得到焦点,但是不能点到Edit控件时,变成点到 TTest,而且光标也变了,其实要的就是点到Edit是就象Edit不存在一样的,
 
终于搞定了,在上面帖上修改了一下,节约空间

刚看Delphi源码,又发现一个消息WM_SETCURSOR,只要过滤这个消息就不会设置光标了,光标就默认了。
 
后退
顶部