unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, ExtCtrls, ComCtrls; 
 
const 
   HZAll=0; //所有汉字 
   HZAll_Digit=1; //所有汉字,数字优先 
   HZAll_Character=2; //所有汉字,英文字母优先 
   HZAll_Digit_Character=3; //所有汉字,数字、英文字母优先 
   HZDigit=4;  //仅数字 
   HZCharacter=5; //仅字符 
   HZDigit_Character=6; //仅数字和英文字母 
 
  MaxSuspect=15; 
type 
  TResult = record 
    Chinese: array[0..3] of char; 
    Precision: word; 
    CountSuspect: word; 
    ChineseSuspect: array[0..MaxSuspect*2+1] of char; 
    PrecisionSuspect: array[0..MaxSuspect] of word; 
    Rect: TRect; 
  end; 
  PResult=^TResult; 
  TOCRResult=packed record 
     Count:integer; 
     Result:array[0..1]of TResult; 
  end; 
  POCRResult=^TOCRResult; 
  TForm1 = class(TForm) 
    PageControl1: TPageControl; 
    TabSheet1: TTabSheet; 
    Image1: TImage; 
    Panel1: TPanel; 
    Button1: TButton; 
    TabSheet2: TTabSheet; 
    Memo1: TMemo; 
    Button2: TButton; 
    procedure Button1Click(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 
 
  function ZWOcrInit:bool;stdcall;external 'ZWOCRdll.dll'; 
  function ZWOcrStart(Hbitmap:HBitmap;rRect:PRect;bAssociate:BOOL;iHZtype:integer;var pOCRResult:pointer):BOOL;stdcall;external 'ZWOCRdll.dll'; 
  procedure ZWOcrStop;stdcall;external 'ZWOCRdll.dll'; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
   p:POCRResult; 
   i:integer; 
   s:string; 
//   r:trect; 
begin 
 {  r.left:=156; 
   r.Right:=507; 
   r.Top:=40; 
   r.Bottom:=100; } 
   if ZWOcrStart(image1.Picture.Bitmap.Handle,nil,true,HZAll_Digit,pointer(p)) then 
   begin 
      memo1.Lines.Clear; 
      for i:=0 to p^.Count-1 do 
      with p.Result[i] do 
      begin 
         setlength(s,CountSuspect*2); 
         move(ChineseSuspect[0],s[1],CountSuspect*2); 
         memo1.Lines.Add(format('%-4s  相似度:%3d%% Left:%-4d Right:%-4d Top:%-4d Bottom:%-4d 候选字:%s',[string(Chinese),Precision, 
            Rect.left,Rect.right,Rect.top,Rect.bottom, s])); 
      end; 
   end; 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
   image1.Picture.LoadFromFile(extractfilepath(paramstr(0))+'test.bmp'); 
   if not ZWOcrInit then 
      showmessage('初始化dll出错,请检查使用许可是否过期或与作者联系.'); 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
var 
   p:POCRResult; 
   i:integer; 
   s:string; 
   r:trect; 
begin 
   r.left:=156; 
   r.Right:=507; 
   r.Top:=40; 
   r.Bottom:=100; 
   if ZWOcrStart(image1.Picture.Bitmap.Handle,@r,true,HZAll_Digit,pointer(p)) then 
   begin 
      memo1.Lines.Clear; 
      for i:=0 to p^.Count-1 do 
      with p.Result[i] do 
      begin 
         setlength(s,CountSuspect*2); 
         move(ChineseSuspect[0],s[1],CountSuspect*2); 
         memo1.Lines.Add(format('%-4s  相似度:%3d%% Left:%-4d Right:%-4d Top:%-4d Bottom:%-4d 候选字:%s',[string(Chinese),Precision, 
            Rect.left,Rect.right,Rect.top,Rect.bottom, s])); 
      end; 
   end; 
end; 
 
end.