小编Nic*_*ges的帖子

如何判断Delphi变量是否为空字符串?

变种总是很有趣,是吗?

我正在研究D2007中最后一个将其迁移到Delphi XE的遗留应用程序.

在过渡期间,变体已经发生了很大的变化.

这行代码:

if (VarType(Value) = varString) and (Value = '') then 
  Exit;
Run Code Online (Sandbox Code Playgroud)

在D2007中返回True并退出,但在Delphi XE中没有.

我把它改成了这个:

if VarIsStr(Value) and (VarToStr(Value) = '') then
    Exit;
Run Code Online (Sandbox Code Playgroud)

我不相信这是"最好的"方式.Variants单元没有特定的调用来执行此操作,我当然记得这对于过去的人来说是一个问题.但是,搜索显示没有库函数或任何其他可接受的方式.

有"正确"或更好的方式吗?

delphi string delphi-xe variants

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

如何让markdown.js在Delphi的TWebBrowser中将标记文档显示为HTML?

如何让markdown.js在Delphi的TWebBrowser中将标记文档显示为HTML?

给定包含Markdown的字符串的内容,如何让markdown.js将该markdown转换为HTML,并在我的Delphi桌面应用程序中的TWebBrowser组件中显示该HTML?

更新:

按照Wouter的例子(谢谢你,Wouter!),如果我只是这样做:

procedure TForm2.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('file://C:/junk/markdown/lib/markdown.js');
end;
Run Code Online (Sandbox Code Playgroud)

然后我收到一系列警告.首先,从Windows"保护"我的javascript.我批准并运行一切,但最后我得到:

在此输入图像描述

delphi markdown

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

如何确保使用Spring Framework在我的应用程序中包含给定的依赖项?

这将是一个难以描述的问题,但是这里有.

