type
TStaticArray = array[1..10] of integer;
TDynamicArray = array of integer;
TMyClass = class(TObject)
private
FStaticArray: TStaticArray;
FDynamicArray: TDynamicArray;
published
property staticArray: TStaticArray read FStaticArray write FStaticArray; //compiler chokes on this
property dynamicArray: TDynamicArray read FDynamicArray write FDynamicArray; //compiler accepts this one just fine
end;
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?静态数组给出错误,"已发布属性'staticArray'不能是ARRAY类型"但动态数组就好了吗?我糊涂了.任何人都知道这背后的原因,以及我如何解决它?(不,我不想将我的所有静态数组重新声明为动态.它们的大小是有原因的.)
我正在构建一个使用 Delphi 包 (BPL) 作为插件的程序,但我想使用自定义扩展来表明这些文件具有特定用途,而不仅仅是 BPL。这工作得很好,直到我最终得到一个包依赖于另一个包。然后编译器会自动创建内置扩展 BPL 的二进制文件。
使用十六进制编辑器修复这个问题并不太难,但这是一种极端的解决方案。有什么方法可以让编译器首先生成具有正确依赖项名称的包吗?
编辑:到目前为止的答案似乎还没有理解这个问题。
我确切地知道如何使用自定义 TEP 扩展而不是 BPL 扩展来创建包。但是,如果我有 package1.TEP 和 package2.TEP,并且 package2 依赖于 package1,然后我尝试加载 package2,则会出现错误,因为它找不到“package1.BPL”。我想要的是找到一些更简单的方法来使 package2 查找正确的文件名“package1.TEP”,这不涉及在创建二进制文件后对其进行编辑。有什么办法可以做到这一点吗?
我已经构建了一个自定义控件,我正在尝试将输入发送到.它将接受鼠标输入并正确报告MouseDown,MouseMove和MouseUp,但无论出于何种原因,它都不接受键盘输入.当我点击它时,它没有得到焦点,我按下的任何键都被任何具有焦点的控件解释.
这可能非常简单.我想看的第一个地方是在ControlStyle属性中,但我在帮助文件中看到的关于键盘输入的唯一内容是csNoStdEvents禁用它,而我的控件没有.那么我需要做些什么才能让我的控件能够获得输入焦点?
在 Delphi 7 中,当我运行多个 Find In Files 搜索时,每个搜索结果都会生成一个单独的选项卡。我们已经升级到 Delphi 2010,现在当我在每次触发时运行多个 Find In Files 搜索时,它会替换该选项卡,而不是使用连续搜索的结果创建一个新选项卡。有没有办法恢复旧功能,某个地方的设置?
谢谢,
布赖恩
这可能是一个"不",但有什么方法可以使用Delphi的RTTI(旧学校或2010扩展RTTI)传入一个包含类型名称的字符串,特别是枚举的名称类型,并让它给我这种类型的PTypeInfo?我查看了RTTI.pas和TypInfo.pas,我没有看到任何可以做到这一点的函数,但我可能错过了一些东西.
我在找什么:
var
info: PTypeInfo;
begin
info := GetTypeInfoFromName('TComponentStyle');
end;
Run Code Online (Sandbox Code Playgroud)
或类似的东西.事实是,枚举类型的名称将被传入; 在编译时不知道.
我最近在使用我的一个Delphi 2010项目时遇到了一些麻烦.有时候,当我打开一个表单作为模态对话框时,应用程序会停止显示在ALT-TAB列表中,直到我关闭对话框.它仍在任务栏中,但不在ALT-TAB中,这意味着我不能在不使用鼠标的情况下切换到它.
在Windows 7,64位下运行.谁看过这个吗?知道是什么导致它以及如何解决它?
我正在尝试制作一个"空白"背景,将图像放在上面.通过在表单上放置TImage并执行以下操作来创建剖面线并不困难:
image1.Canvas.brush.Style := bsDiagCross;
image1.canvas.brush.color := clWhatever;
image1.canvas.FillRect(image1.clientrect);
Run Code Online (Sandbox Code Playgroud)
这是有效的,我在clW中得到一个交叉阴影图案,无论是在黑色背景下.但这就是问题所在.它总是黑色的,我找不到任何方法来指定背景颜色,以防我想要黑色以外的东西.
有谁知道如何做到这一点?
我正在Visual C++ 2008中构建一个DLL,我希望将运行时静态链接到DLL中.所以我进入项目选项并将Runtime Library设置为Multi-threaded (/MT).这在过去一直适用于其他项目.但是当我构建这个时,我仍然最终得到了Dependency Walker在列表中显示MSVCR90.dll.
有人知道是什么原因引起的吗?
我正在尝试用dwscript创建一个模态表单.我使用ExposeRtti注册表单,然后执行脚本,但在Script.Compile期间它在"堆栈溢出"时失败.有没有人有这个错误的解决方案.
我当然希望我不必手动注册所有TForm属性和函数,就像我们必须使用remobjects PascalScript一样,在这个时代它会让我们难看,就像避免那样......
dwscript可以这样做,还是形式超出了dwscript的范围(在这个阶段?)?
procedure TMainForm.Button1Click(Sender: TObject);
var AdwsProgramExecution: IdwsProgramExecution;
ADelphiWebScript: TDelphiWebScript;
AdwsProgram: IdwsProgram;
AdwsUnit: TdwsUnit;
begin
AdwsUnit := TdwsUnit.Create(nil);
ADelphiWebScript := TDelphiWebScript.Create(nil);
try
AdwsUnit.UnitName := 'ShowModalTest';
AdwsUnit.Script := ADelphiWebScript;
AdwsUnit.ExposeRTTI(TypeInfo(TObject)); //Otherwise GetOnAlignInsertBefore error when 'compiling'
AdwsUnit.ExposeRTTI(TypeInfo(TForm)); //Want t ocreate a form
AdwsProgram := ADelphiWebScript.Compile('procedure TestShowModal; begin TForm.Create(nil).ShowModal; end; end.'); //Stack overflow
if AdwsProgram.Msgs.Count = 0 then
begin
AdwsProgramExecution := AdwsProgram.Execute;
MEResult.Lines.Text := AdwsProgramExecution.Result.ToString;
end
else
MEResult.Lines.Text := AdwsProgram.Msgs.AsInfo;
finally
ADelphiWebScript.Free;
AdwsUnit.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我有一个使用IFileDialog(标准Windows对话框)来打开文件的程序.在某些计算机上,它都按预期工作,但在其他计算机上,"打开"按钮有一个带有下拉菜单的箭头,该菜单添加了第二个选项"显示以前的版本".
一些研究表明这是一个与系统还原相关的操作系统,可以通过完全关闭系统还原来禁用它.但那将是利用全球国家来管理当地问题. 有没有办法简单地将对话框配置为不显示下拉菜单?
delphi ×8
delphi-2010 ×3
alt-tab ×1
arrays ×1
c ×1
canvas ×1
colors ×1
delphi-2009 ×1
dependencies ×1
drawing ×1
dwscript ×1
focus ×1
package ×1
properties ×1
rtti ×1
visual-c++ ×1
winapi ×1
windows ×1
windows-7 ×1