小编Pet*_*háč的帖子

D2009 char数组的问题 - 如何"优雅地"修复我的代码?

通过我的一些旧的Delphi项目并将它们升级到D2009,因为我发现这个版本对所有以前的版本都是一个很大的改进(Generics.Collections - 哇!;)),我遇到了各种各样的问题.我设法解决了这个问题,但解决方案看起来并不像我认为的那样优雅.(注意,我现在已经有三年没有编写Delphi代码了,甚至当时它还是非常业余的黑客,而不是深入了解正在发生的事情).

我的代码将有一个TFileStream并从中读取.这些文件之前由我的旧Delphi应用程序编写,文件中的前三个字符将是CTR,以将文件类型识别为有效.读者会将前三个字节读入一个字符数组(现在是问题,现在sizeof(char)是2个字节),然后将此数组视为字符串,看它是否为"CTR".

var ...
buffer: array[0..2] of char;
begin
...
InStream.read(buffer, 3);
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end;
...
Run Code Online (Sandbox Code Playgroud)

这将编译并用它工作,但现在缓冲区实际上是6个字节长,因此不等于"点击率" 不断.

我通过更改缓冲区来修复此问题,array[0..2] of byte并引入了一些更多的局部变量来执行以下操作:

for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009
if s<>'CTR'...
Run Code Online (Sandbox Code Playgroud)

所以基本上我将单个字节转换为字符串然后进行比较,但必须有一种更直接的方法来执行此操作.你能否谈谈这个问题?

arrays delphi byte char delphi-2009

2
推荐指数
1
解决办法
560
查看次数

Application.Restore没让我到达以前的位置,为什么?

我现在试图支持的应用程序(我以前的创建)是一个完整的混乱,所以我编写了一个扩展它作为一个单独的可执行文件,然后我启动,调用application.minimize;WaitForSingleObject(最近创建的过程).在那之后,我打电话application.restore让我回到我离开的地方.

application.Minimize;
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
Application.Restore;
Application.BringToFront;
BringToFront; //the topmost form which was used to launch the app
Show;
Run Code Online (Sandbox Code Playgroud)

我可以看到(Win XP),如何描述它?,应用程序的框架从任务栏跳起来,就好像应用程序正在将自身恢复到屏幕但实际上并没有显示.正如你所看到的,我非常绝望,并结合了app.restore,app.bringtofront,form.bringtofront,form.show ......但我认为我需要某种应用程序.显示,激活,聚焦......不能似乎找到了那些.

另外,为什么这还不够?

application.Minimize;
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
Application.Restore;
Run Code Online (Sandbox Code Playgroud)

编辑

主要形式是wsMaximized,此调用anotherform.showmodal;最终会尝试最小化应用程序,启动其他进程并还原应用程序.我认为诀窍在于最顶层形式的MODALity.

另一个(最顶层)表单的示例代码,显示为模态:

function ExecAndWait(const FileName, Params: string;
  WindowState: Word): Boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Enclose filename in quotes to take care of
    long filenames with spaces. }
  CmdLine := '"' + FileName + '" …
Run Code Online (Sandbox Code Playgroud)

forms delphi restore delphi-2009

2
推荐指数
1
解决办法
2509
查看次数

告诉哪个版本表现更好的最简单方法是什么?

我有一个应用程序,我已经重新考虑了因此我相信它现在更快了.人们不可能感觉到差异,但理论上,应用程序应该运行得更快.通常我不在乎,但由于这是我的硕士学位项目的一部分,我想支持我的说法,即重新分解不仅会带来改进的设计和"更高的质量",而且还会提高性能应用程序(一个小玩具物 - 火车组模拟).

我今天玩了最新的VisualVM东西大约四个小时,但我无法从中得到任何帮助.没有(或者我没有找到)简单地比较两个版本(重构前和重构后)的分析结果的方法.

从更快的应用程序版本中简单地告诉较慢的方法是什么是最简单,最直接的方法.两者的差异必然会对绩效产生影响.谢谢.

java comparison performance profiling

2
推荐指数
1
解决办法
68
查看次数

这是初始化数组的合法方法.但是我如何访问其元素?

我正在准备入门级Oracle认证--OCA - Java Programmer I,因为他们要求人们在服用下一个之前采用这个(以前可以直接使用SCJP,这相当于OCP - Java Programmer II)

我在阵列初始化时遇到了这个问题,这让我有些困惑.显然,可以像这样声明和初始化一个数组:

Object[] objects = { new Object[1], new Object[34] };
Run Code Online (Sandbox Code Playgroud)

由于数组是对象,因此可以将对象数组粘贴到对象数组中.你可以很容易地得到在一个或另一个对象数组做objects[0]objects[1],但你会在哪里从那里去?你如何从存储在下面的对象数组中访问第16个对象objects[1]

基本上,我的问题可以简化为:

Object o = new Object[100];
Run Code Online (Sandbox Code Playgroud)

以上编译.但是,如何访问Object数组中的单个对象o

java arrays initialization

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

如何延迟发送电子邮件?点击按钮立即发送,但要等到下午6点,直到实际发送电子邮件

