gpt4 book ai didi

delphi - 自定义 TControl 在剪切和粘贴之前不会在设计时绘制

转载 作者:行者123 更新时间:2023-12-03 19:32:38 29 4
gpt4 key购买 nike

我对 TChromeTabs 有一个奇怪的问题。我知道它一定很简单,但我不知道需要做什么来修复它。

当我最初将 TChromeTabs 控件放在表单上时,它是完全透明的。如果我剪切控件,然后将其粘贴回表单,则内容将正确显示。如果我关闭,内容也会出现,然后重新打开表单。

因为我不知道为什么会发生这种情况,所以我真的不能给你任何代码示例。但是,您可以在此处下载源代码:http://code.google.com/p/delphi-chrome-tabs/downloads/list .

最佳答案

您的控件不会自行绘制,因为您禁用了绘制。 You call BeginUpdate in the constructor , 和 you don't call EndUpdate until the Loaded method叫做。但是Loaded仅在从持久状态加载控件时调用。通常,我们认为这是从 DFM 文件加载控件时的情况,但 IDE 使用相同的技术来允许将控件放在剪贴板上。

您以前没有注意到这一点,因为显然您只是通过打开一个预制的演示项目来测试您的控件。演示项目的 DFM 文件中有一个控件,因此您使用的唯一代码路径是 DFM 案例。您不会使用直接调用构造函数的路径——当控件第一次放在窗体上时,或者当控件在代码中“动态”创建时。

要解决此问题,首先要删除 the BeginUpdate call in your constructor .相反,要检查您的控件是否仍在构建过程中,请检查 csCreating in ControlState .

你也可以摆脱你的stsLoading状态。 Delphi 已经为您提供了 csLoadingComponentState .此外,您使用 stsLoading是错误的,因为 you set it in the constructor ,就像你对 BeginUpdate 所做的那样.

而不是依赖Loaded被调用时,您可能希望将某些代码移动到 AfterConstruction方法。将需要在创建组件后运行但与从 DFM(或其他持久性源)加载属性无关的代码放在那里。我不确定我在您的 Loaded 中看到了什么真正属于那里的方法。几乎所有这些都应该能够在构造函数中发生。

您还应该注意 CreateWnd方法。它在您的控件的窗口句柄被分配时调用。这就是你应该开始允许绘制操作发生的地方。当你没有窗 Handlebars 时,你就没有什么可画的了。

关于delphi - 自定义 TControl 在剪切和粘贴之前不会在设计时绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14156030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com