标签: delphi-5

我可以访问从Delphi CreateProcess命令返回的字符串吗?

我正在使用Win32 CreateProcess函数来执行对外部可执行文件的调用.可执行文件返回一个字符串

有没有办法在调用可执行文件后捕获并查询返回的字符串?如果不这样做,我可能必须将字符串写入可执行文件中的文件,并在调用完成后在调用程序中读取该字符串.这看起来很蹩脚.

delphi string createprocess delphi-5

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

在Delphi 5中将TDateTimePicker.Font.Style设置为斜体时出错

是否可以将TDateTimePicker的字体设置为斜体?我在这段代码中这样做

var
  DatEdit : TDateTimePicker;
begin
  //I know Canvas is a stupid name for TPanel
  DatEdit:=TDateTimePicker.Create(Canvas);

  DatEdit.OnEnter := CtrlInputProc;
  DatEdit.OnExit := CtrlExitProc;
  DatEdit.Enabled := false;
  DatEdit.Font.Style := DatEdit.Font.Style + [fsItalic]; //this line creates an exception
  DatEdit.Parent := Canvas;

end;
Run Code Online (Sandbox Code Playgroud)

每次代码执行最后一行时,都会抛出一个带有消息的EInvalidOperation异常:

„Control” has no parent window.
Run Code Online (Sandbox Code Playgroud)

这是Delphi 5的功能,还是我做错了什么?

delphi vcl dynamic-controls delphi-5

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

Delphi:重载的虚拟构造函数后代未被重载调用

关于Delphi中构造函数的一系列问题还有另一个问题.

我有一个具有虚拟构造函数的基类:

TComputer = class(TObject)
public
    constructor Create(Teapot: Integer); virtual;
end;
Run Code Online (Sandbox Code Playgroud)

构造函数是虚拟的,适合有人需要调用的时间

var
   computerClass: class of TComputer;
   computer: TComputer;
begin     
   computer := computerClass.Create(nTeapot);
Run Code Online (Sandbox Code Playgroud)

构造函数overridden位于后代:

TCellPhone = class(TComputer) 
public
   constructor Create(Teapot: Integer); override;
end;

TiPhone = class(TCellPhone ) 
public
   constructor Create(Teapot: Integer); override;
end;
Run Code Online (Sandbox Code Playgroud)

哪里TCellPhoneTiPhone后代都有机会进行自己的初始化(为了便于阅读而不包括成员).

但是现在我向一些祖先添加了一个重载的构造函数:

TCellPhone = class(TComputer) 
public
   constructor Create(Teapot: Integer); override; overload;
   constructor Create(Teapot: Integer; Handle: string); overload;
end;
Run Code Online (Sandbox Code Playgroud)

TCellPhone中的备用构造函数调用另一个虚拟构造函数,因此它始终获得正确的重写行为:

constructor TCellPhone.Create(Teapot: Integer; Handle: string);
begin
   TCellPhone.Create(Teapot); //call sibling virtual …
Run Code Online (Sandbox Code Playgroud)

delphi constructor delphi-5 constructor-chaining

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

Delphi在哪里存储项目的目录和条件定义设置?

“项目->选项->目录/条件”详细信息将存储在哪个文件中?是在build.dat还是project_name.dof中?

delphi delphi-5

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

Delphi 5 Unknown Publisher版本信息

我在Delphi 5中构建了许多可执行应用程序,它们通过网络与数据库进行通信.在我的Windows 7 PC和其他PC上,它们在没有任何警告的情况下运行,但在某些客户端PC上,它会发出"未知发布者"警告,这种警告看起来并不专业,可能会导致其他权限问题.

我的问题如下:

  • 可以在设计时将任何内容添加到应用程序中,例如在版本信息中,以使其成为更受信任的应用程序.这在Delphi5中实际可行吗?
  • 有什么我必须要求Microsoft作为应用程序构建器来帮助他们信任我的应用程序吗?
  • 如果不能解决上述问题,如何在Windows 7中禁用"受信任的发布者"警告?(道歉这不是德尔福问题)

