unit ErrList; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, Menus, StdCtrls, Buttons, ComCtrls, ExtCtrls,inifiles, iisUnit,iis_ImageProcess, EnImgScr,mpsBarco,BarcodesFinder, EnMisc, EnDiGrph, LogFile; type TErrlistForm = class(TForm) Panel2: TPanel; Splitter3: TSplitter; Panel3: TPanel; ErrReasonGB: TGroupBox; ErrListLV: TListView; Panel4: TPanel; Panel5: TPanel; Panel8: TPanel; Label3: TLabel; Panel6: TPanel; Panel9: TPanel; Label4: TLabel; Splitter1: TSplitter; SitePreBt: TBitBtn; SiteNextBt: TBitBtn; RelaPreBt: TBitBtn; RelaNextBt: TBitBtn; Panel1: TPanel; ImmediateBt: TButton; ExitBt: TButton; Panel7: TPanel; DeleteBt: TButton; NoteBt: TButton; Timer1: TTimer; RejectBt: TButton; EnforceBt: TButton; ImageScrollBox1: TImageScrollBox; ImageScrollBox2: TImageScrollBox; ImageScrollBox3: TImageScrollBox; Button1: TButton; LogFile1: TLogFile; procedure ExitBtClick(Sender: TObject); procedure ImmediateBtClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure SiteNextBtClick(Sender: TObject); procedure SitePreBtClick(Sender: TObject); procedure RelaPreBtClick(Sender: TObject); procedure RelaNextBtClick(Sender: TObject); procedure ErrListLVClick(Sender: TObject); procedure ErrListLVMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure DeleteBtClick(Sender: TObject); procedure ErrListLVSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); procedure ErrListLVKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure NoteBtClick(Sender: TObject); procedure Splitter1Moved(Sender: TObject); procedure Panel4Resize(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure RejectBtClick(Sender: TObject); procedure EnforceBtClick(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } Siteidx : Integer; SiteList : TStringlist; RelaSiteidx : Integer; RelaSiteList : TStringlist; Ingnore : Boolean; //¥i¤£¥i§R°£ NowIndex : String; //²{¦bªº¯Á¤Þ MyHotkeyid1:integer; MpsBarcodeinf : TMpsBarcodeinf; //********¤Q¦r©w¦ìÂI¸ê°T******** UpLPoint : Tpoint; //¥ª¤W¤èªº¤Q¦rÂI UpRPoint : Tpoint; //¥k¤W¤èªº¤Q¦rÂI DownLPoint : Tpoint; //¥ª¤U¤èªº¤Q¦rÂI DownRPoint : Tpoint; //¥k¤U¤èªº¤Q¦rÂI Point_Width : String; //¤Q¦rÂIªº¼e Point_Height : String; //¤Q¦rÂIªº°ª //********¤Q¦r©w¦ìÂI¸ê°T******** //********Ãö«Y¼v¹³¤Q¦r©w¦ìÂI¸ê°T******** UpLPoint_Rela : Tpoint; //¥ª¤W¤èªº¤Q¦rÂI UpRPoint_Rela : Tpoint; //¥k¤W¤èªº¤Q¦rÂI DownLPoint_Rela : Tpoint; //¥ª¤U¤èªº¤Q¦rÂI DownRPoint_Rela : Tpoint; //¥k¤U¤èªº¤Q¦rÂI //********¤Q¦r©w¦ìÂI¸ê°T******** ISB_BW: TImageScrollBox; {SP1:TShape;//20170630 ·s¥[ SP2:TShape;//20170630 ·s¥[ SP3:TShape;//20170630 ·s¥[ SP4:TShape;//20170630 ·s¥[ SP5:TShape;//20170630 ·s¥[ SP6:TShape;//20170630 ·s¥[ SP7:TShape;//20170630 ·s¥[ SP8:TShape;//20170630 ·s¥[ } SP : TShape; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; Procedure ShowOMRErr(Idx:Integer); //µe­±¤W¨q¥XOMRÀˮ֥¢±Ñ Procedure ShowRelaOMRErr(Relaidx:Integer); //µe­±¤W¨q¥XÃö«YOMRÀˮ֥¢±Ñ Procedure GetOMRErrini(Index:String); //¨úÀˮ֥¢±Ñini Procedure InitialData; procedure ImageScrollBox1NewGraphic(const Graphic: TDibGraphic); function logTimeString: String; //«ì´_¦¨¥¼¿ï¨úª¬ºA public { Public declarations } iniPath : String; end; var ErrlistForm: TErrlistForm; implementation uses CB_IMGPSScanImp; {$R *.dfm} procedure TErrlistForm.WMHotKey(var Msg: TWMHotKey); begin if (Msg.HotKey = MyHotkeyid1) and DeleteBt.Enabled then DeleteBtClick(nil); end; procedure TErrlistForm.NoteBtClick(Sender: TObject); begin Ch_WriteNote := True; ErrIndex := ErrListLV.ItemIndex; ModalResult := mrCancel; end; procedure TErrlistForm.Panel4Resize(Sender: TObject); begin Timer1.Enabled := False; ImageScrollBox1.FileName := ''; ImageScrollBox2.FileName := ''; Panel6.Width := Panel4.Width Div 2; //ErrListLVClick(nil); Timer1.Enabled := True; end; procedure TErrlistForm.RejectBtClick(Sender: TObject); var S : TStringlist; i : Integer; begin if messagedlg(_Msg('¬O§_½T©w°h¥ó??'),mtConfirmation,[mbyes,mbcancel],0) = mrcancel then Exit; S := TStringlist.Create; try if FileExists(iniPath+'RemoveMemo.dat') then S.LoadFromFile(iniPath+'RemoveMemo.dat'); for i := 0 to ErrListLv.Items.Count - 1 do begin S.Add(ErrListLv.Items.Item[i].Caption); end; S.SaveToFile(iniPath+'RemoveMemo.dat'); Finally S.Free; end; RejectCase := True; ModalResult := mrOK; end; procedure TErrlistForm.Button1Click(Sender: TObject); begin ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+ 'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+ 'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+ 'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y)); end; procedure TErrlistForm.DeleteBtClick(Sender: TObject); var ini : TiniFile; S,S1 : TStringlist; i : Integer; begin InitialData; S := TStringlist.Create; S1 := TStringlist.Create; ini := Tinifile.Create(iniPath+'Checkerr.ini'); try if FileExists(iniPath+'RemoveMemo.dat') then S.LoadFromFile(iniPath+'RemoveMemo.dat'); Ingnore := ini.ReadBool(NowIndex,'Ingnore',False); if True then begin ini.WriteBool(NowIndex,'Del',True); S.Add(ini.ReadString(NowIndex,'Reason','')); S.SaveToFile(iniPath+'RemoveMemo.dat'); i := ErrListLV.ItemIndex; ErrListLV.Items.Delete(ErrListLV.ItemIndex); if ErrListLV.Items.Count = 0 then begin ImmediateBt.Enabled := True; S1.Add('Y'); S1.SaveToFile(iniPath+'OMRCheckOk.dat'); end else begin if i <= ErrListLV.Items.Count -1 then begin ErrListLV.ItemIndex := i; ErrListLVclick(nil); end; end; end else begin Showmessage(Format(_msg('%s¦³¤£¥i©¿²¤¶µ¥ØµLªk±j­¢°e¥ó'),[''])); end; finally ini.Free; S.Free; S1.Free; end; end; procedure TErrlistForm.EnforceBtClick(Sender: TObject); var ini : TiniFile; S,S1 : TStringlist; i : Integer; idx : String; Ingnore : Boolean; begin InitialData; S := TStringlist.Create; S1 := TStringlist.Create; ini := Tinifile.Create(iniPath+'Checkerr.ini'); try if FileExists(iniPath+'RemoveMemo.dat') then S.LoadFromFile(iniPath+'RemoveMemo.dat'); for i := ErrListLV.Items.Count - 1 downto 0 do begin idx := ErrListLV.Items.Item[i].SubItems.Strings[0]; Ingnore := ini.ReadBool(idx,'Ingnore',False); if Ingnore then //¥i©¿²¤ªº¤~¥i§R begin ini.WriteBool(idx,'Del',True); S.Add(ini.ReadString(idx,'Reason','')); S.SaveToFile(iniPath+'RemoveMemo.dat'); ErrListLV.Items.Delete(i); if ErrListLV.Items.Count = 0 then begin ImmediateBt.Enabled := True; S1.Add('Y'); S1.SaveToFile(iniPath+'OMRCheckOk.dat'); end; end Else begin Showmessage(Format(_msg('%s¦³¤£¥i©¿²¤¶µ¥ØµLªk±j­¢°e¥ó'),[''])); end; end; finally ini.Free; S.Free; S1.Free; end; end; procedure TErrlistForm.ErrListLVClick(Sender: TObject); begin InitialData; if ErrListLV.Selected = nil then Exit; NowIndex := ErrListLV.Items.Item[ErrListLV.Selected.Index].SubItems.Strings[0]; GetOMRErrini(NowIndex); end; procedure TErrlistForm.ErrListLVKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = 38) or (key = 40) then ErrListLVClick(Self); end; procedure TErrlistForm.ErrListLVMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = TMouseButton(MbRight) then begin ErrListLVClick(Self); end; end; procedure TErrlistForm.ErrListLVSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); begin //ErrListLVClick(nil); end; procedure TErrlistForm.ExitBtClick(Sender: TObject); begin ModalResult := mrCancel; end; procedure TErrlistForm.FormCreate(Sender: TObject); var i : Integer; begin MyHotkeyid1 := GlobalAddAtom('MyHotkeyid1')- $C000; RegisterHotKey(Handle, MyHotkeyid1,MOD_CONTROL,Ord('D')); PostMessage(Handle,WM_ACTIVATE,WA_CLICKACTIVE,0); SiteList := TStringlist.Create; RelaSiteList := TStringlist.Create; ISB_BW:=TImageScrollBox.Create(Self); for i := 1 to 30 do begin Sp := TShape.Create(self); Sp.Name := 'SP'+inttostr(i); end; for i := 1 to 30 do begin Sp := TShape.Create(self); Sp.Name := 'SP_R'+inttostr(i); end; {SP1:= TShape.Create(self); SP1.Name := 'SP1'; SP2:= TShape.Create(self); SP2.Name := 'SP2'; SP3:= TShape.Create(self); SP3.Name := 'SP3'; SP4:= TShape.Create(self); SP4.Name := 'SP4'; SP5:= TShape.Create(self); SP5.Name := 'SP5'; SP6:= TShape.Create(self); SP6.Name := 'SP6'; SP7:= TShape.Create(self); SP7.Name := 'SP7'; SP8:= TShape.Create(self); SP8.Name := 'SP8'; } end; procedure TErrlistForm.FormDestroy(Sender: TObject); var i : Integer; begin SiteList.Free; RelaSiteList.Free; ISB_BW.Free; for i := 1 to 30 do begin TShape(FindComponent('SP'+inttostr(i))).Free; end; for i := 1 to 30 do begin TShape(FindComponent('SP_R'+inttostr(i))).Free; end; {SP1.Free; SP2.Free; SP3.Free; SP4.Free; SP5.Free; SP6.Free; SP7.Free; SP8.Free;} end; procedure TErrlistForm.ImmediateBtClick(Sender: TObject); begin ModalResult := mrOK; LogFile1.LogToFile(logTimeString+'¥ß§Y°e¥ó'); end; function TErrlistForm.logTimeString: String; begin Result:=FormatDateTime('yyyymmdd hh:mm:ss',now)+' '; end; procedure TErrlistForm.RelaNextBtClick(Sender: TObject); begin Inc(RelaSiteidx); Label4.Caption := Format('%d/%d',[RelaSiteidx,RelaSiteList.Count]); ShowRelaOMRErr(RelaSiteidx); RelaPreBt.Enabled := False; RelaNextBt.Enabled := False; IF RelaSiteidx > 1 then RelaPreBt.Enabled := True; IF RelaSiteidx < RelaSiteList.Count Then RelaNextBt.Enabled := True; end; procedure TErrlistForm.RelaPreBtClick(Sender: TObject); begin Dec(RelaSiteidx); Label4.Caption := Format('%d/%d',[RelaSiteidx,RelaSiteList.Count]); ShowRelaOMRErr(RelaSiteidx); RelaPreBt.Enabled := False; RelaNextBt.Enabled := False; IF RelaSiteidx > 1 then RelaPreBt.Enabled := True; IF RelaSiteidx < RelaSiteList.Count Then RelaNextBt.Enabled := True; end; Procedure TErrlistForm.InitialData; //«ì´_¦¨¥¼¿ï¨úª¬ºA var i : Integer; begin SitePreBt.Enabled := False; SiteNextBt.Enabled := False; RelaPreBt.Enabled := False; RelaNextBt.Enabled := False; SiteList.Clear; RelaSiteList.Clear; ImageScrollBox1.FileName := ''; ImageScrollBox2.FileName := ''; Label3.Caption := Format('%d/%d',[0,0]); Label4.Caption := Format('%d/%d',[0,0]); Siteidx := 1; RelaSiteidx := 1; DeleteBt.Enabled := False; for i := 1 to 30 do begin TShape(FindComponent('SP'+inttostr(i))).Parent := nil; end; for i := 1 to 30 do begin TShape(FindComponent('SP_R'+inttostr(i))).Parent := nil; end; end; Procedure TErrlistForm.GetOMRErrini(Index:String); //¨úÀˮ֥¢±Ñini var ini : Tinifile; FileName,Site : String; RelaFileName,RelaSite : String; Anchor,Anchor1 : String; SizeStr : String; NowW,NowH : Integer; begin ini := Tinifile.Create(iniPath+'Checkerr.ini'); try //¨úiniªº­È¥X¨Ó// FileName := ini.ReadString(Index,'FileName',''); Site := ini.ReadString(Index,'Site',''); RelaFileName := ini.ReadString(Index,'RelaFileName',''); RelaSite := ini.ReadString(Index,'RelaSite',''); Ingnore := ini.ReadBool(Index,'Ingnore',False); Anchor := ini.ReadString(Index,'Anchor','NONE'); Anchor1 := ini.ReadString(Index,'RelaAnchor','NONE'); //¨úiniªº­È¥X¨Ó// //¶ë¦ì¸m¨ìlist¸Ì SiteList.Delimiter := '@'; SiteList.DelimitedText := Site; RelaSiteList.Delimiter := '@'; RelaSiteList.DelimitedText := RelaSite; //¶ë¦ì¸m¨ìlist¸Ì if RelaSitelist.Count > 0 then //¦³Ãö«Y¦ì¸m­nÅã¥Ü begin Panel6.Visible := True; Splitter1.Visible := True; end Else begin Panel6.Visible := False; //Ãö«Yµøµ¡ Splitter1.Visible := False; end; Label3.Caption := Format('%d/%d',[Siteidx,SiteList.Count]); Label4.Caption := Format('%d/%d',[RelaSiteidx,RelaSiteList.Count]); if SiteList.Count > 1 then SiteNextBt.Enabled := True; if RelaSiteList.Count > 1 then RelaNextBt.Enabled := True; DeleteBt.Enabled := Ingnore; if FileName <> '' then //¦³­nÅã¥Ü¼v¹³ begin ImageScrollBox1.LoadFromFile(FileName,1); //FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,'NONE'); //====================== ImageScrollBox1.LoadFromFile(FileName,1); ImageScrollBox1NewGraphic(ImageScrollBox1.Graphic); FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR); ImageResize(ImageScrollBox1.Graphic,ISB_BW.Graphic.Width,ISB_BW.Graphic.Height); FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR); //========================== {ShowMessage('UpLPoint='+IntToStr(UpLPoint.X)+','+IntToStr(UpLPoint.Y)+#10#13+ 'UpRPoint='+IntToStr(UpRPoint.X)+','+IntToStr(UpRPoint.Y)+#10#13+ 'DownLPoint='+IntToStr(DownLPoint.X)+','+IntToStr(DownLPoint.Y)+#10#13+ 'DownRPoint='+IntToStr(DownRPoint.X)+','+IntToStr(DownRPoint.Y)); } ShowOMRErr(Siteidx); end; if (RelaFileName <> '') and FileExists(RelaFileName) then //¦³Ãö«Y¼v¹³ begin //if MpsViewX2.FileName <> RelaFileName then //begin ImageScrollBox2.LoadFromFile(RelaFileName,1); //FindPoint(ImageScrollBox2.Graphic,UpLPoint_Rela,UpRPoint_Rela,DownLPoint_Rela,''); FindPoint(ImageScrollBox2.Graphic,UpLPoint,UpRPoint,DownLPoint,NowW,NowH,ANCHOR); //GetFFPoint(MpsViewX2,RelaFileName); //¨úFreeFormªº¤Q¦rÂI¤Î°ª«× //end; ShowRelaOMRErr(RelaSiteIdx); end; finally ini.Free; end; end; Procedure TErrlistForm.ShowOMRErr(Idx:Integer); //µe­±¤W¨q¥XOMRÀˮ֥¢±Ñ var Site : String; iRect : TRect; SP:TShape; begin if Idx > SiteList.Count then Exit; Site := SiteList.Strings[Idx-1]; //ShowMessage('Site'+Site); //Site := TranslationRect(Site,MpsViewX1.GetImageDpi,'VIEW'); iRect := CM_Str2Rect(Site,ImageScrollBox1.Graphic.XDotsPerInch,UpLPoint); //ShowMessage('Idx='+IntToStr(Idx)); //ShowMessage(IntToStr(iRect.Left)+','+IntToStr(iRect.Top)+','+IntToStr(iRect.Right)+','+IntToStr(iRect.Bottom)); SP := TShape(FindComponent('SP'+inttostr(Idx))); //20170327 ¦b°j°é¤¤­n¨Ï¥Î¦h²Õ¾B¸n SP.Brush.Color :=$00FEFAAD; SP.Parent := ImageScrollBox1; SP.Pen.Style := psSolid; SP.Pen.Color := $00FEFAAD; SP.Pen.Width := 1; SP.Pen.Mode := pmMask; SP.Left := iRect.Left; SP.Top := iRect.Top; SP.Width := iRect.Right-iRect.Left; SP.Height := iRect.Bottom-iRect.Top; //ImageScrollBox1.Redraw(True); //ShowKeyinRect(ImageScrollBox1,iRect); SetKeyinRect_New(ImageScrollBox1,Site,'','',UpLPoint,UpRPoint,sp); end; procedure TErrlistForm.ImageScrollBox1NewGraphic(const Graphic: TDibGraphic); begin IF ImageScrollBox1.Graphic.Empty Then Exit; ISB_BW.Graphic.Assign(ImageScrollBox1.Graphic); If ImageScrollBox1.Graphic.ImageFormat <> ifBlackWhite Then begin ConvertToBW(ISB_BW.Graphic); end; end; Procedure TErrlistForm.ShowRelaOMRErr(RelaIdx:Integer); //µe­±¤W¨q¥XÃö«YOMRÀˮ֥¢±Ñ var Site : String; iRect : TRect; SP:TShape; begin if RelaIdx > RelaSiteList.Count then Exit; //SP := TShape(FindComponent('SP'+inttostr(RelaIdx+1))); //20170327 ¦b°j°é¤¤­n¨Ï¥Î¦h²Õ¾B¸n SP := TShape(FindComponent('SP_R'+inttostr(RelaIdx))); //20240314 Hong §ï¦¨³o¼Ë SP.Brush.Color :=$00FEFAAD; SP.Parent := ImageScrollBox2; SP.Pen.Style := psSolid; SP.Pen.Color := $00FEFAAD; SP.Pen.Width := 1; SP.Pen.Mode := pmMask; SP.Left := iRect.Left; SP.Top := iRect.Top; SP.Width := iRect.Right-iRect.Left; SP.Height := iRect.Bottom-iRect.Top; Site := RelaSiteList.Strings[RelaIdx-1]; iRect := CM_Str2Rect(Site,ImageScrollBox1.Graphic.XDotsPerInch,UpLPoint_Rela); //ShowKeyinRect(ImageScrollBox2,iRect); SetKeyinRect_New(ImageScrollBox2,Site,'','',UpLPoint,UpRPoint,sp); end; procedure TErrlistForm.SiteNextBtClick(Sender: TObject); begin Inc(Siteidx); Label3.Caption := Format('%d/%d',[Siteidx,SiteList.Count]); ShowOMRErr(Siteidx); SitePreBt.Enabled := False; SiteNextBt.Enabled := False; IF Siteidx > 1 then SitePreBt.Enabled := True; IF Siteidx < SiteList.Count Then SiteNextBt.Enabled := True; end; procedure TErrlistForm.SitePreBtClick(Sender: TObject); begin Dec(Siteidx); Label3.Caption := Format('%d/%d',[Siteidx,SiteList.Count]); ShowOMRErr(Siteidx); SitePreBt.Enabled := False; SiteNextBt.Enabled := False; IF Siteidx > 1 then SitePreBt.Enabled := True; IF Siteidx < SiteList.Count Then SiteNextBt.Enabled := True; end; procedure TErrlistForm.Splitter1Moved(Sender: TObject); begin GetOMRErrini(NowIndex); end; procedure TErrlistForm.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; ErrListLVClick(nil); end; end.