我必须将旧的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 2010使用远程调试的问题.我没有取得任何成功,并决定发布一个简单的逐步测试技术,可能突出我做错了什么.这对我来说真的很重要 - 我从V1.0开始就使用Delphi并以此为生.像这样被困住是一种痛苦,它使我保持在Delphi 7上.
无论如何,这里去了.
确保Delphi 2010具有更新4和5.
启动Delphi 2010,然后启动File | 新的| VCL表格应用程序.在表单上放一个按钮,在按钮OnClick事件中放入'ShowMessage('hello').将项目及其单位保存在本地文件夹"C:\ scratch"中.构建项目,运行它,单击按钮,出现'hello',一切正常.
在联网的PC(194.168.1.64)上,创建一个新文件夹"c:\ DebugTest"并与R/W访问共享.
在194.168.1.64上,从Embarcadero网站(RemoteDebugger_upd2.exe)上的最新下载安装远程调试器.点击rmtdbg140.exe即可运行.接受来自防火墙的"解除阻止"消息.
使用Output directory =\192.168.1.64\DebugTest和unit output directory = c:\ scratch编辑DEBUG构建配置编译器设置 - 请参阅

编辑链接设置以设置Debug Information = True,包括远程调试符号= True.看到
将编译设置保留为默认值.看到
做一个完整的构建.相关项目exe'project2.exe'和'project2.rsm'出现在远程文件夹\ 192.168.1.64\DebugTest中.IDE中的Unit2中可以看到蓝点.
在"ShowMessage"行(按钮OnClick事件)上设置断点.
使用'运行'| "加载进程"使用远程路径= c:\ DebugTest\Project2.exe,远程主机= 192.168.1.64和工作目录= c:\ DebugTest参见
点击"加载".可见断点立即被禁用,项目开始运行并打开CPU窗口并停止.按f9导致exe在远程机器上完全运行,按钮工作,你只是无法调试它.
我尝试了各种"明显"的东西,比如防火墙关闭,但都无济于事.某个善良的人可以提出进一步的想法
非常感谢.
我正在尝试为我制作的自定义组件制作一个包.它基于几个库,包括Graphics32,GraphicEx和CCR.Exif.
我创建了一个Package项目,编写了包含其Register寄存程序的单元,添加了一些额外的引用,Delphi通知我有关requires部分(包括dbrtl.dcp,inet.dcp,soaprtl.dcp,vclimg.dcp,xmlrtl.dcp和dclGraphicEx140). dcp)并在contains部分添加了许多单元,以避免隐式发生有关它的警告.该项目编译并可以在我自己的机器上安装和使用而不会出现问题.但是,当我想在另一台机器上安装它时,麻烦就开始了.最后,我不得不复制我使用的所有第三方组件的所有DCU,以及来自GraphicEx的DCP和BPL,我必须安装它.
提供大量文件是一个无赖,但可以克服,但不得不安装其他软件包是不行的.我可以通过在包含部分中放置更多单元来摆脱DCP和BPL ,但这导致我自己的机器上实际安装了GraphicEx的错误消息.这对我来说很困惑,因为有了Graphics32就不会发生这样的事了......
无论如何,我如何将我的分配保持在最低限度并避免这种情况?我希望我团队中的其他开发人员能够使用该软件包,而不必担心我用它来构建它.首先,不能将所有第三方单元编译到我自己的DCU中吗?
在启用了主题的Delphi 2010应用程序中,我在一个带有clMoneyGreen背景的表单中有两个TPageControl(一个在另一个内):

