小编Ric*_*olf的帖子

Delphi>请解释一下:类型...对象的过程

我遇到了一些对我来说很新的代码......

我从来没有真正看到过对象过程的类型声明,我只是没有看到这一点.为什么开发人员不能只保留Boolean类型的字段?

interface

    type
      TFinishedCaptureEvent = procedure(AFinished: Boolean) of object;

      TFrameCard = class(TFrame)
      ...
      private
        FOnFinishedCapture: TFinishedCaptureEvent;
        procedure DoUpdateMessage(AMessageType: TMessageType);
      public
        property OnFinishedCapture: TFinishedCaptureEvent read FOnFinishedCapture write FOnFinishedCapture;
      end;    

implementation

...

procedure TFrameCard.DoUpdateMessage(AMessageType: TMessageType);
begin
  if Assigned(FOnFinishedCapture) then
    FOnFinishedCapture(False);
  ...
end;

end.
Run Code Online (Sandbox Code Playgroud)

delphi

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

Delphi:Screen.Cursor 不工作,无法弄清楚 Windows.SetCursor(crHourGlass)

在我的应用程序中,我有

Screen.Cursor := crHourGlass;
Application.ProcessMessages;
try
...

finally
  Screen.Cursor := crDefault;
  Application.ProcessMessages;
end;
Run Code Online (Sandbox Code Playgroud)

但这根本没有按预期工作。它似乎在处理时立即变回 crDefault。

经过一番谷歌搜索后,我决定尝试 Windows.SetCursor() - 但我已经搜索了 MSDN,但找不到光标类型列表。

更新 我以为我找到了解决方案(使用 SetSystemCursor(Screen.Cursors[crHourGlass], OCR_NORMAL);)但我似乎无法将光标更改回正常:(。

delphi

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

Delphi:关闭所有表单(MainForm除外),但忽略任何OnCloseQuery对话框

基本上,我正在使用一个TTimer事件来关闭所有打开的表单并将用户带回主表单.我可以迭代Screen.Forms:

for i := 0 to Screen.Formcount - 1 do
  Screen.Forms[i].close;
Run Code Online (Sandbox Code Playgroud)

问题是OnCloseQuery某些形式的事件 - 它们弹出MessageDlg中断这个过程:(

delphi delphi-7

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

正则表达式替换函数:如果不匹配,$1 返回整行而不是 null

测试链接:regexr.com/42d9c

这让我发疯。

我想提取以下行中的条形码:

Ceres Juice Apricot 12 x 1lt unit: 6001240102022
Ceres Juice Cranberry& Kiwi Juice 12 x 1lt... unit:
Ceres Juice Guava 12 x 1lt.. unit:6001240222829
Ceres Juice Orange 12x1lt... unit:
Ceres Juice Medley of Fruits 1L x 12 unit: 6001240100660
Run Code Online (Sandbox Code Playgroud)

它应该返回:

6001240102022

6001240222829

6001240100660
Run Code Online (Sandbox Code Playgroud)

我正确使用.*(\d{13}).*

然后我用$1它返回第一个匹配项

但我的结果看起来像这样:

6001240102022
Ceres Juice Cranberry& Kiwi Juice 12 x 1lt... unit:
6001240222829
Ceres Juice Orange 12x1lt... unit:
6001240100660
Run Code Online (Sandbox Code Playgroud)

原因:

造成此问题的原因是,如果匹配组 ($1) 中没有任何内容,则“替换”将返回原始字符串。

解决方法:

确保每行都有一个“匹配”,并将其放入匹配组 1 ($1)。然后将您的实际比赛放入比赛组 2 ($2)。这个怎么做? …

regex regex-group regexp-replace

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

Delphi/Tesseract OCR:有人可以帮我在Delphi中使用这个新的DLL吗?

谷歌一直在开发这个伟大的开源OCR组件:http: //code.google.com/p/tesseract-ocr/

他们在2010年10月初推出了新版本(版本3).

但是这个新版本不再有一个可用的C包装器,并且Delphi社区中的某个人可以从Delphi内部开始工作 - 我正在尝试这样做,因为我非常需要它而没有其他人匆忙要做到这一点,但我不知道我在做DLL和将C转换为Delphi时正在做什么.那是我可以使用你的帮助的地方.

我所接受的线索是,我需要Dependency Walker以某种方式防止"名称错误"(不知道这意味着什么).实际的DLL API方法在C文件中 - 可能是您在Dependency-Walker中看到的DLL函数名称将匹配API文件中的函数.

以下是您需要提供帮助的所有内容:您需要一个包含tessdll.dll的文件夹,并且leptonlib.dll只需要在那里.你需要一个名为'tessdata'的子文件夹,在文件夹里面将是你的'语言数据文件' - [查看网站上的下载页面]

这是Windows安装程序,因此您可以看到DLL正在运行:[查看网站上的下载页面]

为了使这适用于Delphi,您将可执行文件放在与DLL相同的文件夹中.然后,您需要知道在DLL中调用什么,为此您可以查看C源文件:[检查网站上下载页面上的源文件]

谢谢你的帮助.

delphi ocr dll tesseract

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

德尔福>垂直扫描线?(获取列而不是行?)

替代文字

我正在尝试编写一种算法,用于检测下图中"RF"和"WOOLF"之间的空间.我需要类似Scanline for COLUMNS而不是行.我的算法将扫描每一列是否存在黑色像素,如果发现任何它将存储'1',否则它将存储'0',因此例如上面的图像可能是:000001111111111111111111100000000000000000000000011111111111111111111111111111111111111111111111111所以我将知道该空间从像素30开始.

delphi image-processing

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

Delphi>我可以在我的单元(而不是dfm)中存储位图的数据吗?

我在一个单元中声明了一个类,它需要使用特定的位图.它在我的测试单元的DFM中声明如下:

  object ImgTop: TImage
    Left = 208
    Top = 568
    Width = 777
    Height = 41
    Picture.Data = {
      0A544A504547496D616765A1CF0000FFD8FFE000104A46494600010101025802
      [truncated]
      };
Run Code Online (Sandbox Code Playgroud)

但在我的最后一个单元中,我不会有dfm.那么有什么方法可以在我的单位中声明它?

===

谢谢,我现在似乎已经开始工作,关于位图的大小限制很可怜:(这就是我所做的:

在我的文件夹中是这些文件:

imgleft.bmp
imgtop.bmp
Run Code Online (Sandbox Code Playgroud)

这是我的名为ScanOCRres.rc的资源文件:

1 RT_BITMAP "imgtop.bmp"
2 RT_BITMAP "imgleft.bmp"
Run Code Online (Sandbox Code Playgroud)

我已将其设置为使用C:\ Program Files\Borland\Delphi 7\bin\brcc32.exe自动执行

它生成了该文件

ScanOCRres.RES
Run Code Online (Sandbox Code Playgroud)

在我的单位,我有实施

{$R *.dfm}
{$R ScanOCRres.RES}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

var
  abmp : TBitmap;
begin
  abmp := TBitmap.create;
  abmp.LoadFromResourceID(SysInit.HInstance, 1);
  abmp.free;
end;
Run Code Online (Sandbox Code Playgroud)

我在LoadFromResourceID行上收到此错误消息:

项目Project1.exe引发了异常类EAccessViolation,并在模块"Project1.exe"中显示了"地址为0040A2C8的访问冲突"消息.读取地址00000001 '

delphi components

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