我想检测KeyEvent,无论什么元素具有焦点在我的JavaFX应用程序-尤其是,我要检测的SPACE关键。我尝试向Scene与我的窗口相对应的监听器添加一个监听器:
scene.setOnKeyPressed(ev -> {
if (ev.getCode() == KeyCode.SPACE) {
System.out.println("GOOD");
}
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个具有焦点的特定节点(如 aListView或Button),则不会检测到它。
SPACE无论用户在我的应用程序中做什么,我如何检测按键何时被按下?我不打算中断正在接收的任何节点KeyEvent- 我只是想知道它是否发生。一种(丑陋的)解决方案是将侦听器添加到我的所有节点,但如果可能的话,我宁愿不这样做。
我怎样才能暂停/继续TThread我要寻找一个安全的替代已过时的TThread.Suspend藏汉作为TThread.Resume。
我有一个进程,从文件导入数据开始,然后执行一系列过程,但在任何时候它都可以找到问题,应该停止执行其余的并运行另一组.
这是我的示例,其中每个过程设置全局gStop变量,指示停止进程.如果它被停止,我需要在最后运行一些代码.
var gStop:boolean;
procedure Run;
begin
gStop:=False;
Import; // imports data from file
If Not gStop Then
AfterImport1;
If Not gStop Then
AfterImport2;
If Not gStop Then
AfterImport3;
If Not gStop Then
AfterImport4;
If Not gStop Then
If fTypeOfData = cMSSQL Then // function returns type of imported data
begin
ProcessMSSQLData1;
If not gStop Then
ProcessMSSQLData2;
If not gStop Then
ProcessMSSQLData3;
If not gStop Then
If fObjectAFoundInData Then // function checks if ObjectA was found in imported data
ProcessObjectA; …Run Code Online (Sandbox Code Playgroud) Delphi 10 Seattle Update1有这个错误修复:IDE的额外高DPI支持(请参阅http://edn.embarcadero.com/article/44619)我在Windows 10 64位上安装了它.我的显示分辨率是:3840*2160.但IDE不支持,文本和对象模糊.
编辑
在我编辑了清单并将dpi识别为true(参见屏幕截图)后,它工作但不完全.而是使用此清单,我们可以检查应用程序属性上的"高dpi设置上的diable display scaling".实际上,清单不再做这个设置.看我的屏幕截图.
我想开始datetime2在 SQL Server 中使用字段,我需要通过 Delphi XE5 中的 ADO 插入到表中。我正在使用TADOQuery.ExecSQL插入,一切正常。
但是,我的大多数表都有标识列,例如
id integer identity(1,1) not null
Run Code Online (Sandbox Code Playgroud)
为了保存到服务器的往返,我通常Open在查询文本中使用两个命令。
所以我可以在同一次往返中检索新插入的id。
这对我的所有表都有效,但现在当我添加datetime2或time列时无效- 我收到错误:
项目“Foo.exe 引发异常类 EOleException,并带有消息‘从字符串转换日期和/或时间时转换失败”。
如果这很重要,我正在使用 SQL Server 2008。有谁知道可能是什么问题?
我需要从字符串中删除重复的空格.从互联网上抓取的以下代码可以正常工作,除了它复制了字符串的第一个字符串.也许这有更快的东西.
function DeleteRepeatedSpaces(OldText: string): string;
var
i: integer;
s: string;
begin
if length(OldText) > 0 then
s := OldText[1]
else
s := '';
for i := 1 to length(OldText) do
begin
if OldText[i] = ' ' then
begin
if not (OldText[i - 1] = ' ') then
s := s + ' ';
end
else
begin
s := s + OldText[i];
end;
end;
DelDoubleSpaces := s;
end;
Run Code Online (Sandbox Code Playgroud) 我正在重构一个大程序,现在我得到很多小程序,有很多参数来回传递的函数.因为我希望保持相同/相似的性能和可维护的重构,我试图了解什么是最好的方法,所以我不打破代码.
这些新函数最常见的是:
function ProcessA(const ProjName,ProjPath:string;
ProjID:integer;
var ProjDest:string):string;
function ProcessB(const ProjName,ProjPath:string;
const ProjID,ProjHID,ProjGID:integer;
var ProjDest:string;
out ProjDelPath:string):string;
Run Code Online (Sandbox Code Playgroud)
我读了很多关于const,var,out参数的文章.我应该首先订购所有const,然后全部正常,然后var和last ...
它们的顺序是否重要?
编辑:
为了澄清问题的原因或者是否有人使用相同的这个问题,我使用了IDE的重构/提取方法功能,它可以很好地完成任务,但它没有考虑到它所采用的参数.因此,当我重新排序和更改参数名称时,我看到了没有标准的参数类型顺序的问题.
我有一个简单的函数,可以将数字转换为字符串(类似于Excel列号1..n可以转换为列名的方式A-ZZZ).由于我经常使用它,我已经删除了局部变量作为速度优化,并且只能Result直接使用.
当我编译时,我得到这两个警告:
W1047不安全代码'var param的字符串索引'
W1068将来可能不支持修改字符串
这是缩短的功能:
function Idx2Code_(Idx: integer): string;
begin
SetLength(Result, 3); // init Result size
if Idx <= 26 then
begin
// single char: A-Z
Result := Chr(64 + Idx);
SetLength(Result, 1);
end
else if Idx <= 676 then
begin
// 2 chars codes: BA-ZZ
Result[1] := Chr((Idx div 26) + 64 + 1); // <- warnings for this line
Result[2] := Chr((Idx mod 26) + 64); // <- warnings for this …Run Code Online (Sandbox Code Playgroud) 我在 ScrollBox 中有 6 个 RichEdit 控件。它们需要从上到下按顺序向左对齐,但我需要宽度不固定,所以当文本长度超出 ScrollBox 宽度时,我可以使用滚动条滚动查看全文。
如果我设置:
RichEdit1.Align := alTop;
RichEdit2.Align := alTop;
RichEdit3.Align := alTop;
RichEdit4.Align := alTop;
RichEdit5.Align := alTop;
RichEdit6.Align := alTop;
Run Code Online (Sandbox Code Playgroud)
它们完美对齐并在设计中保持固定,因此不会意外移动它们,但宽度是固定的。不好。
如果我手动对齐它们,那么单击它们时它们不会固定,并且可以移动,我需要一直重新排列。恼人的。
图片显示在所有 RichEdit 的顶部,Align = alTop,宽度固定为 ScrollBox 宽度。下面的示例是手动对齐所有 RichEdit,其宽度可以超出 ScrollBox 的宽度,但它们可以在设计中移动:
所以,我想让它们像 alTop 一样固定在左侧、顶部,但不固定宽度。我怎样才能实现这个目标?
很多时候,当使用通用数组时,我需要知道我正在使用的数组的最大长度.很长一段时间我一直在使用:
MaxIntValue([Length(Array1), Length(Array2) , Length(Array3)]); // from Math unit
Run Code Online (Sandbox Code Playgroud)
然后我用我的方法简化了这个(跳过输入Length()):
// array of array of TCardBrand
function GetMaxLength(const aArrays: array of TArrayOfCarBrand): integer;
Run Code Online (Sandbox Code Playgroud)
效果很好,但现在我想创建一个通用的MaxLength,我无法使其工作
class function MaxLength<T>(aArrays: array of array of T): integer; - it gives error: [dcc32 Error] Unit2.pas(31): E2029 Identifier expected but 'ARRAY' found
Run Code Online (Sandbox Code Playgroud)
这是我正在测试的代码,使用Math单元中的MaxIntValue和我的方法示例的工作示例,但扩展通用TArray不起作用:
TCarBrand = record
BrandID: integer;
BrandName: string;
BrandCountry: string;
end;
TArrayOfCarBrand = array of TCarBrand;
TArray = class(System.Generics.Collections.TArray)
public
// ERROR: E2029 Identifier expected but 'ARRAY' found
class function MaxLength<T>(aArrays: array of array …Run Code Online (Sandbox Code Playgroud)