外部页面控件正确地使用父组件的颜色绘制其背景,然而内部页面控件使用clBtnFace(图像中的红色省略号)而不是其父控件(TTabSheet)的白色绘制其背景.有没有办法解决这个问题,而无需将页面控件返回到其Windows经典外观(丢失Windows主题)?
我在Google和Stack Overflow中找到的所有修复都涉及OwnerDraw,这使得页面控件失去了主题.
我尝试使用一种方法来创建从TPageControl继承的新页面控件组件来处理WM_ERASEBKGND窗口消息:
procedure TMyPageControl.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin
if Parent is TCustomPageControl then
begin
Brush.Color := clWhite;
Windows.FillRect(Msg.dc, ClientRect, Brush.Handle);
Msg.Result := 1;
end
else
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
它描绘了背景白色,但在WM_ERASEBKGND(我猜测TWinControl的WM_PAINT方法)之后调用的其他一些方法在白色背景上重新绘制灰色.
注意:我正在研究这个,因为我正在从Delphi 7移植的大型应用程序上实现主题,这就是我试图通过派生组件解决这个问题的原因:我可以轻松搜索和替换所有207 TPageControl事件与我的新课程,但在其中一些面板后面放置需要更多时间.
我构建了类系统
TTableSpec=class(Tobject)
private
FName : string;
FDescription : string;
FCan_add : Boolean;
FCan_edit : Boolean;
FCan_delete : Boolean;
FFields : array[1..100] of TFieldSpec;
public
property Name: String read FName;
property Description: String read FDescription;
property Can_add : Boolean read FCan_add;
property Can_edit : Boolean read FCan_edit;
property Can_delete : Boolean read FCan_delete;
property Fields : array read FFields;
end;
Run Code Online (Sandbox Code Playgroud)
因此,在TableSpec中,Fields属性应该是字段列表(我使用TFieldSpec数组).如何组织字段列表(使用或不使用数组)作为编译的结果我收到错误
[Error] Objects.pas(97): Identifier expected but 'ARRAY' found
[Error] Objects.pas(97): READ or WRITE clause expected, but identifier 'FFields' found
[Error] Objects.pas(98): …Run Code Online (Sandbox Code Playgroud) 我有遗留代码(我没写它)总是包含编码属性,但重新编译到D2010,TXMLDocument不再包含编码.由于XML数据在标记和数据上都有重音字符,因此TXMLDocument.LoadFromFile只会抛出EDOMParseErros,表示在文件中找到了无效字符.相关代码:
Doc := TXMLDocument.Create(nil);
try
Doc.Active := True;
Doc.Encoding := XMLEncoding;
RootNode := Doc.CreateElement('Test', '');
Doc.DocumentElement := RootNode;
<snip>
//Result := Doc.XMl.Text;
Doc.SaveToXML(Result); // Both lines gives the same result
Run Code Online (Sandbox Code Playgroud)
在旧版本的Delphi中,生成以下行:
<?xml version="1.0" encoding="ISO-8859-1"?>
Run Code Online (Sandbox Code Playgroud)
在D2010上,生成:
<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)
如果我手动更改线路,所有工作都像过去几年一直工作.
更新:XMLEncoding是一个常量,定义如下
XMLEncoding = 'ISO-8859-1';
Run Code Online (Sandbox Code Playgroud) 标题是相当自我解释的.每当我在Delphi 2010中进行构建时,如果之后我改变的是Run - > Parameters下的run参数,Delphi坚持重建我的应用程序.在我用过的任何其他语言/ IDE中,都不会发生这种情况.如果不是因为每次构建需要大约一分钟的事实,这不会是一个大问题.
关于我如何做的任何想法,以防止它这样做?
谢谢, - 大卫
我有我的自定义类扩展TEdit:
TMyTextEdit = class (TEdit)
private
fFocusNextOnEnter: Boolean;
public
procedure KeyUp(var Key: Word; Shift :TShiftState); override;
published
property FocusNextOnExnter: Boolean read fFocusNextOnEnter
write fFocusNextOnEnter default false;
end;
Run Code Online (Sandbox Code Playgroud)
在KeyUp程序中我做:
procedure TMyTextEdit.KeyUp(var Key: Word; Shift: TShiftState);
begin
inherited;
if FocusNextOnExnter then
if Key = VK_RETURN then
SelectNext(Self as TWinControl, True, false);
end;
Run Code Online (Sandbox Code Playgroud)
但它没有将焦点转移到下一个控制.我试过了
if Key = VK_RETURN then
Key := VK_TAB;
Run Code Online (Sandbox Code Playgroud)
但它也没有用.我错过了什么?
delphi ×10
delphi-2010 ×10
breakpoints ×1
delphi-7 ×1
delphi-xe2 ×1
encoding ×1
enumerator ×1
filter ×1
foreach ×1
graphicex ×1
oop ×1
tcp ×1
txmldocument ×1
vcl ×1
xml ×1