小编Uli*_*rdt的帖子

Delphi:方法'Create'隐藏了基础的虚拟方法 - 但它就在那里

考虑假设的对象层次结构,从以下开始:

TFruit = class(TObject)
public
    constructor Create(Color: TColor); virtual;
end;
Run Code Online (Sandbox Code Playgroud)

及其后代:

TApple = class(TFruit)
public
    constructor Create(); overload; virtual;
    constructor Create(Color: TColor); overload; override; //deprecated. Calls other constructor - maintaining the virtual constructor chain
end;
Run Code Online (Sandbox Code Playgroud)

这里的想法是我已经覆盖了基类的构造函数,其重载也恰好是虚拟的.

德尔福抱怨:

方法'Create'隐藏基类型'TFruit'的虚方法

除了它不隐藏它 - 它就在那里!

  • 覆盖了祖先中的虚拟方法,并且
  • 我用另一个版本重载了

这是怎么回事?

delphi overloading

20
推荐指数
2
解决办法
1万
查看次数

更快的DirectoryExists功能?

我用

DirectoryExists (const PathName : String);
Run Code Online (Sandbox Code Playgroud)

检查是否可以从计算机访问目录.但是如果目录不存在且路径名是网络路径,即

\\computer1\Data
Run Code Online (Sandbox Code Playgroud)

该方法需要很长时间才能返回.

必须有一种更快的方法来确定无法访问网络文件夹.或者我可以配置DirectoryExists在内部使用的一些超时参数(我查看了源代码,但它只是委托给kernel32中定义的GetFileAttributes)?

有任何想法吗?

delphi networking delphi-2009

15
推荐指数
3
解决办法
1万
查看次数

迭代结构; 在RichEdit框中轻松显示结构字段和值

是否有更简单的方法来显示控件中的struct字段及其对应的值RichEdit

这就是我现在正在做的事情:

AnsiString s;

s = IntToStr(wfc.fontColor);
RichEdit1->Lines->Append(s);
Run Code Online (Sandbox Code Playgroud)

等等...

有没有比单独呼叫每个人更简单的方法?我想读取一个二进制文件,然后在RichEdit我正在构建的小实用程序的控件中显示相应的结构,并且没有找到其他方法.我知道如何读取二进制文件并将值读入struct已经存在的文件中.

c++ user-interface struct richedit c++builder-5

12
推荐指数
3
解决办法
1万
查看次数

相当于代码中的设计者指南

VCL表单设计器提供粉红色指导,用于在各自的文本基线上对齐控件: 表单设计师指南
但据我所知,这对标签和复选框不起作用. 更新:如果您准确地放置控件,它适用于标签,例如Ctrl- arrow.它适用于复选框 - 请参见截图.

现在,在某些形式上,我正在代码中创建控件,例如

ed := TEdit.Create(Self);
ed.SetBounds(...);
ed.Parent := SomePanel;
Run Code Online (Sandbox Code Playgroud)

我如何确保其文本基线对齐?我想将它用于编辑,组合框,标签和复选框.结果应该是这样的(没有红线,当然:-)): 基线对齐

编辑:我目前的做法是调用像AlignTop(8, [Edit1, ComboBox1], [CheckBox1, Label1]);

procedure ControlArray_SetTop(const AControls: array of TControl; ATop: Integer);
var
  i: Integer;
begin
  for i := Low(AControls) to High(AControls) do
    AControls[i].Top := ATop;
end;

procedure AlignTop(ATop: Integer; const AControls: array of TControl; const ALabelLikeControls: array of TControl);
begin
  ControlArray_SetTop(AControls, ATop);
  ControlArray_SetTop(ALabelLikeControls, ATop + 3);
end;
Run Code Online (Sandbox Code Playgroud)

我的目标是用更强大,更少hacky的东西取而代之.

delphi designer delphi-2007 form-designer

11
推荐指数
1
解决办法
653
查看次数

Delphi2007:在调试器中继续暂停应用程序时崩溃

我们经常在D2007调试器中启动应用程序时遇到崩溃,暂停并继续(通过按F9).例如

  • 创建一个VCL应用程序
  • 在主窗体上放一个TButton和一个TEdit
  • 为Button1添加此OnClick处理程序:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      while True do
      begin
        for i := 0 to 9999 do
          Edit1.Text := IntToStr(Random(i));
        Application.ProcessMessages;
      end;
    end;
    
    Run Code Online (Sandbox Code Playgroud)
  • 保存并调试应用程序
  • 按下Button1
  • 专注于IDE
  • 单击"暂停"按钮
  • 按F9.

我们几乎总是遇到访问冲突.我在Windows 7/64bit下测试了这个,我的同事在XP/32bit下.在我的同事的D2006中,我们无法重现此错误.

你能复制一下吗?任何想法如何解决它?

delphi crash debugging delphi-2007

9
推荐指数
1
解决办法
1423
查看次数

重构"with"块的工具

是否有重构工具来删除"with"块?例如转换

with Form1 do
begin
  Height := Blah;
  Blubb := Name;
end;
Run Code Online (Sandbox Code Playgroud)

