小编Bri*_*ost的帖子

使用XE2进行远程调试 - 显示字符串

我正在远程调试DElphi XE2(更新#4)和Windows XP目标之间的大型应用程序.PAServer正在目标上运行,应用程序正常工作并在断点处停止(您不会相信这个成就有多么难 - 提示 - 删除您的DPROJ并在XE之前通过任何IDE时再次启动).

我注意到局部变量和监视器的显示以一种奇怪的格式显示我的字符串,而在本地调试时通常会显示"某些字符串"格式.我知道了:

在此输入图像描述

任何人都可以告诉我为什么字符串以这种方式显示?我还得到{NULL}和{}之间的垃圾和未分配的输出变量之间的垃圾.谢谢.

.我看到这种格式表示宽字符串.我在Windows 7上尝试了一个简单的应用程序并获得了以下结果.我的应用程序在一个断点:

在此输入图像描述

显示的本地字符串变量:

在此输入图像描述

注意截断的'Hello'.似乎XE2有时会遇到远程unicode字符串的问题.我的PaServer是版本1.0.2.任何人都可以检查这是最新的吗?'来自更新#4的Twas ......

delphi string debugging remote-debugging delphi-xe2

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

如何使用"使用PowerShell运行"执行PowerShell脚本时在另一个PowerShell脚本中调用函数

我开始使用PowerShell并在'库'文件中创建函数以提高可读性,然后我从'worker'脚本调用它.

function ShowMessage($AValue)
{
  $a = new-object -comobject wscript.shell
  $b = $a.popup( $AValue )
}
Run Code Online (Sandbox Code Playgroud)

在PowerShell IDE中运行'worker'脚本时工作正常,但是当我右键单击worker文件并选择'Run with PowerShell'时,它找不到函数'ShowMessage'.两个文件都在同一个文件夹中.请问这里可能会发生什么?

powershell function

48
推荐指数
2
解决办法
6万
查看次数

如何使用MSBuild和Delphi XE2构建

我使用以下简单示例使用Delphi XE和MSBuild构建项目,该示例在批处理文件中正常工作.Project1是使用'File |创建的空项目 新的| VCL在IDE中构成应用程序:

call "c:\Program Files (x86)\Embarcadero\RAD Studio\8.0\bin\rsvars.bat"
msbuild.exe /target:Build /p:config=Release  "c:\scratch\test\project1.dproj" 
pause
Run Code Online (Sandbox Code Playgroud)

如果我在Delphi XE2中创建了一个新的空项目,请将其保存为project1.dproj(dproj与XE非常不同)并运行以下命令:

call "c:\Program Files (x86)\Embarcadero\RAD Studio\9.0\bin\rsvars.bat"
msbuild.exe /target:Build /p:config=Release  "c:\scratch\test\project1.dproj" 
pause
Run Code Online (Sandbox Code Playgroud)

它给:

Build FAILED.

"c:\scratch\test\project7.dproj" (Build target) (1) ->
  c:\scratch\test\project7.dproj : error MSB4057: The target "Build" does not e
xist in the project.

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.00
Run Code Online (Sandbox Code Playgroud)

我尝试了各种目标名称,包括我在Codegear.Delphi.Targets中找到的东西,但我不知道MSBild.任何人都可以帮助我应该放什么吗?

稍后解决:这是在另一台带有XE2的PC上尝试的,并且正如下面David所建议的那样正常.实际上问题是RSVARS.BAT文件的内容没有正确指定BDS路径.

delphi msbuild delphi-xe2

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

如何改进Delphi框架的使用

我在Delphi中使用了多年的框架,它们是VCL最强大的功能之一,但它们的标准使用似乎有一些风险,例如:

  1. 很容易意外地移动或编辑框架主机窗体上的框架子组件,而没有意识到你正在"调整"框架 - 我知道这不会影响原始框架代码,但它通常不是你想要的.

  2. 使用框架时,您仍然可以使用其子组件进行可视化编辑,即使该框架已有数年之久且不应触及.

所以我开始思考......

  1. 是否有一种"分组"组件的方式,使他们的位置"锁定"?这对完成的表格和框架都很有用.通常其他开发人员将代码返回给我,其中只有表单边界发生了变化,甚至他们也不打算进行任何更改.

  2. 有没有办法将框架及其组件转换为单个Delphi组件?如果是这样,框架内部构件将完全隐藏,其可用性将进一步增加.

我对任何想法感兴趣......

布莱恩.

delphi components tframe

25
推荐指数
4
解决办法
1万
查看次数

在Delphi项目中,我应该如何配置SVN?

在提交到存储库时,我应该告诉Tortoise SVN忽略哪些文件?

特别是我对实用信息感兴趣,例如是否包含*.dproj.2007似乎出现但可能不需要的等文件.

svn delphi tortoisesvn

22
推荐指数
2
解决办法
3332
查看次数

在单个Delphi应用程序中,服务器代码通知多个客户端数据更改的首选方式是什么?

我有一个大的Delphi应用程序,其中包含包含我的数据的核心"服务器"代码.在同一个应用程序"客户端"中,用户可以打开和关闭多个非模态"客户端"表单来检查此数据.数据更改分为两种类型 - 主要(例如,已添加或删除数据等结构更改)和较小的数据更改(例如数据值的更改).现有的开放客户端表单必须更新以在短时间内显示已更改的数据.这不是一个数据库,我的"服务器"使用我自己的数据结构,所以我的解决方案可能错过了正式数据库结构中可用的标准技术.也就是说,我已经多次重复我的解决方案了,我想我会问是否有正式的技术和可能的Delphi组件可以改进或简化我的代码.我即将转向多线程代码,这使得这个问题对我来说更加相关.

我用两种方法:

  1. 时间戳.'server'代码维护从QueryPerformanceCounter获取的Int64值.客户端表单在300ms滴答计时器上检查此值,并在时间戳的副本与服务器的副本不同时自行更新.我想这是我的'拉'解决方案.

  2. 界面通知.'server'代码使用AddClient和RemoveClient方法维护一个来自TInterfaceList的类,该方法注册一个简单的公共客户端通知接口.每个客户端在创建时都会使用此列表进行注册,并在销毁时取消注册.服务器上的数据更改通过此列表触发迭代,调用每个客户端以告知其更改.我想这是我的"推动"解决方案.

我喜欢接口和解决方案2看起来不错,因为它避免了滴答计时器并且很容易调试(虽然取消注册调用可能会出现故障排序的问题).还有潜在的性能影响,因为很可能每秒可能有数千个数据更改,我必须小心使用BeginUpdate/EndUpdate机制将我的许多服务器数据更改转换为一个实际的通知调用.最终,我最终需要某种计时器来将调用聚合成一个显示形式的温和更新.

这两种解决方案都很好用但我在两者之间挣扎.对于一个多线程的解决方案,我确信还有其他一些我一无所知的陷阱.任何意见将不胜感激.我正在使用XE2.

delphi notifications

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

Delphi中的字体平滑

我有理由在Delphi表格上需要一个带有大字体的标签,并注意到它的曲线仍然略带锯齿状.我在MSWord中将它与相同的大小和字体进行了比较,这更加平滑.经过研究,我发现代码可以让我平滑我的字体,但它很乱,我想知道是否有更好的方法?看着VCL的来源,TFont似乎坚持NONANTIALIASED_QUALITY,这是相当令人沮丧的......

谢谢Bri

procedure TForm1.SetFontSmoothing(AFont: TFont);
var
  tagLOGFONT: TLogFont;
begin
  GetObject(
    AFont.Handle,
    SizeOf(TLogFont),
    @tagLOGFONT);
  tagLOGFONT.lfQuality  := ANTIALIASED_QUALITY;
  AFont.Handle := CreateFontIndirect(tagLOGFONT);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  I : integer;
begin
  For I :=0 to ComponentCount-1 do
    If Components[I] is TLabel then
      SetFontSmoothing( TLabel( Components[I] ).Font );
end;
Run Code Online (Sandbox Code Playgroud)

delphi fonts truetype smoothing

20
推荐指数
3
解决办法
7534
查看次数

在Delphi XE2中我可能会遇到什么?

我正在摆弄一个批处理文件来调用MSBuild来构建我的项目.出现问题,因为现在我进入XE2并选择File | 新的| VCL表单应用程序并单击"构建"(或运行)我收到以下即时错误:

Checking project dependencies...
Compiling Project5.dproj (Debug, Win32)
brcc32 command line for "Project5.vrc"
  c:\program files (x86)\embarcadero\rad studio\9.0\bin\cgrc.exe -c65001 "Project5.vrc" -foProject5.res 
[MSBuild Error] The "OutputExt" parameter is not supported by the "DCC" task. Verify the parameter exists on the task, and it is a settable public instance property.
[MSBuild Error] The "DCC" task could not be initialized with its input parameters. 
Failed
Elapsed time: 00:00:00.1
Run Code Online (Sandbox Code Playgroud)

我已经使用'修复'重新安装,再次尝试使用'修改'并检查*.targets文件是否与已知良好的机器完全相同都无济于事.如果我直接使用我的项目*.dproj文件(它是一个空项目)调用MSBuild,我会得到同样的错误.我在哪里看?

delphi msbuild delphi-xe2

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

RemObjects PascalScript与DWS脚本的优缺点是什么?

我打算在我的应用程序中包含一个pascal脚本.它不需要任何Web访问,只需访问我的应用程序中的类.应该快速(编译).我看到有许多脚本可用,有些是解释器,但在编译器中RemObjects pascal脚本Delphi Web脚本(DWS)似乎是强大的并且积极地追求.

请问有人可以提出一个优点吗?谢谢

delphi compiler-construction pascal dwscript

17
推荐指数
3
解决办法
3464
查看次数

Delphi的"环境变量"如$(BDS)如何评估?

我正在为我们的内部库做一些整洁的安装程序(而不是仅打开DPK并单击"安装"并稍后弄乱......)这使我必须了解如何获取各种Delphi变量等作为已知包,注册表RootDir值等.

我看到在Delphi中你可以使用许多变量(例如在搜索路径中),例如$(BDS)等.当我查看我的机器环境变量时,我在系统或当前用户中看不到这些变量.

我的问题是:

  1. 德尔福是否正在做一些内部扩展$(BDS)等的事情?或者我可以以某种方式在外部使用这些(例如在注册表中查找).
  2. 为什么符号$(xxxx)在搜索路径中而不是%xxxx%与envirnment变量一样?谢谢

delphi path environment-variables

15
推荐指数
3
解决办法
2万
查看次数