例如,是否可以在运行时使用实例化(有条件地)的子类组件替换和释放TEdit?如果是这样,应该如何以及何时完成?我试图将父设置为nil并在表单构造函数和AfterConstruction方法中调用free(),但在这两种情况下我都遇到了运行时错误.
更具体一点,我遇到了访问冲突错误(EAccessViolation).看起来弗朗索瓦是正确的,他说在框架构造中释放组件会使用Form来控制内务管理.
情况如下.通常我使用RAD Studio 2010进行Delphi开发.我有一些我想以二进制形式重新分发的组件(*.bpl没有源代码).但我希望人们能够使用它们,尽管他们的Delphi版本.但是,例如,dcu文件只能由生成它们的编译器版本使用.我知道,几乎相同的情况是bpl文件.每个bpl文件都需要相应的VCLXX.bpl库,具体取决于Delphi版本.如何使我在2010年编译的bpls能够在Delphi7,2007等中使用?
安装所有Delphi版本的唯一解决方案是在每个版本中单独编译bpl文件吗?
我不知道我的问题是什么,但我无法在DEx2中为TCheckBox,TRadioButton,TGroubBox和TRadioGroup等控件设置字体颜色.如果我在IDE中或以编程方式执行它并不重要.
我已将表单颜色设置为clBlack,并希望我的标题是clWhite,但它们不会渲染任何颜色,而是clBlack.当我在表单的OnShow事件上分配颜色并在调试器中逐步执行它时,它会显示我分配给它的值,但在屏幕上它仍然是黑色.
我没有使用样式或其他任何东西.有任何想法吗?
这是一个示例表单: 白色黑色示例http://www.skippix.us/temp/Delphi-Font-Problem.bmp
有没有办法让父控件检测子控件何时调整大小?我正在考虑编写一个面板控件来调整大小,因为它的子控件调整大小(类似于HTML DIV元素将扩展以适合它的内容的方式).
我在运行时创建了一堆Panel,我想改变它们的颜色.颜色属性不起作用,我不想转动运行时主题...
有任何想法吗?
我正在使用Delphi XE3.
谢谢你的帮助!
我需要启用或禁用按钮,具体取决于列表中是否至少选择了一行.
以下是重现此问题的代码.使用OnData事件填充列表,它允许选择多行.
我以为我可以使用OnSelectItem来检测用户何时更改选择,然后使用TListView SelCount函数来检测所选行的数量.
问题是当用户选择多行时,SelCount返回0.如果手动填充列表(即不通过OnData事件),这可以正常工作.
有任何想法吗?
谢谢
更新:使用OnChange事件似乎可以解决问题.仍然有趣的是,当选择多行时(从SelectItem事件中),SelCount为什么返回0.
另一个更新:我发布了一个测试项目:https://dl.dropboxusercontent.com/u/35370420/TestListView2.zip以及截图:
要重现此问题,请运行应用程序,选择Item1,然后按SHIFT +单击Item2.该按钮被禁用.我的目的是只要在列表中选择了至少一个项目,就动态启用按钮.如果没有选定项目,则禁用该按钮.
PAS文件:
unit MainUnit;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls;
type
TForm3 = class(TForm)
ListView1: TListView;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure ListView1Data(Sender: TObject; Item: TListItem);
procedure ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
begin
ListView1.Items.Count := 5;
end;
procedure …Run Code Online (Sandbox Code Playgroud) 我有一个VCL表格,上面有五个标签TPageControl.每个TTabSheet内容都是相当无关的,并且有很多单独的控件和处理逻辑...所以我想要分解它,这样就可以更容易地处理"只是那个选项卡"的代码.像一条线
//-------------------------- begin rules tab methods -------------------
Run Code Online (Sandbox Code Playgroud)
只是不再削减它了.真的,我想我想以某种方式将每个标签放在一个单独的文件中.
目前我正在考虑为每个TTabPage创建一个VCL框架.如果我这样做,我需要将所有帧加载到构造函数中的TPageControl中,或者显示选项卡时.
这是一个好方法吗?为每个标签制作一个完整的TForm会更好吗?我应该继续将选项卡包装在TPageControl中,还是应该在动态加载内容时将其更改为TTabControl?如果这是一个好方法,最好在启动时加载所有选项卡,还是每次显示选项卡?(也许是优点/缺点,如果不是完全明显哪个在大多数/所有情况下都更好)
Unit db.pas包含TParam类的实现,它表示数据库查询中的参数.
在测试带有大量参数的查询时,我注意到function TParam.ParamRef: TParam需要花费大量时间,因为它调用ParamByName了无索引的params搜索.
实现很简单:
function TParam.ParamRef: TParam;
begin
if not Assigned(FParamRef) then
if Assigned(Collection) and (Name <> '') then
FParamRef := TParams(Collection).ParamByName(Name) else
FParamRef := Self;
Result := FParamRef;
end;
Run Code Online (Sandbox Code Playgroud)
它可以返回self或者ParamRef,所以想法是允许某种重定向.但它确实很慢ParamByName,被称为很多,我不明白的目的.事实上,如果我修改它只是返回self一切似乎工作正常.
我看到的唯一用途就是让几个同名的参数都重定向到同一个实例.如果是这种情况,那么ParamByName超过此功能的好处肯定会影响性能.
ParamRef没有文档,private因此只在db.pas单元中相关.此外,网上没有重要的讨论.
有谁遇到过同样的问题?
我注意到在(Windows 10 64 位上的 Delphi 10.3.3 32 位 VCL 应用程序)应用程序中,如果字符串“真的”很长,标签的标题将不会显示。进一步的测试表明它不限于 TLabel。TStaticText 也以相同的方式运行,可能所有的 TGraphicControls 也是如此。
对于表单上的 TLabel,测试表明如果标题长度为 43,679 个字符,它将显示标题。但再过一段时间,标题就会消失。自动调整大小、自动换行和 EllipsisPosition 的组合没有改变这种行为。跟踪 delphi 代码,它归结为 VCL.Controls 中的 2 条语句:
Perform(WM_SETTEXT, 0, Buffer);
Perform(CM_TEXTCHANGED, 0, 0);
Run Code Online (Sandbox Code Playgroud)
Buffer 在所有情况下都保存了正确的标题字符串值。但是在43,680 个字符时,标题消失了。所以它似乎是 Windows 限制,但我找不到任何确认。
我有一个主 TClientDataSet,它也是一个详细数据集。这个数据集被命名为 MasterDetail1。
另一个数据集 DetailSet1 是 MasterDetail1 的详细信息集。
DetailSet1 的查询是
SELECT *
FROM readoutprobe_containers
WHERE id = :parent_container
Run Code Online (Sandbox Code Playgroud)
其中parent_container参数的值是通过从主数据集中获取其数据的 DataSource 获得的。
只要 MasterDetail1 数据集有多条记录,DetailSet1 数据集就会显示相应的数据。
但是,当 MasterDetail1 数据集为空时,DetailSet1 数据集显示 MasterDetail1 数据中最后填充的记录,这是错误的数据。当主集没有数据时,明细集也应该不显示数据。
当主数据为空时如何实现空的DetailSet1?
vcl ×10
delphi ×9
colors ×2
c++ ×1
components ×1
database ×1
dbexpress ×1
delphi-2010 ×1
delphi-xe2 ×1
delphi-xe5 ×1
parameters ×1
properties ×1
themes ×1
tlistview ×1
tpagecontrol ×1
windows ×1