小编Alo*_*mer的帖子

是否有一个left() - Java字符串函数?

我有一个未知长度的字符串str(但不是null)和给定的最大长度len,这必须适合.我想做的就是在len处剪切字符串.

我知道我可以用

str.substring(0, Math.min(len, str.length()));
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试编写像这样的堆叠代码,这不会派上用场

code = str.replace(" ", "").left(len)
Run Code Online (Sandbox Code Playgroud)

我知道我可以编写自己的函数,但我更喜欢现有的解决方案.Java中是否存在left()函数?

java string

13
推荐指数
2
解决办法
5万
查看次数

解释GetKeyState/GetCursorPos中的错误

有时我会收到客户的错误报告,我无法解释.在Delphi中的Application.Run()之后,我收到以下错误:

 EOSError: System error: Code:_5 Access denied

 Call Stack Information:
-------------------------------------------------------------------
|Address |Module     |Unit       |Class |Procedure       |Line    |
-------------------------------------------------------------------
|Running Thread: ID=4352; Priorität=0; Klasse=; [Main Thread]     |
|-----------------------------------------------------------------|
|772B291F|USER32.dll |           |      |GetKeyState     |        |
|772B7B96|USER32.dll |           |      |GetPropA        |        |
|772B7B5A|USER32.dll |           |      |GetPropA        |        |
|772A7BC5|USER32.dll |           |      |DispatchMessageA|        |
|772A7BBB|USER32.dll |           |      |DispatchMessageA|        |
|00A6D804|Program.exe|Program.dpr|      |                |803[369]|  // Application.Run
-------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

EOsError: A call to an OS function failed

Call Stack Information:
-------------------------------------------------------------------
|Address |Module     |Unit       |Class |Procedure …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2006

6
推荐指数
1
解决办法
1334
查看次数

使用Delphi 2006有条件地更改应用程序图标

我想生成我的应用程序的两个不同版本,具有基于DEFINE的不同图标.我成功地包含了基于定义的不同资源文件,但是我无法摆脱MAINICON我项目的默认.res文件.

我添加了一个资源Version1.rc文件,其中包含以下行:

MAINICON icon "resource\icons\Version1.ico"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用IDE编译MyProject,我总是会收到以下错误:

E2161重复资源:类型14(ICON GROUP),ID MAINICON; 保存文件C:\ MyProject\Version1.RES资源; 文件C:\ MyProject\MyProject.RES资源被丢弃.

我尝试MyProject.res使用资源编辑器进行编辑并删除MAINICON,但delphi自动似乎重新创建包含图标的文件.

delphi delphi-2006

6
推荐指数
1
解决办法
508
查看次数

如果 Android 中的 HttpGet 操作持续时间过长,如何避免出现错误 10053 (WSAECONNABORTED)?

我有一个 Android 应用程序使用 Indy 10 TIdHttpServer(Delphi 2006 附带)与 Delphi 2006 Web 服务应用程序进行通信。Delphi 应用程序生成一个大的 XML 文件并为其提供服务。XML 生成可能持续超过 5 分钟。

如果持续时间GenerateXml()超过大约 5 分钟 (*),TIdHTTPResponseInfo.WriteContent如果在 Delphi IDE 中运行,我会检测到错误 10053:

Socket Error # 10053 Software caused connection abort.
Run Code Online (Sandbox Code Playgroud)

然而,在 android 端没有检测到任何内容,并且HttpGet-call 会永远持续。

我的问题是:

1.) 为什么会收到错误 10053 以及如何避免它?看起来像android超时连接,但http.socket.timeout设置为无限。

2.) 我能做些什么来检测客户端的此类错误(除了设置超时,该超时必须太大而无用)?我可以在 TIdHttpServer.OnException 中做一些事情吗?

这是我的代码。Android - 下载函数,在 AsyncTask 内运行:

