Delphi有一个$ WARN编译器指令,允许用户有选择地启用或禁用特定警告.Delphi 2009帮助文件描述了语法:
{$WARN identifier ON|OFF}
Run Code Online (Sandbox Code Playgroud)
但它只列出了6个警告的标识符.
我想要一个完整的所有警告标识符列表.特别是,我想知道Delphi 2009中隐式字符串强制转换警告W1057和W1058的标识符.
我设法猜测隐含的Ansi-> Unicode转换(W1057):
{$WARN IMPLICIT_STRING_CAST OFF}
Run Code Online (Sandbox Code Playgroud)
谷歌搜索发现我另一个:
{$WARN IMPLICIT_STRING_CAST_LOSS OFF}
Run Code Online (Sandbox Code Playgroud)
虽然这解决了我的迫切需要,但我仍然想知道完整的警告标识符列表.应该记录这样的东西.
我尝试了一些像Regulator,Regulazy和RegexBuddy这样的正则表达式工具.他们没有做我想做的事情,他们希望用户知道正则表达式.
我想要一个傻瓜工具.你告诉我需要一个正则表达式的工具,例如"匹配以'是'结尾的任何内容,并且它至少包含一个短语'/ test /'",它会为你创建正则表达式.
所以我要么用简单的英语或半简单的英语输入我的请求,要么工具有各种现成的选择,我在它们之间做出选择来创造我想要的特别的东西.
是否有针对非开发人员的工具?我不是在寻找一个正则表达式测试器.
如果Windows应用程序IMAGE_FILE_LARGE_ADDRESS_AWARE
在映像头中具有该集(通过/ LARGEADDRESSAWARE编译器标志),则通常允许32位应用程序使用超过2GB的内存(仅在32位操作系统已设置时才有意义) boot.ini中的3GB开关).有关详细信息,请参阅MSDN文章/ 3GB.
我的问题是,如果您在没有3GB开关设置的系统上运行此应用程序会发生什么.它被忽略了吗?或者应用程序是否会尝试使用3GB堆并获取内存不足错误,因为用户空间只有2GB可用?
我一直听到有消息称LARGEADDRESSAWARE交换机在2GB用户空间系统中被忽略,但在此无法找到任何官方的Microsoft文档.
提前致谢.
我从一个新的Delphi VCL应用程序开始,将Menus添加到uses子句,在表单上放一个标签,并指定表单的OnShortCut事件:
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
Label1.Caption := ShortCutToText(ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData)));
end;
Run Code Online (Sandbox Code Playgroud)
在XP上,这适用于我尝试过的所有快捷键组合,包括Shift+ Ctrl+ 0.在Vista和Windows 7上,测试应用程序显示Shift+ Ctrl+ 1到Shift+ Ctrl+ 9,但不显示Shift+ Ctrl+ 0.其他组合如Shift+ 0,Ctrl+ 0,甚至Shift+ Ctrl+ Alt+ 0都可以正常显示.
在调试器下运行应用程序,我发现如果在按下键的同时按住Shift和Ctrl键,则永远不会使用Msg.CharCode = Ord('0')触发OnShortCut事件0.
Delphi IDE在Vista下也存在同样的问题. Ctrl+ Shift+ 1设置书签1,但Ctrl+ Shift+ 0不设置书签0,它应该. …
在Delphi XE2中,我试图in
在记录上重载操作符,以允许我检查记录表示的值是否是集合的一部分.我的代码看起来像这样:
type
MyEnum = (value1, value2, value3);
MySet = set of MyEnum;
MyRecord = record
Value: MyEnum;
class operator In(const A: MyRecord; B: MySet): Boolean;
end;
class operator MyRecord.In(const A: MyRecord; B: MySet): Boolean;
begin
Result := A.Value in B;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
R: MyRecord;
S: MySet;
begin
R.Value := value1;
S := [value1, value2];
Button1.Caption := BoolToStr(R in S);
end;
Run Code Online (Sandbox Code Playgroud)
代码无法编译.对于R in S
编译器所说的语句:不兼容的类型MyRecord
和MyEnum
.
如何重载In
运算符,MyRecord
以便在上面的代码中 …
我将SAPI类型库导入Delphi.我可以使用以下代码将语音输出到PC扬声器:
procedure TForm1.Button1Click(Sender: TObject);
var
Voice: TSpVoice;
begin
Voice := TSpVoice.Create(nil);
Voice.Speak('Hello World!', 0);
end;
Run Code Online (Sandbox Code Playgroud)
我可以.wav
使用以下代码将语音输出到文件:
procedure TForm1.Button1Click(Sender: TObject);
var
Voice: TSpVoice;
Stream: TSpFileStream;
begin
Voice := TSpVoice.Create(nil);
Stream := TSpFileStream.Create(nil);
Stream.Open('c:\temp\test.wav', SSFMCreateForWrite, False);
Voice.AudioOutputStream := Stream.DefaultInterface;
Voice.Speak('Hello World!', 0);
Stream.Close;
end;
Run Code Online (Sandbox Code Playgroud)
问题是当我播放.wav
文件时听起来很糟糕,就像使用非常低的比特率一样.Audacity告诉我文件是单声道16位22.05kHz,但听起来比这更糟糕.
如何将语音输出到单声道16位44.1kHz .wav
文件,该文件与直接发送到PC扬声器的语音输出完全相同?我无法弄清楚如何修改第二个代码示例来设置每个样本的比特和比特率.
Follup-up: Glenn的答案解决了比特率的问题.感谢那.但是输出到.wav
文件的语音质量仍然低于直接输出到扬声器的质量.我使用屏幕录制软件将第一个代码块的输出记录为helloworldtospeakers.wav.添加了Glenn的第二个代码块生成helloworldtowav.wav.第二个文件显然有一些失真.有任何想法吗?
根据Delphi的帮助文件,当我打开对话框以将构建事件添加到项目的选项时,对话框应该显示我可以在命令行上用于构建事件的宏(占位符)列表.当我在Delphi XE中尝试这个时,宏列表是空的.帮助文件没有说明哪些宏可用(我能找到).
那么,哪些宏可用?现在我需要一个宏来获取编译.exe
文件的完整路径(后期构建),以及.dproj
文件的完整路径.但我希望有一个完整的可用宏列表供将来参考.
有没有人将SafeMM调试内存管理器移植到Delphi XE2?CodeCentral上的2009 SafeMM将无法编译,因为RTL现在使用NativeInt而不是Integer来实现内存功能.