获得焦点的问题(200分)

  • 主题发起人 主题发起人 xiaochengyong
  • 开始时间 开始时间
X

xiaochengyong

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个按钮控件,派生于TCustomControl
(class PACKAGE TMyButton : public TCustomControl)
我想要它获得焦点,比如在窗体上有TButton1,TButton2,及
TMyButton三个按钮,<1>.当焦点在TButton1上时,按TAB键焦点
转到TButton2上,<2>.再按TAB键时,转到TMyButton上。怎么实现
<2>.步。是否是需要重载CreateParams、CreateWnd...等。能否
具体讲一下思路。
 
因为TCustomControl本身就继承有TabOrder属性,应该不用写什么代码吧.
只要在程序中设置好TButton1,TButton2,TMyButton的Tab Order,应该
自己就会跳转焦点的.
 
TabOrder么?
 
同意楼上的看法
把 tbutton1,tbutton2,tbutton3 的tag属性 按顺序设置好就可以

 
因为TCustomControl本身就继承有TabOrder属性,应该不用写什么代码吧.
只要在程序中设置好TButton1,TButton2,TMyButton的Tab Order,应该
自己就会跳转焦点的.

上面的回答是不可能的,不信你可以试一下。我看了“TButton”的原码,
觉得是否应该是
1.
procedure TMyButton.CreateParams(var Params: TCreateParams);
const
ButtonStyles: array[Boolean] of DWORD = (BS_PUSHBUTTON, BS_DEFPUSHBUTTON);
begin
inherited CreateParams(Params);
CreateSubClass(Params, 'BUTTON');
Params.Style := Params.Style or ButtonStyles[FDefault];
end;

procedure TMyButton.CreateWnd;
begin
inherited CreateWnd;
end;
2.
再响应什么KeyEvent FOnKeyDown、TKeyPressEvent FOnKeyPress、
TKeyEvent FOnKeyUp;之类的,
但不知道是否理解正确。望高手指点。
 
bluerain的说法是对的,不过如果不写代码的话,当TMyButton获得焦点时,它不会像TButton
那样会有一个虚线框显示。解决办法:
public
property paint; override;
.....

TMyButton.paint;
begin
inherited;
if focusd then
canvas.DrawFocusRect(Rect(2,2,Width-2,Height-2));
end;
如果你在MyButton上要加图形的话,上面的Canvas应为TBitmap.Canvas
 
后退
顶部