谢谢

delphi delphi-5 partial-trust

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

Delphi - 改变TComboBox的OnChange

我想更改,TComboBox以便如果我在其中键入文本或手动设置Text属性,它将触发OnChange事件.

就像现在一样,做ComboBox.Text := 'blah'不会触发OnChange事件,也不会在框中输入.

我尝试创建一个TComboBox后代,我认为这是正确的方法,但我不确定如何更改触发事件的内容.

delphi delphi-5

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

OLE自动化:如何检查变量是否引用自动化对象

我想知道如何确定变量是否引用OLE自动化对象.

我正在将一些Excel图表导出到Powerpoint.

我有这个代码:

var PptFile: Variant;

....

// PptFile _might_ be initialized:

PptFile:=pptApp.Presentations.Open(pptFilename);

// It depends on whether the export has items which need to be exported to 
// Powerpoint or not

....

// I would like to determine if PptFile does reference an OLE automated object or not
PptFile.SaveAs(excelFileName+'.pptx');
Run Code Online (Sandbox Code Playgroud)

我知道,可以通过放置代码的最后一行(使用saveAs)来完成try...except...end,但我觉得这种方法不够好.

我在读有关VarIsEmpty,VarIsEmptyParam,没有什么,这个问题,但我不知道这件事.

delphi powerpoint ole ole-automation delphi-5

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

与DateSeparator和LongTimeFormat相关的未声明的标识符错误

我有一个在Delphi 5中创建的程序,该程序在Win7和Win8上仍然运行得非常完美.

但是,当试图在XE6(试用版)中运行此代码时,我遇到两个错误,我无法修复.错误是'DateSeparator'和'LongTimeFormat',每个都有错误"未声明的标识符"

代码段如下:

function AccurateTimeStamp:String;
begin
  DateSeparator:='.';
  LongTimeFormat:='hhmmsszzz';
  result:=TimeToStr(Now);
end;
Run Code Online (Sandbox Code Playgroud)

我对Delphi很新,但我很确定"未声明的标识符"意味着该项目在代码之前未被识别.如果是这种情况,我不知道如何做到这一点.也许,自Delphi 5以来,错误与代码格式的变化有关.

delphi delphi-5 delphi-xe6

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

Delphi CompilerVersion指令问题

我有一个库代码文件,在Delphi 5和DelphiXE2之间共享.我试图在代码文件中添加匿名方法功能,但仅适用于DelphiXE2项目(因为Delphi 5不支持匿名方法).我似乎应该可以使用CompilerVersion(注意:我不想将它限制为DelphiXE2,以防我们升级).

{$IF CompilerVersion >= 23}
  {$DEFINE AnonymousAvail}
{$IFEND}
Run Code Online (Sandbox Code Playgroud)

这在XE2中运行良好,但事实证明,Delphi 5不支持$ IF指令.我决定将它包装在$ IFDEF中.这在Delphi 5中运行良好,但XE2似乎也没有定义CompilerVersion,因此AnonymousAvail没有定义.

{$IFDEF CompilerVersion}
  {$IF CompilerVersion >= 23}
    {$DEFINE AnonymousAvail}
  {$IFEND}
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

注意:我无法将匿名方法代码移动到其他代码文件.

delphi compiler-directives delphi-5 delphi-xe2

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

如何在D5中实现VarIsNumeric?

我已经查看了D2009的来源,但我仍然不确定如何在Delphi 5中正确实现VarIsNumeric(Variants)函数(没有TVarType).

我现在正在使用它:

function VarIsNumeric(const V: Variant): Boolean;
begin
  Result := VarType(V) in [varSmallInt, varInteger, varBoolean,
                           varByte,
                           varSingle,
                           varDouble];
end;
Run Code Online (Sandbox Code Playgroud)

它是否正确?

delphi delphi-5

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