Form1.Height := Blah;
Blubb := Form1.Name;
Run Code Online (Sandbox Code Playgroud)

其中Form1是VCL TForm.最好它应该与Delphi 2007一起使用.

delphi refactoring delphi-2007 with-statement

9
推荐指数
2
解决办法
502
查看次数

强制转换静态数组以打开不同元素类型的数组

(我已经在CodeReview上询问了这个问题,因为它已经关闭了主题.希望这是关于主题的.)

我有一个派生类型的静态数组(如LabelsA: array[0..3] of TLabel;下面的示例代码)和一个接受基类型的开放数组的例程(如procedure DoSomethingWithControls(const AControls: array of TControl);),我想DoSomethingWithControls用这些静态数组调用.请看我的样本:

procedure DoSomethingWithControls(const AControls: array of TControl);
var
  i: Integer;
begin
  for i := Low(AControls) to High(AControls) do
    Writeln(AControls[i].Name);
end;

procedure Test;
var
  LabelsA: array[0..3] of TLabel;
  LabelsB: array[0..1] of TLabel;

  procedure Variant1;
  type
    TArray1 = array[Low(LabelsA)..High(LabelsA)] of TControl;
    TArray2 = array[Low(LabelsB)..High(LabelsB)] of TControl;
  begin
    DoSomethingWithControls(TArray1(LabelsA));
    DoSomethingWithControls(TArray2(LabelsB));
  end;

  procedure Variant2;
  type
    TControlArray = array[0..Pred(MaxInt div SizeOf(TControl))] of TControl;
    PControlArray = ^TControlArray;
  begin
    DoSomethingWithControls(Slice(PControlArray(@LabelsA)^, …
Run Code Online (Sandbox Code Playgroud)

arrays delphi casting open-array-parameters

9
推荐指数
1
解决办法
531
查看次数

使用DrawText重载分辨率错误

在将一些代码从D2007移植到XE2时,我遇到了编译错误,我无法理解.请参阅以下示例:

procedure TForm1.FormPaint(Sender: TObject);
var
  c: Char;
  pc: PChar;
  r: TRect;
begin
  c := '1';
  pc := @c;
  r := Bounds(100, 100, 100, 100);
  DrawText(Canvas.Handle, pc, 1, r, DT_SINGLELINE or DT_NOCLIP); //1
{$TYPEDADDRESS OFF}
  DrawText(Canvas.Handle, @c, 1, r, DT_SINGLELINE or DT_NOCLIP); //2
{$TYPEDADDRESS ON}
  DrawText(Canvas.Handle, @c, 1, r, DT_SINGLELINE or DT_NOCLIP); //3
  DrawText(Canvas.Handle, PChar(@c), 1, r, DT_SINGLELINE or DT_NOCLIP); //4
end;
Run Code Online (Sandbox Code Playgroud)

D2007编译没有问题.的XE2编译器将拒绝标注的线//3

[DCC Fehler] Unit1.pas(38):E2010 Inkompatible Typen:'string'和'Pointer'

我想这是由于新添加的DrawText重载接受Delphi字符串.

你能解释一下这个错误吗?这不是什么大问题,因为我有一个解决方法(显式铸造),但我很好奇.这个错误在后来的Delphi版本中是否仍然存在?

编辑:我问的是编译器中是否有错误,而不是解释为什么它存在.很可能我忽略了编译器拒绝我的代码的正当理由.

delphi overload-resolution delphi-xe2

8
推荐指数
1
解决办法
286
查看次数

从另一个Delphi程序调用Delphi方法

我想设置一个小程序,从数据库中检索信息,然后在请求时将该信息分发给另一个程序.例如,一个名为"Master"的程序将从数据库中检索数据并创建一个对象集合(列表,数组等等,无论什么效果最好),然后一个名为"Slave"的程序(从多个桌面运行)可以调用一个方法(即,GetNextRecord)来自"Master"以检索集合中的下一条记录.

我希望能够只让一个'Slave'能够一次调用GetNextRecord方法,以避免给多个slave提供相同的记录."Master"将在具有数据库的服务器上运行,而"Slave"将在多台桌面计算机上运行.

有没有人有这样的例子或教程如何做到这一点?

TIA,Brian Enderle

delphi

7
推荐指数
2
解决办法
1685
查看次数

将图片保存为各种文件格式

我有一个例程procedure DrawStuff(ACanvas: TCanvas; const ARect: TRect),它在TCanvas上绘制一个指定的矩形.目前我DrawStuff用PaintBox的画布调用.现在我添加了一个Save as选项,用户可以从各种文件格式(bmp,wmf,jpg,... - 最好尽可能多的TGraphic后代)中选择以保存结果DrawStuff.

绘制到a TMetafile并将其保存为"bla.bmp"或将Assign其保存为a TPicture无法正常工作 - 例如,它会生成扩展名为".bmp" 且不是位图的文件.现在我无法找到一个不涉及特殊套管的解决方案:

  • bmp - 使用TBitmap.Canvas.
  • wmf/emf:使用TMetafileCanvas.
  • 等等

你知道对我有什么想法吗?

delphi canvas image save delphi-2007

7
推荐指数
1
解决办法
7084
查看次数