我们正在使用Delphi Spring Framework.(http://code.google.com/p/delphi-spring-framework/)

假设我有UnitA声明由ClassA实现的InterfaceA.

类似地,我有UnitB声明由ClassB实现的InterfaceB.

两者都在其各自的初始化部分中使用Spring Container注册了它们的接口和类.

InterfaceA依赖于InterfaceB,但由于我们使用的是Spring,因此UnitA的uses子句中没有UnitB .换句话说,我们已经完成了我们的工作 - 我们已经将UnitA和UnitB分离,但我们仍然可以让InterfaceA依赖于InterfaceB.

但是,鉴于上述情况,我们需要确保UnitA和UnitB都包含在项目中,以便可以解析依赖关系.

想象一下,现在,我们开始一个新项目.该新项目使用UnitA,但开发人员没有意识到如果要使用UnitA,则还必须在项目中包含UnitB.不会出现编译器错误,因为依赖项是在运行时解决的,而不是编译时.

这就是一个问题:在应用程序部署之前,确保对UnitB的这种依赖性是否已知的正确方法是什么?

我们可以预见复杂应用程序中的情况,尽管进行了全面测试,但是可能很长时间没有执行给定的代码路径,并且在部署之前未发现此缺失的依赖关系.

我们已经实现了一个系统,其中每个接口解析调用都伴随着一个Requires调用,在启动时检查并引发异常,确保我们看到错误.但我们想知道是否有"最佳实践"或标准方法来检测此问题或以其他方式处理此问题.

补充: 这是Java和其他语言的问题吗?

java delphi dependency-injection ioc-container spring4d

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

设计此特定数据库/ SQL问题的最佳方法是什么?

这是一个令我们困惑的棘手的规范化/ SQL /数据库设计问题.我希望我能说得对.

你有一套活动.他们是需要做的事情 - 一个荣耀的TODO名单.任何给定的活动都可以分配给员工.

每项活动也都有活动进行的活动.这些活动是联系人(个人)或客户(业务).然后,每个活动都将有一个联系人或一个将为其开展活动的客户.例如,活动可能是"向Spacely Sprockets(客户)发送感谢卡"或"向Tony Almeida(联系人)发送营销文献".

从那个结构中,我们需要能够查询以查找给定员工必须执行的所有活动,将它们列在一个单独的关系中,就像这样最简单的形式:

-----------------------------------------------------
| Activity | Description    | Recipient of Activity |
-----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

这里的想法是避免为Contact和Customer提供两列,其中一列为null.

我希望我已经正确地描述了这一点,因为这并不像乍看之下那么明显.

所以问题是:数据库的"正确"设计是什么?如何查询它以获取所要求的信息?

sql database-design normalization

6
推荐指数
2
解决办法
288
查看次数

如何从Delphi中的指针获取变量?

我需要能够将裸指针转换为变体.我知道指针指向一个变体,但我似乎无法将它取回.一个直接演员(我几乎认为)失败了:

Result := Variant(FAddress)^
Run Code Online (Sandbox Code Playgroud)

返回编译器错误:[DCC错误] E2089无效的类型转换

我也在搜索variants.pas单元,但没有任何东西跳出来.

显然我错过了一些东西.这样做的方法是什么?

delphi pointers variant

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

Delphi属性需要一个常量参数吗?如果是这样,为什么?

考虑以下(无法编译)代码:

program AttributesTestProgram;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Classes,
  RTTI;

type

  TDisplayTextAttribute = class(TCustomAttribute)
  private
    FDisplayText: string;
  public
    constructor Create(aDisplayText: string);
    property DisplayText: string read FDisplayText write FDisplayText;
  end;

constructor TDisplayTextAttribute.Create(aDisplayText: string);
begin
  FDisplayText := aDisplayText;
end;

function GetFirstName: string;
begin
  Result := 'First Name';
end;


type
  TCustomer = Class(TObject)
  private
    FFirstName: string;
    FLastName: string;
    FStreetAddress: string;
    FZIP: string;
    FState: string;
    FCity: string;
    FPhone: string;
  published
    [TDisplayTextAttribute(GetFirstName)]
    property FirstName: string read FFirstName write FFirstName;
  end;

begin
  // Code that does the …
Run Code Online (Sandbox Code Playgroud)

delphi constants function

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

什么是一些干净,优雅,精心设计,编写良好,熟练的Delphi代码,初级Delphi开发人员应该学习?

我们组织中有许多初级Delphi开发人员,作为Delphi教学过程的一部分,我希望他们能够看到"干净",写得很好,设计精良的Delphi代码.

我要寻找的一些标准包括:

  1. 优秀的班级结构
  2. 很好地使用接口
  3. 不是太复杂或困难,但复杂和困难,足以具有指导性.
  4. 小方法
  5. 代码与单元测试.

一般来说,我正在寻找能让鲍勃·马丁叔叔自豪的代码.

我熟悉许多流行的Delphi开源项目,但我想了解社区的建议和建议.

我会将此问题作为社区维基问题.

delphi coding-style

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

什么取代了弃用的AllocMemSize

我正在维护遗留应用程序,我有以下代码行:

sb.Panels[3].Text:= ' Memory in use: ' +  IntToStr(AllocMemSize);
Run Code Online (Sandbox Code Playgroud)

它给出了以下警告:

[dcc32 Warning] BLOB.pas(8242): W1000 Symbol 'AllocMemSize' is deprecated
Run Code Online (Sandbox Code Playgroud)

实际上,不推荐使用AllocMemSize(来自System.pas):

var
  AllocMemSize: Integer deprecated; {Unsupported}
Run Code Online (Sandbox Code Playgroud)

我的问题是:什么是替代品AllocMemSize?有什么意义吗?还有其他一些更有意义的措施吗?

(我想我可以完全删除调用和输出,但用户显然希望在状态栏中看到此信息)

delphi memory-management

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

鉴于不推荐使用ShortString,限制字符串长度的最佳方法是什么

拥有这样的记录并不罕见:

TAddress = record
  Address: string[50];
  City   : string[20];
  State  : string[2];
  ZIP    : string[5];
end;
Run Code Online (Sandbox Code Playgroud)

拥有硬编码字符串大小以确保字符串大小不会超过为数据分配的数据库字段大小.

但是,鉴于该ShortString类型已被弃用,Delphi开发人员正在做什么来"解决"这个问题?声明记录字段string可以完成工作,但不能保护数据不超过正确的长度.

这里最好的解决方案是什么?

delphi string field

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

WebPack 中的“ngserve”是否会突然失败并出现错误?

当我尝试运行时,我收到以下信息ng serve --open

\n
PS C:\\Code\\atd> ng serve --open\n\xe2\xa0\x8b Generating browser application bundles (phase: setup)...C:\\Code\\atd\\node_modules\\@angular-devkit\\build-webpack\\src\\webpack-dev-server\\index.js:79\n            const address = devServer.server.address();\n                                             ^\n\nTypeError: Cannot read properties of undefined (reading 'address')\n    at C:\\Code\\atd\\node_modules\\@angular-devkit\\build-webpack\\src\\webpack-dev-server\\index.js:79:46\nPS C:\\Code\\atd> \n
Run Code Online (Sandbox Code Playgroud)\n

我用谷歌搜索没有结果。

\n

我已删除 node_modules 并运行npm install.

\n

ng build运行和构建良好。

\n

我很困惑。

\n

有谁知道为什么会突然出现这个错误?

\n

编辑:添加我的 package.json:

\n
{\n  "name": "angular-for-rank-beginners",\n  "version": "0.0.0",\n  "scripts": {\n    "ng": "ng",\n    "start": "ng serve --ssl true --ssl-key /node_modules/browser-sync/lib/server/certs/server.key --ssl-cert /node_modules/browser-sync/lib/server/certs/server.crt",\n    "build": "ng build",\n    "test": "ng test",\n    "lint": "ng lint",\n …
Run Code Online (Sandbox Code Playgroud)

webpack angular

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