小编Mas*_*ler的帖子

为什么某些阵列可以发布但不能发布?

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类型"但动态数组就好了吗?我糊涂了.任何人都知道这背后的原因,以及我如何解决它?(不,我不想将我的所有静态数组重新声明为动态.它们的大小是有原因的.)

arrays delphi properties delphi-2009

5
推荐指数
1
解决办法
3765
查看次数

如何更改依赖项的文件扩展名

我正在构建一个使用 Delphi 包 (BPL) 作为插件的程序,但我想使用自定义扩展来表明这些文件具有特定用途,而不仅仅是 BPL。这工作得很好,直到我最终得到一个包依赖于另一个包。然后编译器会自动创建内置扩展 BPL 的二进制文件。

使用十六进制编辑器修复这个问题并不太难,但这是一种极端的解决方案。有什么方法可以让编译器首先生成具有正确依赖项名称的包吗?

编辑:到目前为止的答案似乎还没有理解这个问题。

我确切地知道如何使用自定义 TEP 扩展而不是 BPL 扩展来创建包。但是,如果我有 package1.TEP 和 package2.TEP,并且 package2 依赖于 package1,然后我尝试加载 package2,则会出现错误,因为它找不到“package1.BPL”。我想要的是找到一些更简单的方法来使 package2 查找正确的文件名“package1.TEP”,这不涉及在创建二进制文件后对其进行编辑。有什么办法可以做到这一点吗?

delphi dependencies package delphi-2010

5
推荐指数
1
解决办法
859
查看次数

为什么我的控件不接受键盘输入?

我已经构建了一个自定义控件,我正在尝试将输入发送到.它将接受鼠标输入并正确报告MouseDown,MouseMove和MouseUp,但无论出于何种原因,它都不接受键盘输入.当我点击它时,它没有得到焦点,我按下的任何键都被任何具有焦点的控件解释.

这可能非常简单.我想看的第一个地方是在ControlStyle属性中,但我在帮助文件中看到的关于键盘输入的唯一内容是csNoStdEvents禁用它,而我的控件没有.那么我需要做些什么才能让我的控件能够获得输入焦点?

delphi focus custom-controls component-design

5
推荐指数
2
解决办法
2288
查看次数

来自多个“在文件中查找”操作的多个搜索结果选项卡

在 Delphi 7 中,当我运行多个 Find In Files 搜索时,每个搜索结果都会生成一个单独的选项卡。我们已经升级到 Delphi 2010,现在当我在每次触发时运行多个 Find In Files 搜索时,它会替换该选项卡,而不是使用连续搜索的结果创建一个新选项卡。有没有办法恢复旧功能,某个地方的设置?

谢谢,

布赖恩

delphi delphi-2010

5
推荐指数
1
解决办法
611
查看次数

我可以从字符串中获取PTypeInfo吗?

这可能是一个"不",但有什么方法可以使用Delphi的RTTI(旧学校或2010扩展RTTI)传入一个包含类型名称的字符串,特别是枚举的名称类型,并让它给我这种类型的PTypeInfo?我查看了RTTI.pas和TypInfo.pas,我没有看到任何可以做到这一点的函数,但我可能错过了一些东西.

我在找什么:

var
  info: PTypeInfo;
begin
  info := GetTypeInfoFromName('TComponentStyle');
end;
Run Code Online (Sandbox Code Playgroud)

或类似的东西.事实是,枚举类型的名称将被传入; 在编译时不知道.

delphi rtti

5
推荐指数
1
解决办法
851
查看次数

应用程序有时会从Win7的ALT-TAB列表中消失

我最近在使用我的一个Delphi 2010项目时遇到了一些麻烦.有时候,当我打开一个表单作为模态对话框时,应用程序会停止显示在ALT-TAB列表中,直到我关闭对话框.它仍在任务栏中,但不在ALT-TAB中,这意味着我不能在不使用鼠标的情况下切换到它.

在Windows 7,64位下运行.谁看过这个吗?知道是什么导致它以及如何解决它?

delphi alt-tab windows-7 delphi-2010

5
推荐指数
1
解决办法
1525
查看次数

如何在TCanvas上绘制剖面线并指定背景颜色

我正在尝试制作一个"空白"背景,将图像放在上面.通过在表单上放置TImage并执行以下操作来创建剖面线并不困难:

image1.Canvas.brush.Style := bsDiagCross;
image1.canvas.brush.color := clWhatever;
image1.canvas.FillRect(image1.clientrect);
Run Code Online (Sandbox Code Playgroud)

这是有效的,我在clW中得到一个交叉阴影图案,无论是在黑色背景下.但这就是问题所在.它总是黑色的,我找不到任何方法来指定背景颜色,以防我想要黑色以外的东西.

有谁知道如何做到这一点?

delphi drawing canvas colors

5
推荐指数
1
解决办法
2829
查看次数

为什么即使设置/ MT选项,我也会看到MSVCR90依赖?

我正在Visual C++ 2008中构建一个DLL,我希望将运行时静态链接到DLL中.所以我进入项目选项并将Runtime Library设置为Multi-threaded (/MT).这在过去一直适用于其他项目.但是当我构建这个时,我仍然最终得到了Dependency Walker在列表中显示MSVCR90.dll.

有人知道是什么原因引起的吗?

c visual-c++-2008 visual-c++

5
推荐指数
1
解决办法
261
查看次数

编译包含TForm.Create(nil)的dwscript时堆栈溢出

我正在尝试用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)

stack-overflow delphi dwscript

5
推荐指数
1
解决办法
417
查看次数

如何在"打开文件"对话框中禁用"显示以前的版本"?

我有一个使用IFileDialog(标准Windows对话框)来打开文件的程序.在某些计算机上,它都按预期工作,但在其他计算机上,"打开"按钮有一个带有下拉菜单的箭头,该菜单添加了第二个选项"显示以前的版本".

一些研究表明这是一个与系统还原相关的操作系统,可以通过完全关闭系统还原来禁用它.但那将是利用全球国家来管理当地问题. 有没有办法简单地将对话框配置为不显示下拉菜单?

windows winapi

5
推荐指数
0
解决办法
809
查看次数