小编Rud*_*uis的帖子

指向(子)方法的功能?

如果你想使用方法的指针作为参数,你需要像这样type的方法function of object工作良好:

type TAcceptor = function(filename:string):boolean of object;
function acceptor(filename:string):boolean; 
begin 
  result := filename <> ''; 
end;
Run Code Online (Sandbox Code Playgroud)

如果你想使用子方法的指针怎么办?它不起作用:

procedure TForm1.Button1Click(Sender:TObject);
  function acceptor(filename:string):boolean of object;
  begin 
    result := filename <> ''; 
  end;
begin
end;
Run Code Online (Sandbox Code Playgroud)

出现错误:; expected but OF found!

问题:是否有子功能指针?我可以施展吗?

delphi pointers delphi-7

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

算术异常:/ by零仅适用于Java中的整数

为什么在将数字除以零时有如此不同的答案:

我的代码:

class Test {
  public static void main(String[] args){

    int a = (int)(3/0.0F);
    System.out.println(a);

    System.out.println(3/0.0F);

    System.out.println(3/0);
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

2147483647
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
Run Code Online (Sandbox Code Playgroud)

每当我将一个数字除以一个整数(byte,short,int,long)时,它就会抛出ArithmeticException,这与使用实数(float,double)完成时不同.为什么?

java floating-point integer casting exception

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

将Javascript代码转换为Delphi

我正在尝试将javascript代码转换为delphi,但我失败了......

这是javascript代码:

 /* generate random progress-id */
        var uuid = "";
        var i;
        for (i = 0; i < 32; i++) {
            uuid += Math.floor(Math.random() * 16).toString(16);
        }
Run Code Online (Sandbox Code Playgroud)

这是我在delphi中的尝试:

function uid :string  ;
var
i :integer;
begin

for I := 0 to 31 do  begin

result := result + inttostr(floor(random * 16));
end;

end;
Run Code Online (Sandbox Code Playgroud)

这是java脚本代码的结果

a638aa8f74e2654c725fd3cdcf2927d3
Run Code Online (Sandbox Code Playgroud)

我在德尔福的知识是有限的,所以我不知道该怎么做..

我希望看到一些帮助,并从中学习.

javascript delphi math

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

Delphi - 声明矩阵const

编辑我的问题.

我会具体的.

我如何声明下面的代码const而不是var?(我无法获得Cube示例)

 var
 Matrix : array of array of string;

 SetLength(Matrix, 8, 8);
 Matrix[0,0]:='A0';Matrix[0,1]:='A1';Matrix[0,2]:='A2';Matrix[0,3]:='A3';Matrix[0,4]:='A4';Matrix[0,5]:='A5';Matrix[0,6]:='A6';Matrix[0,7]:='A7';
 Matrix[1,0]:='B0';Matrix[1,1]:='B1';Matrix[1,2]:='B2';Matrix[1,3]:='B3';Matrix[1,4]:='B4';Matrix[1,5]:='B5';Matrix[1,6]:='B6';Matrix[1,7]:='B7';
 Matrix[2,0]:='C0';Matrix[2,1]:='C1';Matrix[2,2]:='C2';Matrix[2,3]:='C3';Matrix[2,4]:='C4';Matrix[2,5]:='C5';Matrix[2,6]:='C6';Matrix[2,7]:='C7';
 Matrix[3,0]:='D0';Matrix[3,1]:='D1';Matrix[3,2]:='D2';Matrix[3,3]:='D3';Matrix[3,4]:='D4';Matrix[3,5]:='D5';Matrix[3,6]:='D6';Matrix[3,7]:='D7';
 Matrix[4,0]:='E0';Matrix[4,1]:='E1';Matrix[4,2]:='E2';Matrix[4,3]:='E3';Matrix[4,4]:='E4';Matrix[4,5]:='E5';Matrix[4,6]:='E6';Matrix[4,7]:='E7';
 Matrix[5,0]:='F0';Matrix[5,1]:='F1';Matrix[5,2]:='F2';Matrix[5,3]:='F3';Matrix[5,4]:='F4';Matrix[5,5]:='F5';Matrix[5,6]:='F6';Matrix[5,7]:='F7';
 Matrix[6,0]:='G0';Matrix[6,1]:='G1';Matrix[6,2]:='G2';Matrix[6,3]:='G3';Matrix[6,4]:='G4';Matrix[6,5]:='G5';Matrix[6,6]:='G6';Matrix[6,7]:='G7';
 Matrix[7,0]:='H0';Matrix[7,1]:='H1';Matrix[7,2]:='H2';Matrix[7,3]:='H3';Matrix[7,4]:='H4';Matrix[7,5]:='H5';Matrix[7,6]:='H6';Matrix[7,7]:='H7';
Run Code Online (Sandbox Code Playgroud)

delphi

3
推荐指数
2
解决办法
3514
查看次数

使用Delphi在cmd中运行多个命令

我试图cmd从Delphi 使用以应用一些命令。我使用以下代码

ShellExecute(Application.handle, 'runas', 'cmd.exe',
  PChar('/c command to do '), nil, SW_show);
Run Code Online (Sandbox Code Playgroud)

我想在同一执行中运行多个命令

/c command1 command2 command3
Run Code Online (Sandbox Code Playgroud)

我已经制作了一个bat文件来运行一些命令。但是我不喜欢在项目中存储蝙蝠的想法。我可以在一个执行中应用多个命令吗?能做到吗?

delphi delphi-xe8

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

在 pascal 定义中传递参数

我试图用帕斯卡(freepascal)定义一些东西。与在 C++ 中一样,您可以像这样传递变量定义宏:

#define REP(i,k) for(int i=0; i<k; i++)
Run Code Online (Sandbox Code Playgroud)

你怎么能用帕斯卡做到这一点?

我在第一行添加了{$MACRO ON}命令,因此它可以运行正常的定义,而不会出现类似{$define lala:='hello world'}.

但是当我尝试{define lala(i):=i}该程序时出现错误。

如何在 Pascal 定义中传递变量参数?

macros preprocessor pascal freepascal

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

我可以将用Delphi编写的DLL加载到PowerShell中吗?

我可以通过[Reflection.Assembly]::LoadFile()方法直接在Powershell中使用我在Delphi(Delphi 10)中创建的DLL 吗?我正在尝试,但得到错误:

使用"1"参数调用"LoadFile"的异常:"模块应该包含一个程序集清单.

我能够将Delphi DLL包装在我用C#编写的DLL中并以这种方式使用它,但不愿意,因为它意味着为每个更改而不是一个更改编译两个项目.

这是我目前在Delphi DLL中的代码:

library TestDLL;


procedure TestCall(foo: PChar); stdcall;
begin
end;

exports
  TestCall;

begin
end.
Run Code Online (Sandbox Code Playgroud)

delphi dll powershell

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

内置功能构建TSize?

有没有在Delphi 7内置函数返回一个TSize从给定cxcy参数?

一些类似的功能Rect()Point()等...

我知道写我自己很简单(虽然它Size已经是一个别名,TSize所以我不能说出我的功能Size).但我想知道RTL中是否有内置函数.

delphi delphi-7

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

使用实现两个接口的对象的最佳实践是什么?

这可能是我之前问题的延伸.

我已经理解基于接口的变量不能被定义为其原始类型,否则引用计数不能正常用于自动释放.

但是如果一个类实现了两个接口,那么在创建它的实例时应该定义什么类型?

考虑以下代码:

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils, Classes;

type
  ITestInterface = interface(IInvokable)
    ['{A7BDD122-7DC6-4F23-93A2-B686571AB2C8}']
    procedure TestMethod;
  end;

  IAnotherInterface = interface(IInvokable)
    ['{15FEC4A7-E361-41D0-9D52-170AFAD1794B}']
    procedure AnotherMethod;
  end;

  TTestObj = class(TInterfacedObject, ITestInterface, IAnotherInterface)
    constructor Create;
    destructor Destroy; override;
  private
    FData: TStrings;
  public
    procedure TestMethod;
    procedure AnotherMethod;
  end;

{ TTestObj }

constructor TTestObj.Create;
begin
  FData := TStringList.Create;
end;

destructor TTestObj.Destroy;
begin
  Writeln('Destroy');
  FData.Free;

  inherited;
end;

procedure TTestObj.TestMethod;
begin
  FData.Text := 'TestMethod';
  Writeln(FData.Strings[0]);
end;

procedure TTestObj.AnotherMethod;
begin
  FData.Text := 'AnotherMethod'; …
Run Code Online (Sandbox Code Playgroud)

delphi

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

什么是Delphi的第一个版本允许类似双重类型(10)

Delphi Tokyo 64-bit将使用单精度计算一些数学函数,如果使用整数常量调用,例如

{$apptype console}
uses
  system.math;
var
  d: double;
begin
  d := 10;
  writeln(log2(10):20:16, log2(10.0):20:16,log2(d):20:16);
end.
Run Code Online (Sandbox Code Playgroud)

将打印3.3219280242919923 3.3219280948873626 3.3219280948873626.

我被告知在Delphi东京64位刷新非正常数字为零?,我应该使用类型转换double(10)来解决此功能.问题是,从我可用的Delphi版本开始,只有东京允许这种类型转换(IMO,即使文档似乎禁止它,说只允许变体被转换为真实类型).

我知道,XE4(VER250)给出了错误Error: E2089 Invalid typecastdouble(10),但我不知道VER260 .. VER310信息.

那么第一个允许类型转换的Delphi版本double(10)呢?

delphi casting

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