构建项目时,有两个地方报告源行计数:
在Delphi 2007中,这两个数字对于我们正在构建的项目是相同的.
在Delphi 2010中,这两个数字截然不同.(1)计数大于100万行或40%.(第二)计数足够接近Delphi 2007计数,以满足正在构建的正确文件,以解释移植到D2010的代码更改.源文件的替代版本在构建环境中根本不存在.
所以问题是:
为什么D2010中的第一和第二行数量如此大不相同,因为它们在D2007中是可以理解的相同?
我正在使用Delphi 2010,我想知道是否有一种方法可以跟踪项目中的代码,而无需跟踪调用包含的VCL.
例如 - 您输入一个断点然后使用Shift+ F7来逐行跟踪.现在你在VCL中调用了一些冗长的过程 - 在我的例子中,它通常是一个Measurement Studio或其他组件,用于绘制一堆I/O,OPC或其他位的doodads.无论如何,发生的事情是调试器跳出活动源文件,打开组件源,并逐行跟踪.通常这是我不关心的数百或数千行代码 - 我只想让它执行并返回到MY项目中的下一个源代码行.
显然你可以通过在外部调用的每个实例周围设置断点来实现这一点,但通常有太多不能使其变得切实可行 - 每次我想要逐步执行一段代码时,我会花一小时设置一百个断点.
是否有设置或工具可以做到这一点?允许用户跟踪项目中的代码,同时静默执行项目外部的代码?
我正在使用Delphi2010 Enterprise Update 4.
当我在IDE中打开我的项目并显示mainform代码时,有2个单元名称以红色下划线.
xxx http://img268.imageshack.us/img268/6475/unitnameunresolved.png.
我已经验证了单位源的路径在Library path和中Browsing path.
令人惊讶的是,当我右键单击该单元并选择时Open file at cursor,它可以工作(即delphi打开正确的单元).
有什么想法吗?
有没有人知道如何在不使用<-np>命令行选项的情况下禁用欢迎页面,它非常烦人并且在每次启动时阻止IDE几秒钟,有人知道我在哪里可以配置它吗?
我有一个Delphi控制台应用程序,最终需要启动两个应用程序之一.
我遇到一些问题让ShellExecute无错误地工作,我认为问题与没有控制台应用程序的句柄有关.
引起我悲伤的一句话是:
ShellExecute(0, 'open', 'someapplication.exe', nil, nil, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
我认为句柄中的0是问题,因为它编译好并在调试器中运行OK,但如果我尝试运行可执行文件,我会得到一个未处理的错误(控制台应用程序认为它已经结束了).
我有一个UTF-8格式的INI文件.
我正在使用Delphi 2010读取INI文件并使用INI文件中的值填充TStringGrid.
var
ctr : Integer;
AppIni : TIniFile;
begin
AppIni := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'test.ini');
for ctr := 1 to StringGrid1.RowCount do begin
StringGrid1.Cells[0,ctr] := AppIni.ReadString('Column1','Row'+IntToStr(ctr),'');
StringGrid1.Cells[1,ctr] := AppIni.ReadString('Column2','Row'+IntToStr(ctr),'');
end;
AppIni.Free;
Run Code Online (Sandbox Code Playgroud)
问题是unicode字符出现在TStringGrid中,显示2个字符,而不是1个unicode字符.
我该如何解决这个问题?
我试图修改我的Delphi 2010代码以在XE7中编译(并希望保留在2010年编译它的能力).因此,在我的mainform的单元中,我添加了条件指令.以下工作在2010年正常
uses
{$IF CompilerVersion >= 24}System.Actions, {$ELSE}Actnlist,{$IFEND}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
Run Code Online (Sandbox Code Playgroud)
但是XE7会自动System.Actions在最后添加一个用于创建一个uses子句,该子句现在已经声明了两次System.Actions(见下文),并给出了一条错误消息[dcc32 Error] MyForm.pas(10): E2004 Identifier redeclared: 'System.Actions'.为什么XE7不接受条件指令中的单位?
uses
{$IF CompilerVersion >= 24}System.Actions, {$ELSE}Actnlist,{$IFEND}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
System.Actions; // <- automatically added
Run Code Online (Sandbox Code Playgroud) 我必须将旧的Delphi3项目升级到Delphi2010.
它使用一个名为DockForm的单元,但我在Delphi2010的任何地方都找不到它.
它作为uDockForm出现在旧的Delphi3安装光盘中,但它也应该在D2010中找到,因为自己的D2010源文件使用它(例如,\ Embarcadero\RAD Studio\7.0\source\ToolsAPI\ToolsApi.pas).
哪里是DockForm.pas或同等D2010?
谢谢
我想构建一个TCP/IP服务器,最多可以使用100个并发客户端,但仍然不知道如何开始.
至少我需要服务器这个:
任何人都可以帮助如何开始,我看了indy样本,但他们没有帮助,也寻找大多数组件,但仍在搜索.
使用Delphi 2010,假设我有一个声明如下的类:
TMyList = TList<TMyObject>
Run Code Online (Sandbox Code Playgroud)
对于这个列表,Delphi为我们提供了一个枚举器,所以我们可以这样写:
var L:TMyList;
E:TMyObject;
begin
for E in L do ;
end;
Run Code Online (Sandbox Code Playgroud)
麻烦的是,我想写这个:
var L:TMyList;
E:TMyObject;
begin
for E in L.GetEnumerator('123') do ;
end;
Run Code Online (Sandbox Code Playgroud)
也就是说,我希望能够使用某些标准为同一列表提供多个枚举器.不幸的是,实现for X in Z需要存在一个函数Z.GetEnumerator,没有参数,返回给定的枚举器!为了解决这个问题,我正在定义一个实现"GetEnumerator"函数的接口,然后我实现了一个实现接口的类,最后我在TMyList上编写了一个返回接口的函数!而且我正在返回一个界面,因为我不想被手动释放非常简单的类所困扰......任何方式,这需要很多打字.这是这样的:
TMyList = class(TList<TMyObject>)
protected
// Simple enumerator; Gets access to the "root" list
TSimpleEnumerator = class
protected
public
constructor Create(aList:TList<TMyObject>; FilterValue:Integer);
function MoveNext:Boolean; // This is where filtering happens
property Current:TTipElement;
end;
// Interface that will create the TSimpleEnumerator. Want this
// to …Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-2010 ×10
ide ×2
console ×1
debugging ×1
delphi-xe7 ×1
enumerator ×1
filter ×1
foreach ×1
line-count ×1
project ×1
shellexecute ×1
tcp ×1
trace ×1