小编klu*_*udg的帖子

使用Doc-O-Matic(Express)和Delphi

我正在寻找一个生成Delphi源代码文档的工具,我想尝试一下Doc-O-Matic Express(免费).是否有任何指导初学者如何使用Doc-O-Matic Express来记录Delphi源代码(管理doc-o-matic项目,首选docblock样式,完整的docblock语法等)?

delphi documentation-generation

6
推荐指数
1
解决办法
1462
查看次数

RTTI TRttiMethod.Invoke,stdcall和const参数的错误

我有RTTI TRttiMethod.Invoke,stdcall和const参数的问题:

    obj := TClassRecordTest.Create;
    try
      b.a := 10; b.b := 100;

      a.a := 1;  a.b := 2;
      writeln('b.a='+IntToStr(b.a)+' b.b='+IntToStr(b.b));
      writeln;
      writeln('call test1');
      writeln('a.a='+IntToStr(a.a)+' a.b='+IntToStr(a.b));
      r := VToRec(RTTICall(obj, 'Test1', @a, @b));
      writeln('test1 r.a='+IntToStr(r.a)+' r.b='+IntToStr(r.b));

      a.a := 2;  a.b := 3;
      writeln('call test2');
      writeln('a.a='+IntToStr(a.a)+' a.b='+IntToStr(a.b));
      r := VToRec(RTTICall(obj, 'Test2', @a, @b));
      writeln('test3 r.a='+IntToStr(r.a)+' r.b='+IntToStr(r.b));

      a.a := 3;  a.b := 4;
      writeln('call test3');
      writeln('a.a='+IntToStr(a.a)+' a.b='+IntToStr(a.b));
      r := VToRec(RTTICall(obj, 'Test3', @a, @b));
      writeln('test3 r.a='+IntToStr(r.a)+' r.b='+IntToStr(r.b));

      a.a := 4;  a.b := 5;
      writeln('call test4'); …
Run Code Online (Sandbox Code Playgroud)

delphi rtti delphi-xe

6
推荐指数
1
解决办法
1216
查看次数

函数Copy()在Free Pascal中

Delphi允许3个版本的Copy功能:

function CopyTest(const S: string): string;
begin
  Result:= Copy(S, 1, 5);
  Result:= Copy(S, 1);
//  Result:= Copy(S);   //  not allowed for strings, allowed for dyn arrays
end;
Run Code Online (Sandbox Code Playgroud)

FreePascal似乎只编译第一个(3-arg)版本; 对于其他人我有编译时错误

Error: Wrong number of parameters specified for call to "$fpc_ansistr_copy"
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了一些FPC编译器开关或CopyFree Pascal中没有过载?

delphi copy freepascal

6
推荐指数
1
解决办法
4822
查看次数

如何在Delphi中声明类方法的类型?

例如,如何为类过程声明类型

type
  TTest = class
    procedure Proc1;
    class procedure Proc2;
    class procedure Proc3; static;
  end;

  TProc1 = procedure of object;
  TProc2 = ???;
  TProc3 = ???;
Run Code Online (Sandbox Code Playgroud)

delphi methods class

6
推荐指数
1
解决办法
624
查看次数

Pascal编译器需要SecureZeroMemory功能吗?

考虑一下代码:

procedure DoSmthSecret;
var
  Seed: array[0..31] of Byte;

begin
// get random seed
  ..
// use the seed to do something secret
  ..
// erase the seed
  FillChar(Seed, SizeOf(Seed), 0);
end;
Run Code Online (Sandbox Code Playgroud)

代码的问题是:FillChar是编译器内在的,并且编译器可能会"优化它".问题是C/C++编译器所知,请参阅SecureZeroMemory.现代Pascal编译器(Delphi,FPC)可以进行这样的优化,如果可以的话,它们是否提供了与SecureZeroMemory等效的?

delphi pascal freepascal fpc

6
推荐指数
1
解决办法
400
查看次数

同步ReadFile读取的字节数

假设我有 1Mb 文件,文件指针位于文件的开头。我调用同步ReadFile:

ReadFile(Handle, Buffer, 1024, Result, nil);
Run Code Online (Sandbox Code Playgroud)

调用成功,没有出现错误。结果值(读取的字节数)是否可能小于 1024(读取的字节数)?

我认为这对于磁盘文件来说是不可能的,我不确定ReadFile可以访问其他资源。在编写可以使用不同资源的通用代码时,我是否应该考虑上述情况?


为了避免哲学推测,我可以将问题重新表述如下:

同步 ReadFile 执行无错误,并且读取的字节数小于要读取的字节数。我可以确定达到 EOF 吗?

c delphi winapi readfile

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

显示提示

我已经在表单上添加了组件提示.当组件获得焦点时,我想设置标签组件的标题以显示提示.

我添加了一个TApplicationEvents对象并将OnShowHint事件设置为

procedure TImportFrm.ApplicationEvents1ShowHint(var HintStr: string;
  var CanShow: Boolean; var HintInfo: THintInfo);
begin
  HelpLbl.Caption := HintStr;
end;
Run Code Online (Sandbox Code Playgroud)

但是,似乎ShowHint事件仅在鼠标移动时触发.有没有办法在组件获得焦点时触发提示代码,而不必为表单上的每个组件实现OnEnter事件?

delphi vcl delphi-xe2

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

Delphi无边框和无标题应用程序

我愿意使用以下代码在Delphi XE2中无边界和无标题地设计一个应用程序:

  BorderIcons = []
  BorderStyle = bsNone
Run Code Online (Sandbox Code Playgroud)

但问题是右键单击任务栏上的应用程序没有菜单,就像上图中一样.然后我在FormShow事件上尝试了以下代码,但还有另一个问题.在左侧和左侧B侧创建一个边框.代码是:

procedure TForm1.FormShow(Sender: TObject);
var
  r: TRect;
begin
  r := ClientRect;
  OffsetRect(r, 0, GetSystemMetrics(SM_CYCAPTION));
  OffsetRect(r, GetSystemMetrics(SM_CXFRAME), GetSystemMetrics(SM_CYFRAME));
  SetWindowRgn(Handle,
  CreateRectRgn(
  r.Left, r.Top,
  ClientWidth + r.Left, ClientHeight + r.Top), True);

end;
Run Code Online (Sandbox Code Playgroud)

请帮我.

delphi delphi-xe2

5
推荐指数
3
解决办法
4813
查看次数

使用try-except块包装try-finally块之间有什么区别,反之亦然?

Delphi中两种编码模式之间是否存在实际差异:

版本1

try
  try
    {Do something}
  finally
    {Do tidy up}
  end
except
  {Handle exception}
end;
Run Code Online (Sandbox Code Playgroud)

版本2

try
  try
    {Do something}
  except
    {Handle exception}
  end
finally
  {Do tidy up}
end;
Run Code Online (Sandbox Code Playgroud)

delphi exception-handling

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

我可以在Delphi中创建特定接口的通用列表吗?

在C#中,我可以创建一个包含特定接口的通用列表,例如:

myList = List<IMyInterface>;
Run Code Online (Sandbox Code Playgroud)

我可以在Delphi XE3中做同样的事情,如果是这样的话怎么样?

我知道我可以创建一个TInterfaceList来存储接口列表,但它不是强类型的,所以我仍然需要在列表中使用对象时进行转换.

有一种强烈的打字方式吗?

delphi generics interface delphi-xe3

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