变种总是很有趣,是吗?
我正在研究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单元没有特定的调用来执行此操作,我当然记得这对于过去的人来说是一个问题.但是,搜索显示没有库函数或任何其他可接受的方式.
有"正确"或更好的方式吗?
如何让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 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和其他语言的问题吗?
这是一个令我们困惑的棘手的规范化/ SQL /数据库设计问题.我希望我能说得对.
你有一套活动.他们是需要做的事情 - 一个荣耀的TODO名单.任何给定的活动都可以分配给员工.
每项活动也都有活动进行的活动.这些活动是联系人(个人)或客户(业务).然后,每个活动都将有一个联系人或一个将为其开展活动的客户.例如,活动可能是"向Spacely Sprockets(客户)发送感谢卡"或"向Tony Almeida(联系人)发送营销文献".
从那个结构中,我们需要能够查询以查找给定员工必须执行的所有活动,将它们列在一个单独的关系中,就像这样最简单的形式:
-----------------------------------------------------
| Activity | Description | Recipient of Activity |
-----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
这里的想法是避免为Contact和Customer提供两列,其中一列为null.
我希望我已经正确地描述了这一点,因为这并不像乍看之下那么明显.
所以问题是:数据库的"正确"设计是什么?如何查询它以获取所要求的信息?
我需要能够将裸指针转换为变体.我知道指针指向一个变体,但我似乎无法将它取回.一个直接演员(我几乎认为)失败了:
Result := Variant(FAddress)^
Run Code Online (Sandbox Code Playgroud)
返回编译器错误:[DCC错误] E2089无效的类型转换
我也在搜索variants.pas单元,但没有任何东西跳出来.
显然我错过了一些东西.这样做的方法是什么?
考虑以下(无法编译)代码:
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开发人员,作为Delphi教学过程的一部分,我希望他们能够看到"干净",写得很好,设计精良的Delphi代码.
我要寻找的一些标准包括:
一般来说,我正在寻找能让鲍勃·马丁叔叔自豪的代码.
我熟悉许多流行的Delphi开源项目,但我想了解社区的建议和建议.
我会将此问题作为社区维基问题.
我正在维护遗留应用程序,我有以下代码行:
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?有什么意义吗?还有其他一些更有意义的措施吗?
(我想我可以完全删除调用和输出,但用户显然希望在状态栏中看到此信息)
拥有这样的记录并不罕见:
TAddress = record
Address: string[50];
City : string[20];
State : string[2];
ZIP : string[5];
end;
Run Code Online (Sandbox Code Playgroud)
拥有硬编码字符串大小以确保字符串大小不会超过为数据分配的数据库字段大小.
但是,鉴于该ShortString类型已被弃用,Delphi开发人员正在做什么来"解决"这个问题?声明记录字段string可以完成工作,但不能保护数据不超过正确的长度.
这里最好的解决方案是什么?
当我尝试运行时,我收到以下信息ng serve --open
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> \nRun Code Online (Sandbox Code Playgroud)\n我用谷歌搜索没有结果。
\n我已删除 node_modules 并运行npm install.
ng build运行和构建良好。
我很困惑。
\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)