通过我的一些旧的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)
所以基本上我将单个字节转换为字符串然后进行比较,但必须有一种更直接的方法来执行此操作.你能否谈谈这个问题?
我现在试图支持的应用程序(我以前的创建)是一个完整的混乱,所以我编写了一个扩展它作为一个单独的可执行文件,然后我启动,调用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) 我有一个应用程序,我已经重新考虑了因此我相信它现在更快了.人们不可能感觉到差异,但理论上,应用程序应该运行得更快.通常我不在乎,但由于这是我的硕士学位项目的一部分,我想支持我的说法,即重新分解不仅会带来改进的设计和"更高的质量",而且还会提高性能应用程序(一个小玩具物 - 火车组模拟).
我今天玩了最新的VisualVM东西大约四个小时,但我无法从中得到任何帮助.没有(或者我没有找到)简单地比较两个版本(重构前和重构后)的分析结果的方法.
从更快的应用程序版本中简单地告诉较慢的方法是什么是最简单,最直接的方法.两者的差异必然会对绩效产生影响.谢谢.
我正在准备入门级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?
我有一个PHP脚本,它做了一些处理(创建汇款建议PDF,自行开票发票,Sage CSV文件等...),并在最后输出一个表格的屏幕,其中的名称和电子邮件地址有人付钱出现.用户通过单击复选框选择名称,然后有一个发送按钮,发送带有汇款通知和自行开票发票的电子邮件.这一切都运行良好,但他们现在决定,当他们点击发送按钮时,他们希望电子邮件不是直接发送,而是在下午6点.
是否可以在SMTP标头中设置邮件的发送时间?可以配置MS Exchange服务器,以便来自特定发件人的电子邮件将被保留到发送之前的某个时间吗?IT支持部门 声称它在过去的拨号连接过去是可能的,因为晚上发送东西的成本更低......但是这个功能被删除了.这是真的?我不知道手头的任务有多难.这似乎非常简单,我想这对IT支持人员来说真的是一项任务.但也许我错了?
如果无法在Exchange服务器端设置此项,我该如何实现所请求的功能?而且,不,这不是这个问题的完全重复.我看了一下,但它似乎没有回答我的问题.任何帮助非常感谢!
编辑
Apache在MS Windows Server 2003上运行.数据库是Oracle 10g.将不会设置CRON.电子邮件队列表也需要存储所有附件.我想不惜一切代价避免这样做.无法在标题中指定调度时间?
你能解释为什么这段代码在语法上不正确吗?
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.
是的,这是一个家庭作业类型的问题,但你可以帮我解决一下吗?
在关于Morris Internet蠕虫主题的简短介绍中,我应该列出阻止蠕虫传播的步骤.我的pp幻灯片现在正在接近最终状态,但在我说这个或那个是他们如何阻止蠕虫之前,我想和你联系.我听说这个蠕虫病毒在新闻发布时很长,当时在美国引起了很多轰动,所以我希望找到一些能够提供一些信息的计算领域的人.
基本上,我一直在各种报告和文章中发现,蠕虫的主要弱点pleasequit是没有正确初始化的变量,因此将此变量设置为-1足以阻止蠕虫.这是蠕虫的最后一击吗?这是否有效地阻止它传播?
我发现以下报告和其他人提到了pleasequit var :( 取自本网站):
蠕虫使用一个名为'pleasequit'的变量,但没有正确初始化它,因此有些人将一个名为_worm.o的模块添加到C库中,该模块由以下内容生成:
Run Code Online (Sandbox Code Playgroud)int pleasequit = -1;此值设置为-1的事实将导致它在一次迭代后退出.
我正在为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条件下放置括号.
java ×3
arrays ×2
delphi ×2
delphi-2009 ×2
brackets ×1
byte ×1
char ×1
comparison ×1
email ×1
forms ×1
generics ×1
javascript ×1
performance ×1
php ×1
profiling ×1
readability ×1
restore ×1
smtp ×1
virus ×1