我遇到了一些对我来说很新的代码......
我从来没有真正看到过对象过程的类型声明,我只是没有看到这一点.为什么开发人员不能只保留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) 在我的应用程序中,我有
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);)但我似乎无法将光标更改回正常:(。
基本上,我正在使用一个TTimer事件来关闭所有打开的表单并将用户带回主表单.我可以迭代Screen.Forms:
for i := 0 to Screen.Formcount - 1 do
Screen.Forms[i].close;
Run Code Online (Sandbox Code Playgroud)
问题是OnCloseQuery某些形式的事件 - 它们弹出MessageDlg中断这个过程:(
测试链接: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)。这个怎么做? …
谷歌一直在开发这个伟大的开源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源文件:[检查网站上下载页面上的源文件]
谢谢你的帮助.

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