小编Set*_*Net的帖子

AsyncPro和64bit

我正在运行Delphi XE8并安装了GetIt AsyncPro for VCL 1.0.当我编译32位应用程序但64位失败时,它工作正常.失败的是:

[dcc64 Error] OoMisc.pas(2771): E2065 Unsatisfied forward or external declaration: 'Trim'
Run Code Online (Sandbox Code Playgroud)

当我打开OoMisc.pas时看到:

{$IFNDEF Win32}
function Trim(const S : string) : string;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

Trim功能似乎没有定义.该单位确实具有SysUtils其使用条款.

delphi win64

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

如何测试某个XML节点是否存在?

测试可选节点存在的正确方法是什么?剪下我的XML是:

<Antenna >
  <Mount Model="text" Manufacture="text">
   <BirdBathMount/>
  </Mount>
</Antenna>
Run Code Online (Sandbox Code Playgroud)

但它也可能是:

<Antenna >
  <Mount Model="text" Manufacture="text">
   <AzEl/>
  </Mount>
</Antenna>
Run Code Online (Sandbox Code Playgroud)

Antenna的孩子可能是BirdBath或者AzEl,但不是两个......

在Delphi XE中,我尝试过:

 if (MountNode.ChildNodes.Nodes['AzEl'] <> unassigned then //Does not work
 if (MountNode.ChildNodes['BirdBathMount'].NodeValue <> null) then // Does not work
 if (MountNode.BirdBathMount.NodeValue <> null) then  // Does not work
Run Code Online (Sandbox Code Playgroud)

我使用XMLSpy来创建模式和示例XML,并且它们正确解析.我使用Delphi XE来创建绑定,它适用于大多数其他组合.

必须有一个我忽略的简单答案 - 但是什么?谢谢......吉姆

xml delphi

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

Delphi XE8和致命错误F2039

随着XE8更新1,Win 7 64位和单个组件添加到一个空的文件夹我得到:错误:[dcc32致命错误] F2039无法创建输出文件.\ Win32\Debug\MountTest.

测试将在第一次编译并运行正常,但XE8必须关闭并重新启动才能再次编译.该组件是Mitov Software的仪表.组件供应商说这是一个已知的bug,没有修复.如果是这样,它的一个showstopper和项目结束对我来说.这真的是Delphi的终结吗?

我希望有人能以某种方式将这只兔子拉出帽子.

这就是我为隔离问题所做的工作.

  1. 启动失败的应用程序(不会编译2ed时间)
  2. 删除所有使用的外部装置
  3. 删除对这些单位的引用
  4. 删除"使用"子句中的所有引用
  5. 评论代码,直到它编译

它应该在每次运行时编译(没问题).现在向项目添加一个空白表单.只要添加它就不要对表单做任何事情.将其添加到您的uses子句中.

它应该在每次点击Run时编译.现在打开空白表单并简单地触摸它以便需要重新编译.

当您运行应用程序时,它会在您第二次运行它时失败.

请注意,只需添加表单并"触摸"即可.无需代码.

这个问题对我的代码没有问题 - 它不可能.它是UI中的一个错误 - 必须是.

delphi delphi-xe8

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

如何在XML文档中创建xmlns:xsi和xsd信息

我有一个Delphi XE应用程序,它读取经过验证的XML文件,修改它然后保存它.可以验证保存的版本.我使用SML Spy来创建文件并对其进行验证.

现在我需要在内存中创建一个文档并保存它.问题是我无法弄清楚如何为文档生成xmlns和xsd信息属性,以便可以验证它.

xml delphi delphi-xe

4
推荐指数
1
解决办法
4543
查看次数

使用具有相同名称的表单的正确方法

我有一个项目有两个具有相同名称的表单.我需要使用其中一个.我假设我可以使用IFDEF来区分它们,但我发现在没有编译器抱怨的情况下我无法将它们都添加到项目中.我的用法子句看起来像这样.

uses
uFileManager, uMount, uSkyMap, uAntenna,
{$IFDEF SDR}
 uSDR,
{$ENDIF}
{$IFDEF R7000Serial}
 uR7000,
{$ENDIF}
uDatabase;

{$R *.dfm}
Run Code Online (Sandbox Code Playgroud)

'uSDR'和'uR7000'单元都有一个名为'Receiver'的表格.当我尝试添加'uR7000'单元时,我得到的项目是:"该项目已包含名为Receiver的表单或模块"

如何将两个单元添加到项目中?

delphi delphi-10-seattle

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

在Delphi中实现DLL回调

我正在尝试连接到软件定义的接收器 DLL,该 DLL 需要提供回调以传送接收到的 I/Q 数据。

我可以很好地调用 DLL,但我不知道如何编写回调代码。

这是主模块的一部分:

uses
  uReceiverHackRFDLLWrapper;

procedure TForm1.btnIDClick(Sender: TObject);
var
  strptr: PAnsiChar;
begin
  hackrf_board_init();
  strptr := hackrf_board_id_name(0);
  lblName.Caption := 'Name: ' + strptr;
end;
Run Code Online (Sandbox Code Playgroud)

这是 DLL 的包装器:

unit uReceiverHackRFDLLWrapper;

interface

uses Windows, uSETITypes, sysutils;

{$MINENUMSIZE 4}

type
  // Trtlsdr_read_async_cb_t = procedure(buf: PAnsiChar; len: UINT32; ctx: Pointer);
  // [UnmanagedFunctionPointer(CallingConvention.StdCall)]
  // public unsafe delegate int hackrf_sample_block_cb_fn(hackrf_transfer* ptr); /* Return 0 if OK or -1 if error to stop */
  THackrf_sample__block_cb_fn = function(var hackrf_transfer: Pointer): integer;

function hackrf_board_id_name(index: …
Run Code Online (Sandbox Code Playgroud)

delphi dll callback delphi-10-seattle

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

Excel INT到Delphi的翻译

我正在尝试将Excel工作表翻译成Delphi并偶然发现了Excel INT.Excel帮助说INT的向下舍入(向负无穷大).Excel单元格是:

C13-(24*INT(C13/24))
Run Code Online (Sandbox Code Playgroud)

其中C13初始化为-465.9862462并计算为14.01375378

我能提出的最好的Delphi是:

C13 := -465.9862462; 
RoundMode := GetRoundMode;// Save current mode
SetRoundMode(rmDown);
C13 := C13 - (24 * (Round(C13 / 24)));
SetRoundMode(RoundMode);// Restore mode
Run Code Online (Sandbox Code Playgroud)

这会产生正确的答案,但有更好的方法吗?

delphi excel

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

该语句中“&lt;”和“&gt;”的用途是什么

我遇到了这段代码,但无法理解其目的是什么:

  TDfmPropertyList = class(TobjectList<TDfmProperty>)
Run Code Online (Sandbox Code Playgroud)

它告诉我什么?

delphi class

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

如何检查Delphi窗体是否存在

我正在使用字符串创建可用表单,但我无法弄清楚如何测试表单是否已创建。我只想要每个表单的一个实例。

Procedure TMainForm.CreateFormFromName(const FormName:String);
var
 fc:TFormClass;
 f:Tform
begin
  fc := TFormClass(FindClass(FormName));
  f := fc.Create(Application);
  f.show
end;
 
Procedure TMainForm.FormCreate(Sender:TObject);
begin
  RegisterClass(TfrmTest);
end;
Run Code Online (Sandbox Code Playgroud)

我可以向 CreateForm 发送一个字符串,它会创建表单。但是我如何阻止第二次创建相同表单的尝试呢?

delphi

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

发送和恢复布尔和整数的窗口消息

如何发布包含布尔值和整数的Windows消息.我知道如何发布和恢复字符串.这是我的字符串代码.

procedure TForm5.Button1Click(Sender: TObject);
var
   LParam: string;
   WParam: string;
   pLParam: pChar;
   pWParam: pChar;
begin
   Memo.Clear;
   LParam := 'Now is the time for all good men...';
   Length(LParam);
   GetMem(pLParam, (Length(LParam) + 1) * SizeOf(Char));
   Move(LParam[1], pLParam^, (Length(LParam) + 1) * SizeOf(Char));

   WParam := 'This is the WParam. ';
   Length(WParam);
   GetMem(pWParam, (Length(WParam) + 1) * SizeOf(Char));
   Move(WParam[1], pWParam^, (Length(WParam) + 1) * SizeOf(Char));

   PostMessage(Handle, WM_SETPAUSE_MESSAGE, Integer(pWParam),Integer(pLParam));
end;
Run Code Online (Sandbox Code Playgroud)

这样可以恢复文字......

procedure TForm5.WMsetPause(var MESSAGE: TMessage) { message WM_SETPAUSE_MESSAGE };
var
 pLParam: pChar;
 pWParam: pChar;
begin
 try …
Run Code Online (Sandbox Code Playgroud)

delphi windows-messages

0
推荐指数
1
解决办法
534
查看次数