protected static HttpEntity downloadEntity(String url) throws IOException {
    HttpClient client = new DefaultHttpClient();  

    //Check because of Error 10053: but …
Run Code Online (Sandbox Code Playgroud)

delphi android http indy delphi-2006

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

如何忽略Delphis MessageDlg中的计时器事件

我在Delphi中设置了一个全局异常处理程序.在某些严重的异常上会显示一条错误消息(后跟Halt()).显示错误消息时,Delphi正在处理消息队列,处理计时器事件,从而导致进一步的错误.

我想要的是显示一个不处理计时器事件的错误对话框.德尔福怎么可能?

编辑:我使用Dialogs.MessageDlg(...)来显示消息.

delphi delphi-2006

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

通过设置PopupParent调用ShowModal是一个好主意,在较新的Delphi版本中是否有必要?

为了防止新创建的模态窗口隐藏在其模态父窗口下,我习惯于PopupParent在调用时始终进行设置ShowModal(如此此处此处所建议):

function TMyForm.ShowModal(ParentForm: TCustomForm): Integer;
begin
    PopupParent := ParentForm;
    Result := inherited ShowModal;
end;
Run Code Online (Sandbox Code Playgroud)

但是,当进行调试时(在FormCreate中设置表单时丢失了表单放置的问题),我意识到设置PopupParent会导致对的调用ReCreateWindow,从而破坏并重新创建基础的Windows屏幕对象。

我的问题:

  1. 始终设置一个好主意PopupParent-可能导致什么问题?是否存在可行的替代方案?
  2. 在较新版本的Delphi中仍然需要这样做吗(目前我正在使用D2006,但计划进行更新)?

编辑:

我认为以上所有链接的问题都可以解决相同的问题,第三个链接可以最好地描述这个问题:

[使用ShowModal打开一个窗体],此窗体使用ShowModal打开另一个窗体,因此我们已堆叠了模态窗体。有时存在一个问题,当我们以新形式调用ShowModal时,它将隐藏在以前的形式之后,而不是显示在顶部。按alt + tab后,表单返回顶部[...]

delphi delphi-2006

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

存储TOpenDialog的大小调整数据在哪里以及如何重置?

TOpenDialog有一个选项ofEnableSizing,允许用户修改打开的对话框的对话框大小.此大小调整数据似乎是为应用程序存储的.如果再次启动程序,则会以相同的大小打开对话框.

我的问题是,这些数据存储在何处.我想知道是否存在重置此数据的简单方法.我在文档中找不到相关的信息,ofEnableSizing也没有找到相应的API标志OFN_ENABLESIZING.

delphi winapi delphi-2006

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

dxgettext和Windows 10

有没有人在Windows 10下运行dxgettext

我从Windows 10下的官方主页安装了dxgettext,运行正常.

但每当我尝试运行一些已安装的工具(例如msgfmt.exe)时,它们就不会真正运行,而是再次调用自己,生成数千个进程并使系统爬行.

这是发生的事情:

  • 我打电话 msgfmt --help
  • 可执行文件msgfmt挂起,阻止命令窗口
  • 在TaskManager中,我看到msgfmt.exe突然出现了多个进程

我想,我必须用一些较新的版本替换dxgettext包的gettext工具,但在尝试弄清楚之前我首先想问一下是否有其他人遇到类似的问题并找到了一个有效的解决方案.

我的问题:

有没有人在Windows 10下运行dxgettext的工具?

让它运行需要哪些步骤?

delphi gettext

5
推荐指数
3
解决办法
1248
查看次数

在Delphi中将字符串拆分为固定长度的快速方法

我需要将字符串拆分为具有固定长度子字符串的TStringList.

目前我使用:

procedure StrToStringList(ASource: string; AList: TStrings; AFixedLen: Integer);
begin
    Assert(Assigned(AList));
    while Length(ASource) > AFixedLen do
    begin
        AList.Add(LeftStr(ASource, AFixedLen));
        Delete(ASource, 1, AFixedLen);
    end;
    AList.Add(ASource);
end;
Run Code Online (Sandbox Code Playgroud)

这有效,但似乎很慢.有更好/更快的想法吗?

编辑:结果分析:

速度提升令人印象深刻.以下是我(主观)剖析的结果.

数据大小:290KB,FixedLen:100:

  • 原始代码:58毫秒
  • 赫弗南:1毫秒
  • Deltics:1毫秒

数据大小:2805KB,FixedLen:100:

  • 原始代码:5803毫秒
  • 赫弗南:5毫秒
  • Deltics:4毫秒

delphi delphi-2006

4
推荐指数
2
解决办法
1739
查看次数

检查字符是否包含在char数组中的最佳方法

我知道,我可以写

if C in ['#', ';'] then ...
Run Code Online (Sandbox Code Playgroud)

如果CAnsiChar.

但是这个

function CheckValid(C: Char; const Invalid: array of Char; OtherParams: TMyParams): Boolean;
begin
    Result := C in Invalid;    // <-- Error because Invalid is an array not a set
    //maybe other tests...
    //Result := Result and OtherTestsOn(OtherParams);
end;
Run Code Online (Sandbox Code Playgroud)

收益率E2015: Operator not applicable to this operand type.

有没有一种简单的方法可以检查字符是否包含在字符数组中(除了遍历数组)?

delphi delphi-xe4

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

标签 统计

delphi ×9

delphi-2006 ×7

android ×1

delphi-xe4 ×1

gettext ×1

http ×1

indy ×1

java ×1

string ×1

winapi ×1