我如何让微软了解我在其核心库例程中发现的问题?他们是否有一个中央存储库来报告这些事情?
我不是Microsoft Development Network(MSDN)的成员.
或者我应该打扰?
我希望能够在Delphi 2009程序中显示程序编译的日期和时间.
有一个简单的方法吗?
我在主菜单上使用标准的剪切、复制、粘贴操作。他们有捷径Ctrl-X,Ctrl-C和Ctrl-V。
当我打开一个模态表单时,例如 FindFilesForm.ShowModal,然后所有的快捷方式都在表单中工作。
但是当我打开一个非模态表单时,例如 FindFilesForm.Show,那么快捷方式就不起作用了。
如果 FindFilesForm 是活动表单,我认为这些操作应该有效。它的模态应该与它无关,还是我的想法错了?
尽管如此,我怎样才能获得在非模态表单上工作的快捷方式?
在 Cary 的回应之后,我进一步研究了它。对于某些控件,例如 TMemo 或 TEdit,这不是问题。
但它适用于其他一些人。具体来说,它发生的地方包括:
我会看看是否还有其他人并将他们添加到列表中。
这些都是我程序中重要的非模态形式。
所以我仍然需要一个解决方案。
好的。我真的需要这方面的帮助。所以这成为我悬赏的第一个问题。
我与 Cary 的讨论是通过他的回答以及那里的评论更详细地描述了我的问题。
正如我在其中一条评论中提到的,这里似乎讨论了一个相关的问题。
我需要的是一个解决方案或变通方法,这将允许Ctrl-X,Ctrl-C和Ctrl-V始终在非模态窗口中的 TComboBox 和 TFindDialog 中工作。如果这两个问题得到解决,我相信我的 TElTreeInplaceEdit 也能正常工作。
正如 Cary 所描述的,设置一个简单的测试程序只需要几分钟。希望有人能够解决这个问题。
只是要小心,似乎有些东西可以让它有时工作,但有时却不起作用。如果我可以更详细地隔离它,我会在这里报告。
感谢您为我提供的任何帮助。
Mghie 非常努力地寻找解决方案,他的 OnExecute 处理程序与他的 ActionListUpdate 处理程序相结合,可以解决问题。所以为了他的努力,我给了他公认的解决方案和赏金点。
但是他的 actionlist 更新处理程序并不简单,您需要在其中指定要处理的所有情况。假设还有您可能想要的Ctrl+A全选或Ctrl-Y撤消。一般的程序会更好。
因此,如果您在寻找答案时确实遇到了这个问题,请先尝试我提供的添加 IsShortcut 处理程序的答案。它对我有用,应该处理每种情况,不需要 OnExecute 处理程序,所以简单得多。Peter Beyond 编写了该代码,Uwe …
我正在尝试为我的桌面程序设计错误和警告日志文件.
当我的程序读取用户的输入文件时,它可能会发现语法错误或某种类型的无效数据.一旦读完所有内容并且程序正在处理数据,就会发现更多问题.
我想将有关这些的消息写入一个简单的文本文件.我可能还想要包含信息文本来指示进度,时间,内存使用等.我想要包括行号,甚至可能包含导致错误的实际输入行.
这将是用户想要浏览的文件,因此显然它必须布局合理且易于使用.
你知道任何风格指南,或者你看到一个让你自己想到的错误日志文件:"现在这是一个设计良好的日志文件!"
跟进:
前三个答案实际上更适用于服务器或事件日志.
我正在为我的桌面程序寻找日志文件的格式,以详细说明它在输入文件中找到的任何问题以及其处理的成功(或失败).
我确定你已经使用了一些桌面应用程序来生成这样的日志文件.你见过有什么好的吗?
Application.ProcessMessages命令是众所周知的,我在长进程中使用它来确保我的程序不会占用计算机.
但我有一个相当快速的处理集,我在缓冲视图到文件.在缓冲过程期间,可能会发送一些系统消息(例如重绘或滚动条移动或其他事件).我希望防止这些被ProcessMessages处理,直到我的缓冲完成.
有没有办法:
阻止Application.ProcessMessages直到我的过程完成,或
捕获在我的过程中生成的所有消息,并且不会释放它们直到过程结束.
对我而言,这是一个明智的选择.我的程序的设置进入Windows注册表.毕竟,这就是它的用途,不是吗?
但是一些程序员仍然对使用注册表犹豫不决.他们表示,随着它的增长,它会减慢你的计算机速度.或者他们声明它已损坏并导致计算机出现故障.
因此,他们编写自己的配置文件,或者可以使用Microsoft自几个操作系统之前已经折旧的INI文件.
据我所知,早期Windows操作系统中出现的注册表问题大多数都是在Windows XP中修复的.可能是过多的公司使注册表清理工作能够跟上"注册表膨胀"和"孤立条目"仍然不好的传闻.
所以我问,今天有没有理由不使用Windows注册表来存储我的程序配置设置?
我的程序中有一个FindFile例程,它将列出文件,但是如果填写了"Containing Text"字段,那么它应该只列出包含该文本的文件.

