IsChild API与Delphi里的Parent不是一回事(Windows窗口自己不能是自己的子窗口,但Delphi不一定)

新建一个Form,上面放一个Button1,一个Panel1,然后在Panel1上再放一个Button2,测试结果:

procedure TForm1.Button1Click(Sender: TObject);
begin
    if IsChild(handle, handle) then ShowMessage(‘yes‘) else ShowMessage(‘no‘); // 显示No, 因为Form自己不是自己的Child

    if IsChild(handle, button1.handle) then ShowMessage(‘yes‘) // 显示Yes
    else ShowMessage(‘no‘);

    if IsChild(handle, panel1.handle) then ShowMessage(‘yes‘) // 显示Yes
    else ShowMessage(‘no‘);

    if IsChild(handle, button2.handle) then ShowMessage(‘yes‘) // 显示Yes,要研究一下,为什么
    else ShowMessage(‘no‘);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    ShowMessage(button2.Parent.Name); // 显示Panel1
end;

TWinControl.CreateWindowHandle使用了TCreateParams.WndParent作为父窗口的句柄,那么button2的父窗口是什么时候设置的呢?

时间: 2024-08-08 14:37:55

IsChild API与Delphi里的Parent不是一回事(Windows窗口自己不能是自己的子窗口,但Delphi不一定)的相关文章

简介子窗口控件(api)

子窗口控件 壹佰软件开发小组  整理编译   回忆第七章的CHECKER程序.这些程序显示了矩形网格.当您在一个矩形中按下鼠标按键时,该程序就画一个x:如果您再按一次鼠标按键,那么x就消失.虽然这个程序的CHECKER1和CHECKER2版本只使用一个主窗口,但CHECKER3版本却为每个矩形使用一个子窗口.这些矩形由一个叫做ChildProc的独立窗口消息处理程序维护. 如果有必要,无论矩形是否被选中,都可以给ChildProc增加一种向其父窗口消息处理程序(WndProc)发送消息的手段.通

String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串

学了好多不了解的知识: procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String[255]; begin s1:='ç1很好'; ShowMessage(s1); // 这里显示正常 s2:=s1; ShowMessage(s2); // 这里显示乱码. // 问这个问题的原因是,在一个recode pack 里定义了String[255],但是使用Unicode字符给它赋值的时候,就乱码了,这该怎么

【百度地图API】圣诞节里不会迷路的麋鹿——驾车导航

原文:[百度地图API]圣诞节里不会迷路的麋鹿--驾车导航 任务描述: 可能大家还不知道,圣诞老人是爱迷路的老爷爷! 今年圣诞节又要到了,圣诞老人又要出来送礼物了.可是,他灰常的迷路呢! 还好,他有一只不会迷路的麋鹿…… 如何实现: 建立两个input文本框,分别获得圣诞老人输入的起点和终点. 当圣诞老人点击OK按钮后,先判断起点和终点文本框内是否为空,为空则需要提示圣诞老人重新输入. 不为空的情况下,进行查询驾车路线的工作. 如果没有查询到相应的起点和终点,则需要提示圣诞老人重新输入哦! TI

API、Win32 SDK、Win32项目、MFC、Windows窗体应用程序的区别

[原]API.Win32 SDK.Win32项目.MFC.Windows窗体应用程序的区别 首先来看一下每一个术语的定义: API:Application Programming Interface.Windows操作系统提供给应用程序编程的接口, 简称 为API函数. Win32 SDK:SDK(Software Development Kit)中文是软件开发包.则Win32 SDK是Windows 32位平台下的软件开发包,包括了API函数.帮助文档.微软 提供的一些辅助开发工具. Win3

在Delphi的窗口单元中,如何调用其它窗口的单元。

在Delphi的窗口单元中,如何调用其它窗口的单元.(转载) . 在Delphi中简单的调用单元 unit实例 一,新建一个工程文件,默认的文件是unit1,代码如下:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton;

DELPHI中MDI子窗口的关闭 和打开

Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭.解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例: procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);begin   Action := caFree;end; Delphi为一个Form的关闭行为指定了四种方式,分别是: caNone 禁止F

深入delphi编程理解之消息(一)WINDOWS原生窗口编写及消息处理过程

通过以sdk方式编制windows窗口程序,对理解windows消息驱动机制和delphi消息编程有很大的帮助. sdk编制windows窗口程序的步骤: 1.对TWndClass对象进行赋值; 2.向系统注册wndclass对象(RegisterClass): 3.CreateWindow创建窗口,获得窗口句柄Hwnd; 4.显示窗口(ShowWindow): 5.通过GetMessage函数不断获取系统消息,交给程序处理,程序过通回调函数(wndproc)处理系统消息.(消息处理部分)程序代

WM_PAINT中应该用BeginPaint与EndPaint这两个api,它们的功能正是使无效区域恢复(所以WM_PAINT里即使什么都不做,也必须写上BeginPaint与EndPaint)——Delphi里WM_PAINT消息的三个走向都做到了这一点

程序本来是想实现鼠标单击改变背景颜色.可是,程序运行时,为什么没有任何消息触发,背景颜色就一直不断的改变了?WM_PAINT怎么被触发的 #include <windows.h> #include <stdlib.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; void DrawRectangle (HWND) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANC

在Delphi里调用API函数动态建立ODBC数据源。

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求