小编Mik*_*nni的帖子

如何在我的 JavaFX 应用程序中的任何位置检测 SPACE KeyEvent?

我想检测KeyEvent,无论什么元素具有焦点在我的JavaFX应用程序-尤其是,我要检测的SPACE关键。我尝试向Scene与我的窗口相对应的监听器添加一个监听器:

scene.setOnKeyPressed(ev -> {
    if (ev.getCode() == KeyCode.SPACE) {
        System.out.println("GOOD");
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个具有焦点的特定节点(如 aListViewButton),则不会检测到它。

SPACE无论用户在我的应用程序中做什么,我如何检测按键何时被按下?我不打算中断正在接收的任何节点KeyEvent- 我只是想知道它是否发生。一种(丑陋的)解决方案是将侦听器添加到我的所有节点,但如果可能的话,我宁愿不这样做。

java javafx keyevent

5
推荐指数
1
解决办法
3929
查看次数

控制TThread的执行流程

我怎样才能暂停/继续TThread我要寻找一个安全的替代已过时的TThread.Suspend藏汉作为TThread.Resume

delphi multithreading

4
推荐指数
1
解决办法
429
查看次数

如何在没有大量IF的情况下控制执行?

我有一个进程,从文件导入数据开始,然后执行一系列过程,但在任何时候它都可以找到问题,应该停止执行其余的并运行另一组.

这是我的示例,其中每个过程设置全局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 delphi-xe7

4
推荐指数
1
解决办法
374
查看次数

Delphi 10 Seattle update1 IDE高dpi支持

Delphi 10 Seattle Update1有这个错误修复:IDE的额外高DPI支持(请参阅http://edn.embarcadero.com/article/44619)我在Windows 10 64位上安装了它.我的显示分辨率是:3840*2160.但IDE不支持,文本和对象模糊.


编辑

在我编辑了清单并将dpi识别为true(参见屏幕截图)后,它工作但不完全.而是使用此清单,我们可以检查应用程序属性上的"高dpi设置上的diable display scaling".实际上,清单不再做这个设置.看我的屏幕截图.

工具调色板

选项设置

delphi delphi-10-seattle

4
推荐指数
1
解决办法
1713
查看次数

在 TADOQuery.open 中使用 sql-server datetime2

我想开始datetime2在 SQL Server 中使用字段,我需要通过 Delphi XE5 中的 ADO 插入到表中。我正在使用TADOQuery.ExecSQL插入,一切正常。

但是,我的大多数表都有标识列,例如

id integer identity(1,1) not null
Run Code Online (Sandbox Code Playgroud)

为了保存到服务器的往返,我通常Open在查询文本中使用两个命令。

  • 第一个命令是插入
  • 第二个命令是“选择 scope_identity() 作为 scope_id”

所以我可以在同一次往返中检索新插入的id

这对我的所有表都有效,但现在当我添加datetime2time列时无效- 我收到错误:

项目“Foo.exe 引发异常类 EOleException,并带有消息‘从字符串转换日期和/或时间时转换失败”。

如果这很重要,我正在使用 SQL Server 2008。有谁知道可能是什么问题?

sql-server delphi ado delphi-xe

4
推荐指数
1
解决办法
983
查看次数

如何从字符串中删除重复的空格

我需要从字符串中删除重复的空格.从互联网上抓取的以下代码可以正常工作,除了它复制了字符串的第一个字符串.也许这有更快的东西.

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)

delphi string

3
推荐指数
1
解决办法
1620
查看次数

const,var,out参数的顺序是否重要?

我正在重构一个大程序,现在我得到很多小程序,有很多参数来回传递的函数.因为我希望保持相同/相似的性能和可维护的重构,我试图了解什么是最好的方法,所以我不打破代码.

这些新函数最常见的是:

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的重构/提取方法功能,它可以很好地完成任务,但它没有考虑到它所采用的参数.因此,当我重新排序和更改参数名称时,我看到了没有标准的参数类型顺序的问题.

delphi delphi-xe7

3
推荐指数
1
解决办法
481
查看次数

将char分配给字符串时如何解决W1047/W1068警告?

我有一个简单的函数,可以将数字转换为字符串(类似于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)

delphi string char compiler-warnings delphi-xe7

3
推荐指数
1
解决办法
387
查看次数

如何在没有固定宽度的情况下左对齐和顶部对齐控件?

我在 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 一样固定在左侧、顶部,但不固定宽度。我怎样才能实现这个目标?

delphi controls alignment delphi-10.1-berlin

3
推荐指数
1
解决办法
1537
查看次数

如何使用Generic方法和<T>数组的参数数组?

很多时候,当使用通用数组时,我需要知道我正在使用的数组的最大长度.很长一段时间我一直在使用:

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)

delphi generics delphi-10.1-berlin

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