我正在使用Win32 CreateProcess函数来执行对外部可执行文件的调用.可执行文件返回一个字符串
有没有办法在调用可执行文件后捕获并查询返回的字符串?如果不这样做,我可能必须将字符串写入可执行文件中的文件,并在调用完成后在调用程序中读取该字符串.这看起来很蹩脚.
是否可以将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中构造函数的一系列问题还有另一个问题.
我有一个具有虚拟构造函数的基类:
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)
哪里TCellPhone和TiPhone后代都有机会进行自己的初始化(为了便于阅读而不包括成员).
但是现在我向一些祖先添加了一个重载的构造函数:
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) “项目->选项->目录/条件”详细信息将存储在哪个文件中?是在build.dat还是project_name.dof中?
我在Delphi 5中构建了许多可执行应用程序,它们通过网络与数据库进行通信.在我的Windows 7 PC和其他PC上,它们在没有任何警告的情况下运行,但在某些客户端PC上,它会发出"未知发布者"警告,这种警告看起来并不专业,可能会导致其他权限问题.
我的问题如下:
谢谢
我想更改,TComboBox以便如果我在其中键入文本或手动设置Text属性,它将触发OnChange事件.
就像现在一样,做ComboBox.Text := 'blah'不会触发OnChange事件,也不会在框中输入.
我尝试创建一个TComboBox后代,我认为这是正确的方法,但我不确定如何更改触发事件的内容.
我想知道如何确定变量是否引用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,但我觉得这种方法不够好.
我有一个在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 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)
任何帮助,将不胜感激.
注意:我无法将匿名方法代码移动到其他代码文件.
我已经查看了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 ×10
delphi-5 ×10
constructor ×1
delphi-xe2 ×1
delphi-xe6 ×1
ole ×1
powerpoint ×1
string ×1
vcl ×1