关于有句柄与无句柄控件以及焦点问题

首先 股票软件很多都是在一个MAINFORM里放多个MDI子窗体
OK问题出来了,当我们使用COMBOBOX控件切换指标的时候 焦点回不到MDI子窗体里了

怎么办呢,
常规做法是
procedure TfmMain.RzComboBox1Change(Sender: TObject);
begin
MDICHILDFORM.SETFOCUS;
end;
问题出来了,焦点回不去。
procedure TCustomForm.SetFocus;
begin
if not FActive then
begin
if not (Visible and Enabled) then
raise EInvalidOperation.Create(SCannotFocus);
SetWindowFocus;
end;
end;
窗体做了什么?
NOT FACTIVE 下才能焦点设置回窗体

procedure TCustomForm.SetWindowFocus;
var
FocusControl: TWinControl;
begin
if (FActiveControl <> nil) and (FDesigner = nil) then
FocusControl := FActiveControl else
FocusControl := Self;
Windows.SetFocus(FocusControl.Handle);
if GetFocus = FocusControl.Handle then
FocusControl.Perform(CM_UIACTIVATE, 0, 0);
end;

解决方法来了
Windows.SetFocus(FocusControl.Handle);
这句足够了 如果有问题加上下边这句,具体干嘛的没查这个消息
FocusControl.Perform(CM_UIACTIVATE, 0, 0);

时间: 2024-07-29 22:08:40

关于有句柄与无句柄控件以及焦点问题的相关文章

Windows phone 自定义控件(无外观控件)——ColorPicker

编码前 在上一篇博客中,写的是一个UserControl的子类,它具有固定的外观(虽然也可以通过样式来进行修改,但收到的限制很大).如果你想要使用这个空间的逻辑,但是希望在使用的时候可以更改控件的外观,比如希望将预览颜色的矩形放在滑动条的左边(控件中是放在右侧),这个时候你就可以定义一个无外观的控件(但是你可以编写他的默认模板).在使用这个无外观控件的时候,你可以使用模板来改变控件的外观,而你仍然可以使用这个控件中所定义的属性.事件等控件的功能. 1.依赖属性.标准属性(属性包装器).路由事件等

iOS开发无第三方控件的援助达到的效果侧边栏

最近的研究iOS程序侧边栏.渐渐的发现iOS该方案还开始采取风侧边栏格该,QQ,今日头条,Path(Path运营商最早的侧边栏app该,效果说成是Path效果),所以就研究了下. 然后发现Git Hub上有非常多側边栏的控件,这些控件效果也都挺玄的.可是我想找到不用第三方控件自己实现側边栏呢?后来參照这篇blog,然后自己搞了下,算搞清楚了.以下具体介绍一下吧. 1. 首先我们须要在storyboard里面新建3个view controlle,这里也能够是navigation controlle

SVN提交忽略*.class、.classpath、.mymetadata、.project、.settings、.myeclipse等无版本控件文件

1.忽略*.class 在TortoiseSVN -->setting(设置)--第一项常规设置 2.修改全局忽略样式,删除注释"#" ,在global-ignores加入忽略classes文件夹,即可忽略*.class文件 3.忽略 .classpath..mymetadata..project..settings..myeclipse SVN客户端(非eclipse插件)好像不能全局将带".xxxx" 加入忽略列表,只能在提交的时候,加入忽略列表,如果有更

Delphi对象变成Windows控件的前世今生(关键是句柄和回调函数)

----------------------------------------------------------------------第一步,准备工作:预定义一个全局Win控件变量,以及一个精简化的Win控件类var CreationControl: TWinControl = nil; // 定义全局变量,用来表示每次刚创建的Win控件 TWinControl = class(TControl) private FDefWndProc: Pointer; // 记录原有的窗口过程,但只有

自定义可视控件

由于本软件为音乐软件,需要大量绘图,现有的基于DC的API及BCB的画布均不能完成要求(速度慢,绘制特定图案困难),为了节省时间,派生了现有的TWinControl可视窗口控件,组合特定的绘图类,形成一个新的类,图案绘制在可视区域,重载控件的鼠标及键盘事件处理,形成标准的控制,这一切都实现了,但结果失败了,原因是自绘图完成后,系统刷新了一下控件,结果悲催了,改变窗体尺寸也要刷下一,可视窗口控件这一动作是正常的,问题是系统不认我的自绘图.解决问题的办法是系统刷后再绘,那么就截获WM_SIZE消息,

VC++ 设置控件显示文本的前景色、背景色以及字体

在每个控件开始绘制之前,都会向其父窗口发送WM_CTLCOLOR通告消息,在该消息的处理函数中,可以设置控件显示文本的前景色.背景色以及字体.该消息处理函数还要求返回一个画刷的句柄,用于在控件具体的绘制之前擦除其客户区. HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO:  Retur

从jpanel中调出一个JDialog,并且使得父窗口jpanel的控件不能用

这个问题不好描述,就我的目的吧. 我要一个窗体调出另一个窗体.不过,父窗体只能是jpanel,而不是jframe,这是由我的问题决定的.并且使父窗体不可写. 当然,如果是jframe,这久简单了. 调出可编写的窗口,即子窗口为jdialog,但其构造方法中父窗体只能是jframe或者window, 不过,用这个,就可以使用了: SwingUtilities.getWindowAncestor(this): 不过,jframe模式不知该怎么搞,看哪位大牛能教我. 不过另一方面,虽然成功调出jdia

PB控件属性之TreeView

TreeView [其他] ■TreeView控件可以以树型方式来组织项目,不仅显示直观.界面友好,而且项目的管理和操作更为方便,是当前比较流行的一个控件. 该控件的特点是在较小的空间可以分层次显示大量的数据,并且可以按照用户的要求检索数据.该控件具有以下功能: 通过可以展开或者折叠的节点遍历数据. 图形化和文本化的节点显示. 拖放操作. 包括剪切.复制和粘贴的节点操作. ■典型编程 通常TreeView控件用来让用户选择数据,或者进行数据的管理.比如,在一个人事管理软件中,使用部门.姓和名这样

vcl控件经常使用属性和方法

TTabControl属性 DisplayRect:仅仅定该控件客户区的一个矩形 HotTrack:设置当鼠标经过页标签时,它的字是否有变化.假设为True,是字会变成蓝色Images:为每一个页标签加入一个图片MultiLine:假设总页标签的长度大于该控件的宽度时,是否同意多行显示MultiSelect:是否同意多选页标签.该属性仅仅有当Style为tsFlatButtons或tsButtons时才有效OwnerDraw:是否同意自己绘画该控件RaggedRight:指定是否同意标签页伸展到