我想知道这里的几个Delphi用户是如何做单元测试的,如果有的话?是否存在与您发现的IDE集成的任何内容?如果没有,你使用什么工具,你是否拥有或知道示例小工程如何运作?
我忘了提到我正在使用BDS 2006 Pro,虽然我偶尔会使用Delphi 7,当然其他人可能正在使用其他版本.
我在TStringList类中使用分隔符时遇到问题.看一看:
var
s: string;
sl: TStringList;
begin
sl := TStringList.Create;
s := 'Users^foo bar^bar foo^foobar^barfoo';
sl.Delimiter := '^';
sl.DelimitedText := s;
ShowMessage(sl[1]);
end;
Run Code Online (Sandbox Code Playgroud)
sl[1]
应该回来 'foo bar'
sl[1]
回来了 'foo'
看来分隔符现在是'^'
AND' '
有任何想法吗?
我刚遇到一个烦人的问题.突然,Avira AntiVir开始将我软件中的一个可执行文件标记为病毒.
由于几乎所有用户的默认操作都是单击确定,Avira建议将病毒置于隔离区,因此我的大多数用户都在删除此可执行文件.
好吧,让我们不要傲慢,检查一下我是否确实没有受到感染.我将文件发布到http://www.virustotal.com,并且从所有反病毒中只有Avira将其标记为已感染.此外,我用两种不同的抗病毒扫描我的电脑,它很干净.
我已经向我的用户发了一封邮件,说明发生了什么,但这是我支持的开销,我真的不想要.
好的,问题是:有没有办法避免这种行为?除了签署文件之外,我想不出任何其他方式(不知道它是否会解决),但让我们看看你是否有任何创意.
将表单设置为WindowState = wsMaximized
有时会使表单最大化但不会:
长期错误:这是我在2003年首次在Borland新闻组中提出的一个问题:
然后在2006年:
然后在2008年再次:
有人在2012年的Embarcadero论坛上提出这个问题:
现在是时候将18岁的bug移植到Stackoverflow了.也许某人终于想出了一个解决方法.
重现的步骤:
我的帖子包含了六种失败模式,但最简单的是:
删除表单上的a Label
和Edit
a:
为以下内容添加OnEnter
活动TEdit
:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Label1.Font.Style := Label1.Font.Style + [fsBold];
end;
Run Code Online (Sandbox Code Playgroud)并设置表格:
WindowState
到wsMaximizedAutoScroll
为假而bazinga,失败了.
2008年帖子的另一组步骤之一:
- 创建一个新的应用程序和一个表单.
- 在设计时将表单设置为最大化(WindowState = wsMaximized).
- 删除窗体上的ListView控件
在OnShow期间,将20个空项添加到列表视图中:
Run Code Online (Sandbox Code Playgroud)procedure TForm1.FormShow(Sender: TObject); var i: Integer; begin for i := 1 to 20 do ListView1.Items.Add; end;
在设计时将表单的AutoScroll属性设置为false(AutoScroll = False)
当然,我没有追求的是"在n …
当我开始在Delphi 7 IDE中编辑它时,我想自动检出文件.
ClearCase是我的版本控制系统,我真的很讨厌在开始编辑之前签出文件.它总是打破我的思维流程:我正在尝试解决问题,找到我需要更改的地方,尝试编辑它,失败因为文件是只读的,打开clearcase,搜索文件,最后结帐,尝试编辑文件再次失败,因为IDE仍然认为它是只读的,告诉IDE不是readonly.当我最终回到代码时,我忘记了我正在尝试做的事情.
我发现了这个简洁明了的ClearCase IDE集成代码.它可以工作,但使用已弃用的ToolIntf单元.我添加了几个快捷方式.这是它的简化版本(没有尝试编译):
unit clearcase;
interface
uses ToolsApi, ToolIntf;
implementation
uses
Windows, Dialogs, Classes, ExptIntf, Menus, ShellApi, SysUtils;
type
TDelphiClearcase = class
private
FClearcaseMenu,
FDoCheckOutPasDfm,
FDoCheckInPasDfm : TIMenuItemIntf;
procedure ExecCommand(const command: string; path: PChar = nil);
public
destructor Destroy;override;
procedure DoClick(Sender: TIMenuItemIntf);
property ClearcaseMenu: TIMenuItemIntf read FClearcaseMenu write FClearcaseMenu;
property DoCheckOutPasDfm:TIMenuItemIntf write FDoCheckOutPasDfm;
property DoCheckInPasDfm: TIMenuItemIntf write FDoCheckInPasDfm;
end;
var
dcc: TDelphiClearcase = nil;
{ TDelphiClearcase }
destructor TDelphiClearcase.Destroy;
procedure Remove(item: TIMenuItemIntf); …
Run Code Online (Sandbox Code Playgroud) 我们公司有一个已经开发了十多年的软件,因此有一些真正过时的东西.它仍然非常实用,但是我看到了Delphi XE的新功能,它让我想切换.问题是源代码本身超过300mb的.pas文件(总共1gb与组件等).
我们正在使用自定义组件,旧的jvcl和最新的devexpress.
如果我决定从Delphi 7迁移到Delphi XE,我有多难以期待事情发生?
谢谢.
如果我尝试运行Delphi 7,我会收到这条可怕的消息:
发现了Borland许可证信息,但它对Delphi无效.没有这些信息,你无法运行Delphi.单击退出按钮以退出Delphi.
今天早上Delphi运行正常,但是当我试图加载我正在处理的项目时,它很窒息.
我不知道为什么.
我注意到以下现象:
使用Delphi 7构建的可执行文件和部分名称(包括"Update")(例如"UpdateMyApp.exe")会导致UAC显示警告,例如"您是否允许程序对您的计算机进行更改".
这是通过简单的hello world应用程序实现的.在资源管理器中显示该文件会显示覆盖在应用程序图标上的屏蔽符号.
只要重命名exe,屏蔽就会消失,应用程序会在没有警告的情况下启动.
如上所述,这只发生在使用Delphi 7构建并在Windows 7上启动的程序(我假设在Vista上相同),但不是在例如WinXP上.
使用Delphi 2007快速检查表明此问题已消失.
有趣......吓人......
除了重命名文件外,我该怎么做才能防止这种情况发生?
我有一个关于Delphi中位移行为的问题(或者更可能是错误报告)(在Borland Delphi 7中测试过).
目标:使用任意数字向右执行"算术"按位移位.
这意味着必须扩展符号位 - 如果设置了一个数字的最高有效位,则将从左侧填充二进制数,而不是0.
因此,算术右移后的数字"-1"必须保持相同的数字(所有位= 1),但是"逻辑移位"(总是用零填充数字)必须给出最大正整数(最大正有符号整数) ,为了正确)
我只在32位系统上测试过它(Windows); 而且,我需要它以32位整数显式工作.
当源编号存储在变量中时,看起来Delphi中存在带有"shr"的内部错误.
我的示例代码:
program bug;
{$APPTYPE CONSOLE}
var
I:Integer;
C:Cardinal;
begin
I := -1; // we’ll need that later
C := $FFFFFFFF;
Run Code Online (Sandbox Code Playgroud)
(这只是开始).接下来,让我们尝试一些"shr":
Writeln('0) ', -1 shr 1 );
Writeln('1) ', $FFFFFFFF shr 1 );
Run Code Online (Sandbox Code Playgroud)
"-1"是等效于"$ FFFFFFFF"的签名.似乎"shr"行为(算术或逻辑)基于源号是签名还是不签名(整数或基数)的事实.
输出是:
0) -1
1) 2147483647
Run Code Online (Sandbox Code Playgroud)
非常正确.然后我需要尝试手动将这些数字转换为整数或基数:
Writeln('2) ', Integer(-1) shr 1 );
Writeln('3) ', Integer($FFFFFFFF) shr 1 );
Writeln('4) ', Cardinal(-1) shr 1 );
Writeln('5) ', Cardinal($FFFFFFFF) shr 1 ); …
Run Code Online (Sandbox Code Playgroud) 我的申请基于模态表格.主窗体用ShowModal打开一个窗体,这个窗体用ShowModal打开另一个窗体,所以我们有叠加的模态窗体.有时会出现一个问题,当我们以新的形式调用ShowModal时,它隐藏在以前的表单之后,而不是显示在顶部.按下alt + tab后,表单返回到顶部,但这不是一个好的解决方案.你遇到了这个问题,你是如何处理的?
编辑:
我使用的是Delphi 7.
delphi ×10
delphi-7 ×10
antivirus ×1
bit-shift ×1
clearcase ×1
delimiter ×1
delphi-2006 ×1
delphi-2010 ×1
delphi-5 ×1
delphi-xe ×1
executable ×1
ide ×1
integer ×1
tstringlist ×1
uac ×1
unit-testing ×1
vcl ×1