怎样让TSpeedButton 也像TButton一样按Tab键时得到焦点?(100分)

  • 主题发起人 主题发起人 ivw
  • 开始时间 开始时间
I

ivw

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样让TSpeedButton 也像TButton一样按Tab键时得到焦点?多谢!
 
自己做吧,同学。看看,他们的基类是不同地。
 
好象不行,就好象状态条上的按钮一样,都是不可获得焦点的,不过你可以用设快捷键的方式来方便键盘操作呀??
 
怎样作呢?给个方法吧?
是这样的,以前作的一个程序,全都用TSpeedButton ,后来发现得不到焦点,要换掉,不想改程序的界面,即让TSpeedButton 有TSpeedButton 的Flat。也有像TButton一样得到焦点。我每个窗体都计成一个窗体。可以在父窗体写代码来完成。
对高手来说应该不难吧,各位说说看。
 
看button.setfouse是怎么做的,
不能改TSpeendbutton吗,试试吧
 
不可能做到,看SP的继承表,就知道,他不是从TWincontrol继承来的,根本不能得到焦点!
 
很難吧。要是有人能解決我也加分
 
TO ing
你加又是加多少呢?????
我相信分多就会有人来说的啦,
不过看不到效果是真的,
因为 TSpeedButton没有关于这个状态的 Paint呀,

呵呵~~~~~~~~~~~~~~~~~~~~~``````
 
打个比方:
硬要一个男人怀上孩子有没有可能?有,至少理论上是这样。如果使用女人来完成呢?
 
还看换掉吧.
 
应该可以的!我曾经作过一个Button从TPanel继承的,现在记不太清了!可以用DrawFocusRect,还要设置TabOrder为True,Tag.具体怎样实现你自己看着办吧!
 
To cjc861
Button从TPanel继承的 >>>>>>> 这个当然可以啦,他的曾祖父是 TWinControl嘛!!现地讨论的是从 TControl 或 TGraphicControl 派生来的类啦。

呵呵~~~~~~~~~~~~~~~~~~~~
 
to Netsoft:
DrawFocusRect是Api它可不管你的祖类或者父类是谁~!BOOL DrawFocusRect(
HDC hDC, // handle to device context
CONST RECT *lprc // logical coordinates
);
你自己处理Tab难道不可以吗?
 
多谢cjc861的回答。我现在不能写一个有焦点的TSpeedButton。是这样的,我的父窗体是没有TSpeedButton的,我只有在子窗体的create事件时写代码改变TSpeedButton让它能得到焦点。每个窗体都计成一个窗体,所以我可以在父窗体里写代码,让它的计成出来的窗体里的TSpeedButton都能得到焦点。

 
TSpeedButton = class(TGraphicControl)
一看就知道不可能,SpeedButton也没有Handle。
 
我敢说不行,如果行的话,我也会加分。
 
告诉你了不要叫男人做十月怀胎的蠢事,还硬要实现是吧。好,看你的悟性是否适合做这种蠢事:
1.在 Form 上多加一个 TButton 类的按钮。
2.使用你能熟练掌握的任何截获窗口过程的方法,截获这个按钮的窗口方法。
3.做一个与你需要的 TSpeedButton 大小一样、颜色根据自己需要设定的 Bitmap 备用。
4.把 Bitmap 图形装入 SpeedButton 的 Glyph 中。
5.在替换的窗口过程中解析消息后处理:
WM_KILLFOCUS:SpeedButton1.Glyph.Canvas.FillRect(Rect(x,y,w,b));
WM_SETFOCUS:SpeedButton1.Glyph.Canvas.DrawFocusRect(Rect(x,y,w,b));
6.把 TButton 类的那个按钮放到永远不会显示出来的地方(不要失能也不要设置不可见)来个虚拟蒸发。
7.运行吧。如果你还不是很蠢的话!
====== 另外,你有一群按钮,只要一个处理方法就可以了,不过 handle 还是每个都要地。 ======
演示(按 TAB 看看):http://www.xxtax.gov.cn/delphi/bbsxp/images/upfile/20031127211810.rar
 
TSpeedButton没句柄的吧,估计要自己画和处理消息,麻烦.
 
利用上面的原理,你应该知道,只要给它按个 handle 就可以做到,知道 AllocateHWnd 这个东西吗?
不知道的快去研究研究,知道的就动手自己做一个真正的有焦点的 TSpeedButton 吧。
(给男人装子宫?别说是我说的啊。还有,楼上说要加分的都说话算数?那就快加吧。)
 
多谢小雨哥:我用最笨的方法可以实现了,但为了想到以后维护,手工一个一个的换为Tbutton算了。
我是这样想的的。在窗体装入的时候,有多少个TSpeedButton,就生成多少个对应的TButton.,把TSpeedButton的事件,caption,hint.left,top,width,。。。等设置给对应的一个TButton,再把TSpeedButton.free.可是Tbutton的顺序不对。
 
后退
顶部