对于类的每个setter,我必须实现一些事件逻辑(OnChanging,OnChanged):
procedure TBlock.SetWeightIn(const Value: Double);
var OldValue: Double;
begin
OldValue := FWeightIn;
DoOnChanging(OldValue, Value);
FWeightIn := Value;
DoOnChanged(OldValue, Value);
end;
procedure TBlock.SetWeightOut(const Value: Double);
var OldValue: Double;
begin
OldValue := FWeightOut;
DoOnChanging(OldValue, Value);
FWeightOut := Value;
DoOnChanged(OldValue, Value);
end;
Run Code Online (Sandbox Code Playgroud)
你能否建议一种方法来实现这一点,而不必为每个setter重复所有这些行?
我有以下任务:使用HTTPS和身份验证下载文件.Indy似乎要走了,但由于某种原因它到目前为止还不起作用.我有以下内容:
该站点还需要身份验证,我在URL中包含用户/传递,如下例所示.简而言之,这是代码:
URI := TIdURI.Create('https://test.example.com/');
URI.Username := ParamUserName;
URI.Password := ParamPassword;
HTTP := TIdHTTP.Create(nil);
if URI.Protocol = 'https' then
begin
IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IOHandler.SSLOptions.Method := sslvSSLv3;
HTTP.IOHandler := IOHandler;
end;
HTTP.Get(URI.GetFullURI([ofAuthInfo]), FileStream);
Run Code Online (Sandbox Code Playgroud)
使用此代码,我可以非常快速地获得"读取超时"EIdReadTimeout异常.在浏览器中测试URL可以正常工作.关于什么缺失或我做错了什么的任何想法?
在我们正在开发的Delphi应用程序中,我们有一个相关对象的大结构.这些对象的某些属性具有在运行时计算的值,我正在寻找一种方法来缓存更密集计算的结果.我使用的方法是在第一次计算私有成员时保存值.这是一个简短的例子:
unit Unit1;
interface
type
TMyObject = class
private
FObject1, FObject2: TMyOtherObject;
FMyCalculatedValue: Integer;
function GetMyCalculatedValue: Integer;
public
property MyCalculatedValue: Integer read GetMyCalculatedValue;
end;
implementation
function TMyObject.GetMyCalculatedValue: Integer;
begin
if FMyCalculatedValue = 0 then
begin
FMyCalculatedValue :=
FObject1.OtherCalculatedValue + // This is also calculated
FObject2.OtherValue;
end;
Result := FMyCalculatedValue;
end;
end.
Run Code Online (Sandbox Code Playgroud)
用于计算的对象更改并且应重置和重新计算缓存的值并不罕见.到目前为止,我们通过使用观察者模式解决了这个问题:对象实现OnChange事件,以便其他人可以订阅,在更改和重置缓存值时得到通知.这种方法有效,但有一些缺点:
最后一个问题:你能否提出其他方法来实现缓存的计算值?
我正在评估使用Delphi(ISAPI/CGI/...)编写Web应用程序的可能性.我仍然看不到使用Delphi而不是"经典"Web开发框架的充分理由.
如果您有这方面的经验,请分享您的意见.你会推荐Delphi而不是PHP/Rails/ASP/......吗?你知道用Delphi编写的任何Web应用程序吗?(不是网络服务)
有没有办法在Delphi中分配多行字符串值而不必引用每一行?
编辑(具体问题):我有一些SQL查询,我想在Delphi外面测试.复制查询时,每次添加和替换引号都会产生一些开销.
在访问表中,我有一个"Required"属性设置为"True"的列.我需要一个查询,将其更改为"False".我尝试了以下但没有成功:
ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30) NULL;
Run Code Online (Sandbox Code Playgroud) 我正在使用IdFTP(Indy 10)组件从远程位置下载一些文件(zip和txt).在获取每个文件之前,我将TransferType设置为二进制.
IdFTP.TransferType := ftBinary;
IdFTP.Get(ASource, ADest, AOverwrite);
Run Code Online (Sandbox Code Playgroud)
我希望可以使用二进制模式下载文本和二进制文件.但是,正确下载zip文件时,看起来文本文件内容会混乱.如果我将TransferType设置为ASCII文本文件,它将按预期工作.如何检测为给定文件设置的TransferType?有共同点或自动设置吗?