我正在尝试在Delphi 2007中编写一个使用ActiveX库的类.该类将捕获ActiveX库必须公开其自身事件的事件,该事件将一些信息添加到ActiveX库的事件中.
最重要的是,当我将自己的过程分配给我想要使用的ActiveX库的事件时,我收到一个错误:
E2009 Incompatible types: 'Parameter lists differ'
Run Code Online (Sandbox Code Playgroud)
我确定参数列表是相同的(相同数量的参数和相同的类型)所以我在想我会以错误的方式去做.
任何建议或有人可以发布我正在尝试做的一些示例代码?
我需要有关TFieldDef问题的建议.我需要在名为Description的TFieldDef中添加一个额外的字符串属性.我想在迭代TFieldDefs集合时看到该属性.如何在Delphi 2007中做到这一点?
谢谢你的时间.
我在一个存储为字符串的对象中有一个名为HistoryText的属性.我想显示网格中的所有行.我应该能够删除和编辑网格中的行.格式为:
16.5.2003-$-12:09-$-anna-$-Organization created
2.6.2005-$-13:03-$-jimmy-$-Organization edited
19.12.2005-$-13:33-$-madeleine-$-Organization edited
Run Code Online (Sandbox Code Playgroud)
因此每行有4个字段,日期,时间,用户和消息,分隔符字符串为' - $ - '.由于分隔符是字符串而不是char,因此无法将其分配给stringlists定界符属性.
我有一个例程将字符串提取到Stringlist:
procedure ParseDelimited(const aStringList: TStringList; const aOrgList, aDelimiter: string);
var
vDelimiterPos : integer;
vPartialStr : string;
vRemaingTxt : string;
vDelimiterLength : integer;
begin
vDelimiterLength := Length(aDelimiter);
if (AnsiRightStr(aOrgList, Length(aDelimiter)) = aDelimiter) then
vRemaingTxt := aOrgList
else
vRemaingTxt := aOrgList + aDelimiter;
aStringList.BeginUpdate;
aStringList.Clear;
try
while Length(vRemaingTxt) > 0 do
begin
vDelimiterPos := Pos(aDelimiter, vRemaingTxt);
vPartialStr := Copy(vRemaingTxt,0,vDelimiterPos-1);
aStringList.Add(vPartialStr);
vRemaingTxt := Copy(vRemaingTxt,vDelimiterPos+vDelimiterLength,MaxInt);
end;
finally
aStringList.EndUpdate;
end;
end;
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常.我的问题是将StringList中的更改同步回原始的String属性?这个分隔符有很多历史数据,所以我认为将它改为TChar是一个现实的选择.
更新: …
场景:
所以基本上我完全禁用了调试.有谁知道我怎么能回来?
我有一个遗留的delphi 2007应用程序,通过TurboPower Internet Professional 1.15(tpipro)发送电子邮件警报.我最近重新访问了该应用程序,发现由于大多数电子邮件服务器的TLS/SSL要求,电子邮件发送不再有效.现在我的问题是从这里开始.
我有Delphi XE2,但我真的不想花时间更新我的应用程序来处理这个ide.它有许多库依赖项等等.
是否有可以在Delphi 2007上运行的最新第三方电子邮件客户端?或者也许是可以使用的.dll?
在使用默认内置"组件流系统"的特定方式中,我发现如果属性的值等于默认值,则不会写入属性的值.
我们考虑以下方案:
您使用WriteComponent()和ReadComponent()来保存组件的特定状态.我们将此状态称为预设.该组件包含具有setter的各种Real类型属性.
我们知道如果属性等于其默认值,则预设将不包括该值.
所以我们的组件
最后在重新加载预设后,AFLoat仍然等于0.101,而我们期望它的值为0.0.
错误的起源很明显,属性的默认值永远不会写在组件流中.所以在第2步:该属性没有写入,然后在第4步它不被读取...相当恼人不是它!
有没有办法强制将属性的默认值写入组件流?实际上我对Real-typed属性有一个自制的修复,但我想知道是否有一个众所周知的方法来克服这个问题.
我的自定义修复是在调用ReadComponent ()之前使用TypInfos将Real-typed属性重置为0
Procedure ResetFloatToNull(Const AnObject: TObject; Recursive: Boolean);
Var
i,j: Integer;
LList: PPropList;
Begin
j := GetPropList( AnObject, LList);
If j > 0 Then For i:= 0 To j-1 Do
Case LList^[i].PropType^.Kind Of
// floats with the object scope
tkFloat: SetFloatProp(AnObject,LList^[i].Name,0);
// floats with a subobject …Run Code Online (Sandbox Code Playgroud) 每次我尝试访问文档的根时,以下代码都会抛出"InvalidPointer"异常XMLDocument.DocumentElement;.
begin
XMLDocument := TXMLDocument.Create(nil); // nil since we don't need an owner
AStream := TStream.Create; // stream for output as string
XMLDocument.loadFromXML(xml);// load string
if NOT (XMLDocument.IsEmptyDoc) then
begin
XMLDocument.Active := true; // actually automatically done by 'loadFromXML'
// get document root
HeadNode := XMLDocument.DocumentElement;
// add <id>-element, set ID as text
idNode := HeadNode.AddChild(XML_ID_PLAIN);
idNode.Text := id;
// ...
end;
end;
Run Code Online (Sandbox Code Playgroud)
传递给的字符串"xml" loadFromXML(string)是有效的XML,但XMLDocument的属性"XML"和"DOMDocument"始终是nil,即使对象本身和它的"IsEmptyDoc"属性都不是.德尔福版本仍然是2007年.
有谁知道是什么原因引起的?提前致谢.
我有一个应用程序("服务器"),它每秒更新一个内存中的数据块 - 大约100k字节.
在同一网络上的其他工作站上运行的"客户端"应用程序有1到4个其他实例,这些实例需要每秒读取相同的100k图像.
到目前为止,这已经通过将图像写入服务器上的文件并让客户端通过网络从该文件读取来实现.多年来一直没有问题,但最近(与转向基于Windows 8的硬件一致),它产生了一个问题,即除了一个节点之外,所有节点都无法访问该文件.退出在此节点上运行的客户端应用程序将释放该文件,然后再次向所有人访问该文件.
我仍然对这个锁定的原因感到困惑,但我想知道它是否可能是这里讨论的机制,文件因网络故障而未关闭.我认为客户端通过TCP/IP请求数据会避免这种情况.
除了客户端无法连接或读取数据之外,不需要进行任何握手 - 服务器只需要处理业务并通过抓取数据并发送数据来响应请求.然而,我对于实现这一目标的最佳架构非常朦胧.TidTCPClient和TidTCPServer会削减吗?我假设客户端会在一个线程中请求数据,但这是否意味着服务器需要连续运行一个线程来响应请求?
基本上,我使用Chromium来显示一个我无法控制的网站.当用户点击特定按钮时,发送XHR请求; 我希望能够找到答案.所以,假设请求发送A,服务器回复B; 我希望能够阅读B.我怎么能这样做?
delphi ×10
delphi-2007 ×10
collections ×1
email ×1
indy10 ×1
paste ×1
root ×1
tcp ×1
tstringlist ×1
txmldocument ×1
xml ×1