我有一个PHP脚本,它做了一些处理(创建汇款建议PDF,自行开票发票,Sage CSV文件等...),并在最后输出一个表格的屏幕,其中的名称和电子邮件地址有人付钱出现.用户通过单击复选框选择名称,然后有一个发送按钮,发送带有汇款通知和自行开票发票的电子邮件.这一切都运行良好,但他们现在决定,当他们点击发送按钮时,他们希望电子邮件不是直接发送,而是在下午6点.

是否可以在SMTP标头中设置邮件的发送时间?可以配置MS Exchange服务器,以便来自特定发件人的电子邮件将被保留到发送之前的某个时间吗?IT支持部门 声称它在过去的拨号连接过去是可能的,因为晚上发送东西的成本更低......但是这个功能被删除了.这是真的?我不知道手头的任务有多难.这似乎非常简单,我想这对IT支持人员来说真的是一项任务.但也许我错了?

如果无法在Exchange服务器端设置此项,我该如何实现所请求的功能?而且,不,这不是这个问题的完全重复.我看了一下,但它似乎没有回答我的问题.任何帮助非常感谢!

编辑


Apache在MS Windows Server 2003上运行.数据库是Oracle 10g.将不会设置CRON.电子邮件队列表也需要存储所有附件.我想不惜一切代价避免这样做.无法在标题中指定调度时间?

php email configuration exchange-server smtp

0
推荐指数
1
解决办法
1234
查看次数

为什么我的Java泛型代码在语法上不正确?

你能解释为什么这段代码在语法上不正确吗?

private void addEditor(final Class<? extends FieldEditor> fieldEditorClass, final Composite parent, final PropertyKey propertyKey, final String displayName){
    final Composite composite = new Composite(parent, SWT.NULL);
    composite.setLayout(new GridLayout());
    composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
    final FieldEditor fieldEditor = new >>fieldEditorClass<< (propertyKey.toString(), displayName, composite);
    initializeFieldEditor(fieldEditor);     
}
Run Code Online (Sandbox Code Playgroud)

第5行,之间的部分>>,并<<有红色下划线,它说"不能解析为一个类型".

我希望你能看到我在这里想要实现的目标.通过将SomeEditor.class传递给此方法,我想创建此类的对象并初始化它.我该如何解决第5行的问题?


基本上,我想参数化由此代码实例化的具体FieldEditor类.我的代码中有几个基本相同的方法,除了每个方法实例化一个不同类的FieldEditor.

java generics

0
推荐指数
1
解决办法
319
查看次数

莫里斯互联网蠕虫 - 任何人都知道他们是如何阻止它的?

是的,这一个家庭作业类型的问题,但你可以帮我解决一下吗?

在关于Morris Internet蠕虫主题的简短介绍中,我应该列出阻止蠕虫传播的步骤.我的pp幻灯片现在正在接近最终状态,但在我说这个那个是他们如何阻止蠕虫之前,我想和你联系.我听说这个蠕虫病毒在新闻发布时很长,当时在美国引起了很多轰动,所以我希望找到一些能够提供一些信息的计算领域的人.

基本上,我一直在各种报告和文章中发现,蠕虫的主要弱点pleasequit是没有正确初始化的变量,因此将此变量设置为-1足以阻止蠕虫.这是蠕虫的最后一击吗?这是否有效地阻止它传播?

我发现以下报告和其他人提到了pleasequit var :( 取自本网站):

蠕虫使用一个名为'pleasequit'的变量,但没有正确初始化它,因此有些人将一个名为_worm.o的模块添加到C库中,该模块由以下内容生成:

int pleasequit = -1; 
Run Code Online (Sandbox Code Playgroud)

此值设置为-1的事实将导致它在一次迭代后退出.

computer-forensics virus

-1
推荐指数
1
解决办法
1899
查看次数

可读性和IF块括号:最佳实践

我正在为1级单身学生学习JavaScript基础知识准备一个简短的教程.任务是验证电话号码.该号码不得包含非数字,且长度不得超过14位.下面的代码摘录是我想出的,我想尽可能让它变得可读.

if (
    //set of rules for invalid phone number
        phoneNumber.length == 0 //empty
    ||  phoneNumber.length > 14 //too long
    ||  /\D/.test(phoneNumber) //contains non-digits
) {
    setMessageText(invalid);
} else {
    setMessageText(valid);
}
Run Code Online (Sandbox Code Playgroud)

一个简单的问题我无法回答自己,并希望听到你的意见:如何定位周围(最外面)的括号?很难看出普通和大括号之间的区别.你通常把最后一个)放在与最后一个条件相同的线上吗?你自己保持第一个开口(吗?您是否也将每个子条件包装在括号中?你是水平对齐第一个(和最后一个),还是将最后一个)放在同一列if

你是保持) {单独的一行还是将最后)一行放在同一行的最后一个子条件下,然后将开口{放在一个新行上?或者你只是把它) {放在最后一个子条件的同一行?

社区维基.

编辑 请仅发布关于括号的使用和放置的意见.代码不需要重新考虑.这适用于几周前才引入JavaScript的人.我不是在征求意见如何编写代码,因此它更短或性能更好.我只想知道如何在IF条件下放置括号.

javascript readability brackets

-1
推荐指数
1
解决办法
1116
查看次数