如果输入"包含文本"字段,则我搜索为文本找到的每个文件.我目前的做法是:
var
FileContents: TStringlist;
begin
FileContents.LoadFromFile(Filepath);
if Pos(TextToFind, FileContents.Text) = 0 then
Found := false
else
Found := true;
Run Code Online (Sandbox Code Playgroud)
上面的代码很简单,一般都可以.但它有两个问题:
对于非常大的文件(例如300 MB),它会失败
我觉得它可能会更快.这还不错,但为什么要等待10分钟搜索1000个文件,如果可能有一个简单的方法来加快它的速度?
我需要这个用于Delphi 2009并搜索可能是也可能不是Unicode的文本文件.它只需要用于文本文件.
那么如何加快搜索速度并使其适用于非常大的文件呢?
额外奖励:我还想要允许"忽略大小写"选项.提高效率是一件更艰难的事情.有任何想法吗?
解:
嗯,mghie指出我之前的问题如何在Delphi中有效地阅读许多文件的前几行,而且正如我所回答的那样,它是不同的,并没有提供解决方案.
但是他让我想到我以前做过这件事而且我曾经做过.我为大文件构建了一个块读取例程,将其分解为32 MB块.我用它来读取我的程序的输入文件,这可能是巨大的.该例程工作正常,速度快.所以第一步是对我正在浏览的这些文件做同样的事情.
所以现在问题是如何在这些块内有效搜索.那么我确实有一个关于该主题的上一个问题:Delphi中是否有一个高效的全字搜索功能?和RRUZ向我指出了SearchBuf例程.
这也解决了"奖金",因为SearchBuf有选项,包括全字搜索(该问题的答案)和MatchCase/noMatchCase(奖金的答案).
所以我开始跑步了.再次感谢SO社区.
我需要以某种方式在Delphi 2009中实现它:
用户单击按钮2.如果用户的最后一个操作是单击按钮1,那么我想做一件事,但如果用户的最后一个操作是其他任何操作,我想做另一件事.
显然,我设置了一个布尔变量:UserClickedOnButton1并在单击按钮1时将其设置为true,然后在Button 2的OnButtonClick事件中测试该变量.
我的问题是,在点击按钮2之前,如果用户完成其他任何操作,我该如何将其设置为false.(例如,鼠标按下,按键,箭头键,切换到另一个程序或其他任何内容).
...或者有一种更简单的方法可以做到这一点,我忽略了.
我正在使用Delphi 2009.
这在所有情况下都适用于我,但有一个:
var
BOMLength: integer;
Buffer: TBytes;
Encoding: TEncoding;
Value: string;
SetLength(Buffer, 2048);
CurFileStream.Read(Buffer[0], 2048);
Encoding := nil;
BOMLength := TEncoding.GetBufferEncoding(Buffer, Encoding);
Value := Encoding.GetString(Buffer);
Run Code Online (Sandbox Code Playgroud)
在一种情况下,它不起作用,文件是一个简单的小文件,并以UTF8字节顺序标记(BOM)开始,即十六进制:'EF BB BF'并包含以下内容:
0 HEAD
0 @I1@ INDI
1 NAME Barthel Lee /Brenner/
2 CONT MAURICE F. WEAVER
2 CONT When I was eleven or twelve years old, I went to Camp Marguette for a w
2 CONC eek or two in the summertime. It was operated by Catholic Charities and w
0 TRLR …Run Code Online (Sandbox Code Playgroud) delphi ×7
windows ×2
compilation ×1
core-api ×1
encoding ×1
large-files ×1
messages ×1
modal-dialog ×1
msdn ×1
non-modal ×1
optimization ×1
preemptive ×1
registry ×1
search ×1
utf-8 ×1
validation ×1