home *** CD-ROM | disk | FTP | other *** search
- unit OCRMain;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Menus, LTOCROCX, OleCtrls, LEAD, LEADDEF, LTDLGOCX, LEADOCR, ZONE,
- LEADDlg;
-
- type
- TForm1 = class(TForm)
- DPCommDlg: TSaveDialog;
- MainMenu1: TMainMenu;
- File1: TMenuItem;
- Open1: TMenuItem;
- SaveAs1: TMenuItem;
- Exit1: TMenuItem;
- View1: TMenuItem;
- Normal1: TMenuItem;
- FittoWindow1: TMenuItem;
- OCR1: TMenuItem;
- Recognize1: TMenuItem;
- EditDocument1: TMenuItem;
- SetZone1: TMenuItem;
- ClearDocument1: TMenuItem;
- Preferences1: TMenuItem;
- Preprocessing1: TMenuItem;
- None1: TMenuItem;
- Auto1: TMenuItem;
- AlterManuallyGeneratedZones1: TMenuItem;
- RecognitionMode1: TMenuItem;
- Standard1: TMenuItem;
- Degraded1: TMenuItem;
- VerifierMode1: TMenuItem;
- Word1: TMenuItem;
- Character1: TMenuItem;
- VerifierThreshold1: TMenuItem;
- ProcessHeadersandFooters1: TMenuItem;
- Training1: TMenuItem;
- Language1: TMenuItem;
- English1: TMenuItem;
- German1: TMenuItem;
- French1: TMenuItem;
- Spanish1: TMenuItem;
- Italian1: TMenuItem;
- Dutch1: TMenuItem;
- Swedish1: TMenuItem;
- Norwegian1: TMenuItem;
- Finnish1: TMenuItem;
- Danish1: TMenuItem;
- Portuguese1: TMenuItem;
- Russian1: TMenuItem;
- MinPointSize1: TMenuItem;
- MaxPointSize1: TMenuItem;
- N1: TMenuItem;
- DocumentInfo1: TMenuItem;
- PageInfo1: TMenuItem;
- ZoneInfo1: TMenuItem;
- AutowithAutoZones1: TMenuItem;
- About1: TMenuItem;
- LTOCR: TLeadOcrCtrl;
- LTCommDlg: TLeadDlgCtrl;
- LEAD1: TLeadCtrl;
- procedure Exit1Click(Sender: TObject);
- procedure Normal1Click(Sender: TObject);
- procedure FittoWindow1Click(Sender: TObject);
- procedure Open1Click(Sender: TObject);
- procedure SaveAs1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure ClearDocument1Click(Sender: TObject);
- procedure File1Click(Sender: TObject);
- procedure View1Click(Sender: TObject);
- procedure EditDocument1Click(Sender: TObject);
- procedure SetZone1Click(Sender: TObject);
- procedure Recognize1Click(Sender: TObject);
- procedure OCR1Click(Sender: TObject);
- procedure English1Click(Sender: TObject);
- procedure German1Click(Sender: TObject);
- procedure French1Click(Sender: TObject);
- procedure Spanish1Click(Sender: TObject);
- procedure Italian1Click(Sender: TObject);
- procedure Dutch1Click(Sender: TObject);
- procedure Swedish1Click(Sender: TObject);
- procedure Norwegian1Click(Sender: TObject);
- procedure Finnish1Click(Sender: TObject);
- procedure Danish1Click(Sender: TObject);
- procedure Portuguese1Click(Sender: TObject);
- procedure Russian1Click(Sender: TObject);
- procedure None1Click(Sender: TObject);
- procedure Auto1Click(Sender: TObject);
- procedure AlterManuallyGeneratedZones1Click(Sender: TObject);
- procedure Standard1Click(Sender: TObject);
- procedure Degraded1Click(Sender: TObject);
- procedure Word1Click(Sender: TObject);
- procedure Character1Click(Sender: TObject);
- procedure ProcessHeadersandFooters1Click(Sender: TObject);
- procedure Training1Click(Sender: TObject);
- procedure VerifierThreshold1Click(Sender: TObject);
- procedure MinPointSize1Click(Sender: TObject);
- procedure MaxPointSize1Click(Sender: TObject);
- procedure Lead1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure Lead1RubberBand(Sender: TObject);
- procedure DocumentInfo1Click(Sender: TObject);
- procedure PageInfo1Click(Sender: TObject);
- procedure ZoneInfo1Click(Sender: TObject);
- procedure AutowithAutoZones1Click(Sender: TObject);
- procedure About1Click(Sender: TObject);
- procedure LTOcrRecognizeEvent(Sender: TObject; hBitmap: Integer;
- const pszText, pszMask: string; nStatus, nPercent, nWordLeft,
- nWordTop, nWordWidth, nWordHeight, nGroupLeft, nGroupTop,
- nGroupWidth, nGroupHeight: Smallint);
- private
- { Private declarations }
-
- public
- { Public declarations }
- gbDoc: boolean;
- gbSetZone : boolean;
- gnStacking : integer;
- gnZoneIndex : integer;
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- uses lexicon, About;
-
- {$R *.DFM}
-
- procedure TForm1.Exit1Click(Sender: TObject);
- begin
- if gbDoc = True then
- LTOCR.ClearDoc();
- Close;
- end;
-
- procedure TForm1.Normal1Click(Sender: TObject);
- begin
- Normal1.checked := true;
- FittoWindow1.checked := false;
- Lead1.PaintSizeMode := PAINTSIZEMODE_NORMAL;
- Lead1.ForceRepaint();
- end;
-
- procedure TForm1.FittoWindow1Click(Sender: TObject);
- begin
- FittoWindow1.checked := true;
- Normal1.checked := false;
- Lead1.PaintSizeMode := PAINTSIZEMODE_FIT;
- Lead1.ForceRepaint();
- end;
-
- procedure TForm1.Open1Click(Sender: TObject);
- var
- nRet : integer;
- begin
- LTCommDlg.EnableMethodErrors := false;
- LTCommDlg.FileDlgFlags := 0;
- LTCommDlg.DialogTitle := 'Pick a Document Image to OCR';
- LTCommDlg.Filter := 'All |*.*|TIFF|*.tif;*.tiff';
-
- LTCommDlg.Bitmap := 0; {free any existing bitmap reference}
- LTCommDlg.UIFlags := DLG_FO_AUTOPROCESS + DLG_FO_95STYLE + DLG_FO_MULTIPAGE + DLG_FO_FILEINFO + DLG_FO_SHOWSTAMP + DLG_FO_SHOWPREVIEW;
- nRet := LTCommDlg.FileOpen(handle);
-
- If (nRet = 0) Then
- begin
- Lead1.Bitmap := LTCommDlg.Bitmap;{copy the image to LEAD1}
- FittoWindow1Click(Self);
- LTCommDlg.Bitmap := 0; {release the reference}
-
- Ltocr.DocumentName := LTCommDlg.filename;
- If Training1.Checked = True Then
- Ltocr.Training := LTCommDlg.filename + '.train'
- Else
- Ltocr.Training := '';
- end
- Else
- begin
- if (nRet <> ERROR_DLG_CANCELED) then
- MessageDlg('Error: ' + IntToStr(nRet) + ' loading image ' + LTCommDlg.filename + '!', mtError,
- [mbOk], 0);
- end;
- end;
-
- procedure TForm1.SaveAs1Click(Sender: TObject);
- var
- lRet : longint;
- nFormat : integer;
- savefilter : string;
- begin
- savefilter := 'Ami Pro 2.0|*.ami|Ami Pro 3.0|*.ami';
- savefilter := savefilter + '|' + 'ASCII Smart|*.txt|ASCII Standard|*.txt|ASCII Standard (DOS)|*.txt|ASCII Stripped|*.txt';
- savefilter := savefilter + '|' + 'dBase IV v1.0|*.dbf';
- savefilter := savefilter + '|' + 'DCA/RTF|*.rtf';
- savefilter := savefilter + '|' + 'DisplayWrite 5|*.dw5';
- savefilter := savefilter + '|' + 'Excel (Macintosh)|*.xls|Excel 3.0|*.xls|Excel 40|*.xls|Excel 5.0|*.xls|Excel Office 97|*.xls';
- savefilter := savefilter + '|' + 'FrameMaker|*.doc';
- savefilter := savefilter + '|' + 'HTML (2.0 spec)|*.htm|HTML (SoftQuad)|*.htm|HTML (Netscape additions)|*.htm';
- savefilter := savefilter + '|' + 'Interleaf|*.doc';
- savefilter := savefilter + '|' + 'Lotus 1-2-3|*.123';
- savefilter := savefilter + '|' + 'Lotus Word Pro|*.lwp';
- savefilter := savefilter + '|' + 'MultiMate Advantage II|*.mma';
- savefilter := savefilter + '|' + 'Postscript|*.eps';
- savefilter := savefilter + '|' + 'Professional Write 2.0|*.doc|Professional Write 2.2|*.doc';
- savefilter := savefilter + '|' + 'Quattro Pro|*.pro';
- savefilter := savefilter + '|' + 'Rich Text|*.rtf|Rich Text (Macintosh)|*.rtf|Rich Text (Word 6.0)|*.rtf';
- savefilter := savefilter + '|' + 'Windows Write|*.wri';
- savefilter := savefilter + '|' + 'Word for Windows 2.x|*.doc|Word for Windows 6.0|*.doc|Word Office 97|*.doc';
- savefilter := savefilter + '|' + 'WordPerfect 4.2 (DOS)|*.doc|WordPerfect (Windows)|*.doc|WordPerfect 6.0 (Windows)|*.doc';
- savefilter := savefilter + '|' + 'WordPerfect 6.1 (Windows)|*.doc|WordPerfect 7.x (Windows)|*.doc';
- savefilter := savefilter + '|' + 'WordStar 1.x|*.doc';
- savefilter := savefilter + '|' + 'Works|*.doc';
- savefilter := savefilter + '|' + 'Xerox XDOC|*.xdc';
-
- DPCommDlg.Filter := savefilter;
- If(DPCommDlg.Execute() = True) then
- begin
- nFormat := FILE_AMI_PRO_20 + DPCommDlg.FilterIndex - 1;
- lRet := Ltocr.SaveDoc(DPCommDlg.filename, nFormat);
- If lRet <> 0 Then
- MessageDlg('Error: ' + IntToStr(lRet) + ' saving document!', mtError, [mbOk], 0);
- end;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- Lead1.UnlockSupport(L_SUPPORT_EXPRESS, L_KEY_EXPRESS);
- LTOcr.UnlockSupport(L_SUPPORT_EXPRESS, L_KEY_EXPRESS);
- LTOcr.UnlockSupport(L_SUPPORT_OCR, L_KEY_OCR);
-
- Lead1.BitonalScaling := BITONALSCALING_SCALETOGRAY;
- LTOcr.Visible:=False;
- gbDoc := False;
- gbSetZone := False;
- gnStacking := 1;
- gnZoneIndex := 1;
-
- Normal1.Checked := True;
- FittoWindow1.Checked := False;
-
- Auto1.Checked := True;
- Ltocr.PreprocessingMode := OCRPP_ORIENTATION + OCRPP_TEXT_ORIENTATION + OCRPP_SKEW + OCRPP_AUTO_FAX;
- Standard1.Checked := True;
- Ltocr.VerifierMode := OCRVER_WORD;
- Ltocr.VerifierThreshold := 750;
- Word1.Checked := True;
- Ltocr.SloppyManual := True;
-
- {set minpointsize and maxpointsize}
- Ltocr.MinPointSize := 8;
- Ltocr.MaxPointSize := 72;
-
- {set preprocessor text orientation limit to 500 words}
- Ltocr.TextOrientLimit := 500;
-
- {set the language specific properties}
- Ltocr.Questionable := ''; {the default}
- Ltocr.Unrecognized := '~'; {the default}
- Ltocr.LeftSingleQuote := Chr(39); {the default, "'"}
- Ltocr.RightSingleQuote := Chr(39); {the default, "'"}
- Ltocr.LeftDoubleQuote := Chr(34); {the default, """}
- Ltocr.RightDoubleQuote := Chr(34); {the default, """}
-
- Ltocr.Decimal := '.'; {US convention}
- Ltocr.Thousands := ','; {US convention}
-
- Lead1.AutoRepaint := False;
- Lead1.BackErase := False;
- end;
-
- procedure TForm1.ClearDocument1Click(Sender: TObject);
- begin
- Ltocr.ClearDoc();
- gbDoc := False;
- end;
-
- procedure TForm1.File1Click(Sender: TObject);
- begin
- SaveAs1.Enabled := gbDoc;
- end;
-
- procedure TForm1.View1Click(Sender: TObject);
- var
- bEnable : boolean;
- begin
- If Lead1.Bitmap > 0 Then
- bEnable := True
- Else
- bEnable := False;
-
- Normal1.Enabled := bEnable;
- FittoWindow1.Enabled := bEnable;
- end;
-
- procedure TForm1.EditDocument1Click(Sender: TObject);
- begin
- Ltocr.EditDoc(); {start the LEADTOOLS OCR Editor}
- end;
-
- procedure TForm1.SetZone1Click(Sender: TObject);
- begin
- gbSetZone := True;
- Lead1.MousePointer := 2;
- end;
-
- procedure TForm1.Recognize1Click(Sender: TObject);
- Var
- lRet : longint;
- begin
- {assign the bitmap for OCR}
- Ltocr.Bitmap := Lead1.Bitmap;
-
- Screen.Cursor := crHourglass;
- lRet := Ltocr.RecognizeOCR(OCRFLAG_CALLBACK_AUTO);
- // Ltocr.EnableRecognizeEvent := True;
- // lRet := Ltocr.RecognizeOCR(OCRFLAG_NONE);
- Screen.Cursor := crDefault;
- If (lRet <> 0) Then
- begin
- MessageDlg('Error: ' + IntToStr(lRet) + ' during recognition!', mtError, [mbOk], 0);
- Ltocr.ClearDoc(); {clear the document}
- gbDoc := False;
- end
- Else
- gbDoc := True;
- end;
-
- procedure TForm1.OCR1Click(Sender: TObject);
- var
- bEnable : boolean;
- begin
- If Lead1.Bitmap > 0 Then
- bEnable := True
- Else
- bEnable := False;
-
- Recognize1.Enabled := bEnable;
- if AutoWithAutoZones1.Checked = True then
- SetZone1.Enabled := False
- else
- SetZone1.Enabled := bEnable;
- EditDocument1.Enabled := gbDoc;
- ClearDocument1.Enabled := gbDoc;
- DocumentInfo1.Enabled := gbDoc;
- PageInfo1.Enabled := gbDoc;
- ZoneInfo1.Enabled := gbDoc;
- end;
-
- procedure TForm1.English1Click(Sender: TObject);
- begin
- English1.Checked := True;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_ENGLISH;
- end;
-
- procedure TForm1.German1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := True;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_GERMAN;
- end;
-
- procedure TForm1.French1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := True;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_FRENCH;
- end;
-
- procedure TForm1.Spanish1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := True;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_SPANISH;
- end;
-
- procedure TForm1.Italian1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := True;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_ITALIAN;
- end;
-
- procedure TForm1.Dutch1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := True;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_DUTCH;
- end;
-
- procedure TForm1.Swedish1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := True;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_SWEDISH;
- end;
-
- procedure TForm1.Norwegian1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := True;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_NORWEGIAN;
- end;
-
- procedure TForm1.Finnish1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := True;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_FINNISH;
- end;
-
- procedure TForm1.Danish1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := True;
- Portuguese1.Checked := False;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_DANISH;
- end;
-
- procedure TForm1.Portuguese1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := True;
- Russian1.Checked := False;
- Ltocr.Language := OCRLNG_PORTUGUESE;
- end;
-
- procedure TForm1.Russian1Click(Sender: TObject);
- begin
- English1.Checked := False;
- German1.Checked := False;
- French1.Checked := False;
- Spanish1.Checked := False;
- Italian1.Checked := False;
- Dutch1.Checked := False;
- Swedish1.Checked := False;
- Norwegian1.Checked := False;
- Finnish1.Checked := False;
- Danish1.Checked := False;
- Portuguese1.Checked := False;
- Russian1.Checked := True;
- Ltocr.Language := OCRLNG_RUSSIAN;
- end;
-
- procedure TForm1.None1Click(Sender: TObject);
- begin
- Ltocr.PreprocessingMode := OCRPP_NONE;
- None1.Checked := True;
- Auto1.Checked := False;
- AutoWithAutoZones1.Checked := False;
- SetZone1.Enabled := True;
- end;
-
- procedure TForm1.Auto1Click(Sender: TObject);
- begin
- Ltocr.PreprocessingMode := OCRPP_ORIENTATION + OCRPP_TEXT_ORIENTATION + OCRPP_SKEW + OCRPP_AUTO_FAX;
- None1.Checked := False;
- Auto1.Checked := True;
- Autowithautozones1.checked := False;
- SetZone1.Enabled := True;
- end;
-
- procedure TForm1.AlterManuallyGeneratedZones1Click(Sender: TObject);
- begin
- AlterManuallyGeneratedZones1.Checked := Not AlterManuallyGeneratedZones1.Checked;
- Ltocr.SloppyManual := AlterManuallyGeneratedZones1.Checked;
- end;
-
- procedure TForm1.Standard1Click(Sender: TObject);
- begin
- Ltocr.RecognitionMode := OCRREC_STANDARD;
- Degraded1.Checked := False;
- Standard1.Checked := True;
- end;
-
- procedure TForm1.Degraded1Click(Sender: TObject);
- begin
- Ltocr.RecognitionMode := OCRREC_DEGRADED;
- Degraded1.Checked := True;
- Standard1.Checked := False;
- end;
-
- procedure TForm1.Word1Click(Sender: TObject);
- begin
- Ltocr.VerifierMode := OCRVER_WORD;
- Character1.Checked := False;
- Word1.Checked := True;
- end;
-
- procedure TForm1.Character1Click(Sender: TObject);
- begin
- Ltocr.VerifierMode := OCRVER_CHAR;
- Character1.Checked := True;
- Word1.Checked := False;
- end;
-
- procedure TForm1.ProcessHeadersandFooters1Click(Sender: TObject);
- begin
- ProcessHeadersandFooters1.Checked := Not ProcessHeadersandFooters1.Checked;
- Ltocr.HeaderFooterProcess := ProcessHeadersandFooters1.Checked;
- end;
-
- procedure TForm1.Training1Click(Sender: TObject);
- begin
- Training1.Checked := Not Training1.Checked;
-
- If Training1.Checked = True Then
- Ltocr.Training := LTCommDlg.filename + '.train'
- Else
- Ltocr.Training := '';
- end;
-
- procedure TForm1.VerifierThreshold1Click(Sender: TObject);
- var
- threshold : longint;
- instr : string;
- begin
- instr := InputBox('Verifier Threshold', 'Enter Value', IntToStr(LTOCR.VerifierThreshold));
-
- threshold := StrToInt(instr);
- If ((threshold >= 0) And (threshold <= 999)) Then
- Ltocr.VerifierThreshold := threshold;
- end;
-
- procedure TForm1.MinPointSize1Click(Sender: TObject);
- var
- pointsize : longint;
- instr : string;
- begin
- instr := InputBox('Minimum PointSize', 'Enter Value', IntToStr(LTOCR.MinPointSize));
-
- pointsize := StrToInt(instr);
- If ((pointsize >= 0) And (pointsize <= 999)) Then
- Ltocr.MinPointSize := pointsize;
- end;
-
- procedure TForm1.MaxPointSize1Click(Sender: TObject);
- var
- pointsize : longint;
- instr : string;
- begin
- instr := InputBox('Maximum PointSize', 'Enter Value', IntToStr(LTOCR.MaxPointSize));
-
- pointsize := StrToInt(instr);
- If ((pointsize >= 0) And (pointsize <= 999)) Then
- Ltocr.MaxPointSize := pointsize;
- end;
-
- procedure TForm1.Lead1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- If gbSetZone = True Then
- begin
- Lead1.MousePointer := 2;
- Lead1.AutoRubberBand := True;
- end;
- end;
-
- procedure TForm1.Lead1RubberBand(Sender: TObject);
- var
- lRet : integer;
- zonetop : single;
- zoneleft : single;
- zonebottom : single;
- zoneright : single;
- nType : integer;
- zoomfactor : real;
- nLexicalClass : longint;
-
- msgstr : string;
-
- begin
- gbSetZone := False;
- Lead1.MousePointer := 0;
- Lead1.AutoRubberBand := False;
-
- {first, setup the points that compose the zone's polygon}
- zoomfactor := Lead1.DstWidth / Lead1.BitmapWidth;
- zonetop := Round((Lead1.RubberBandTop - Lead1.DstTop) / zoomfactor);
- zoneleft := Round((Lead1.RubberBandLeft - Lead1.DstLeft) / zoomfactor);
- zonebottom := Round(Lead1.RubberBandHeight / zoomfactor + zonetop);
- zoneright := Round(Lead1.RubberBandWidth / zoomfactor + zoneleft);
-
- msgstr := IntToStr(Round(zoneleft));
- msgstr := msgstr + chr(13) + IntToStr(Round(zonetop));
- msgstr := msgstr + chr(13) + IntToStr(Round(zoneright));
- msgstr := msgstr + chr(13) + IntToStr(Round(zonebottom));
-
- MessageDlg(msgstr, mtInformation, [mbOk], 0);
-
- Ltocr.PolygonSize := 4;
- Ltocr.PolygonX[0] := Round(zoneleft);
- Ltocr.PolygonX[1] := Round(zoneright);
- Ltocr.PolygonX[2] := Round(zoneright);
- Ltocr.PolygonX[3] := Round(zoneleft);
-
- Ltocr.PolygonY[0] := Round(zonetop);
- Ltocr.PolygonY[1] := Round(zonetop);
- Ltocr.PolygonY[2] := Round(zonebottom);
- Ltocr.PolygonY[3] := Round(zonebottom);
-
- {get the zone type}
- ZoneType.ShowModal;
- nType := ZoneType.nType;
-
- {get the lexical class}
- LexClass.ShowModal;
- nLexicalClass := LexClass.nLexicalClass;
-
- {set the OCR Zone}
- lRet := Ltocr.SetZone(gnZoneIndex, nType, Ltocr.Language, nLexicalClass, 0, OCRLEX_ABSOLUTE, gnStacking);
- { lRet := Ltocr.SetZone(gnZoneIndex, nType, Ltocr.Language, 0, 0, OCRLEX_NO_LEXICAL, gnStacking);}
- If (lRet = 0) Then
- begin
- gnStacking := gnStacking + 1;
- gnZoneIndex := gnZoneIndex + 1;
- end;
- end;
-
- procedure TForm1.DocumentInfo1Click(Sender: TObject);
- var
- nNbPages : short;
- begin
- {get the number of pages in the document}
- Ltocr.InfoDoc(nNbPages);
- MessageDlg('Document contains ' + IntToStr(nNbPages) + ' pages.', mtInformation, [mbOk], 0);
- end;
-
- procedure TForm1.PageInfo1Click(Sender: TObject);
- var
- npage : short;
- nNbZones : short;
- instr : string;
- begin
- instr := InputBox('Page#', 'Enter Value', '1');
- npage := StrToInt(instr);
- Ltocr.InfoPage(npage, nNbZones);
- MessageDlg('Page ' + IntToStr(npage) + ' contains ' + IntToStr(nNbZones) + ' zones.', mtInformation, [mbOk], 0);
- end;
-
- procedure TForm1.ZoneInfo1Click(Sender: TObject);
- var
- npage : short;
- nzone : short;
- zonetype : short;
- zoneleft : short;
- zonetop : short;
- zonewidth : short;
- zoneheight : short;
- instr : string;
- msgstr : string;
- ztypestr : string;
- bcontinue : boolean;
- begin
- instr := InputBox('Page#', 'Enter Value', '1');
- npage := StrToInt(instr);
- instr := InputBox('Zone#', 'Enter Value', '1');
- nzone := StrToInt(instr);
- Ltocr.InfoZone(npage, nzone, zonetype, zoneleft, zonetop, zonewidth, zoneheight);
- bcontinue := True;
- Case zonetype of
- DOCZONE_TEXT:
- ztypestr := 'Text';
- DOCZONE_IMAGE:
- ztypestr := 'Image';
- DOCZONE_TABLE:
- ztypestr := 'Table';
- Else bcontinue := False;
- End;
-
- if(bcontinue = True) then
- begin
- msgstr := 'Zone ' + IntToStr(nzone) + ' on page ' + IntToStr(npage) + ' is ' + ztypestr + Chr(13);
- msgstr := msgstr + 'left: ' + IntToStr(zoneleft) + Chr(13);
- msgstr := msgstr + 'top: ' + IntToStr(zonetop) + Chr(13);
- msgstr := msgstr + 'width: ' + IntToStr(zonewidth) + Chr(13);
- msgstr := msgstr + 'height: ' + IntToStr(zoneheight);
- MessageDlg(msgstr, mtInformation, [mbOk], 0);
- end
- else
- MessageDlg('Bad Page or Zone.', mtError, [mbOk], 0);
- end;
-
- procedure TForm1.AutowithAutoZones1Click(Sender: TObject);
- begin
- Ltocr.PreprocessingMode := OCRPP_AUTO_SEGMENTATION + OCRPP_ORIENTATION + OCRPP_TEXT_ORIENTATION + OCRPP_SKEW + OCRPP_AUTO_FAX;
- None1.Checked := False;
- Auto1.Checked := False;
- AutoWithAutoZones1.Checked := True;
- SetZone1.Enabled := False;
- end;
-
- procedure TForm1.About1Click(Sender: TObject);
- begin
- AboutBox.ShowModal;
- end;
-
- procedure TForm1.LTOcrRecognizeEvent(Sender: TObject; hBitmap: Integer;
- const pszText, pszMask: string; nStatus, nPercent, nWordLeft, nWordTop,
- nWordWidth, nWordHeight, nGroupLeft, nGroupTop, nGroupWidth,
- nGroupHeight: Smallint);
- var
- x : Integer;
- nFirst : Integer;
- nLast : Integer;
- val2test : Integer;
- testres : Integer;
- szMask : array[0..180] of Char;
- verstring : string;
- label foundfirst, foundlast;
- begin
- {'this event simply tests the pszMask and then accepts the pszText accordingly}
- {'to be useful, your event should present pszText to the user for verification}
- {'depending on the char flags in pszMask.}
-
- If (nStatus = OCRSTATUS_QUESTION) Then
- begin
- StrPCopy(szMask, pszMask);
- {first, lets find the first char in the string that needs verification}
- For x := 0 To Length(pszText)-1 Do
- begin
- val2test := integer(szMask[x]);
- testres := val2test;
- testres := testres and (OCRCHAR_CURRENT_WORD or OCRCHAR_CURRENT_GROUP or OCRCHAR_BEGIN_GROUP);
- if(testres = (OCRCHAR_CURRENT_WORD or OCRCHAR_CURRENT_GROUP or OCRCHAR_BEGIN_GROUP)) then
- goto foundfirst;
- end;
- foundfirst:
- nFirst := x;
-
- {now, find the last char in the string that needs verification}
- For x := nFirst + 1 to Length(pszText)-1 Do
- begin
- val2test := integer(szMask[x]);
- testres := val2test;
- if (((testres and OCRCHAR_CURRENT_WORD) = 0) or ((testres and OCRCHAR_CURRENT_GROUP) = 0)) then
- begin
- nLast := x - 1;
- GoTo foundlast;
- End;
- end;
- nLast := x;
- foundlast:
- nFirst:=nFirst+1;
- nLast:=nLast+1;
- {Finally, fill TextRecognizeEvent property with the original}
- {chars in question (i.e. accept them), and return}
- verstring := Copy(pszText, nFirst, nLast-nFirst+1);
- Ltocr.TextRecognizeEvent := verstring;
- Ltocr.StatusRecognizeEvent := OCRCMD_ACCEPT_WORD;
- End;
- end;
-
- end.
-