//SCAR Plugin. Created for SCAR 2.0 by Kaitnieks // currently you can't call SCAR functions from plugin library bramblepluginWFindcolor; uses SysUtils, Graphics, windows; //--------------------------------------- // Functions to be called from SCAR function ColorRGB(SColor, i: Integer): Extended; stdcall; var Color:TColor; begin Color := ColorToRGB(SColor); Result:= 0; case i of 1:result:= GetRValue(Color); 2:result:= GetGValue(Color); 3:result:= GetBValue(Color); end; end; function SimilarColors(Color1, Color2, Tolerance: Integer): Boolean; stdcall; begin Result:=False; if(Abs(Round(ColorRGB(Color1, 1))-Round(ColorRGB(Color2, 1)))<=Tolerance)then begin if(Abs(Round(ColorRGB(Color1, 2))-Round(ColorRGB(Color2, 2)))<=Tolerance)then begin if(Abs(Round(ColorRGB(Color1, 3))-Round(ColorRGB(Color2, 3)))<=Tolerance)then begin Result:= True; end; end; end; end; Function ControlledColorSearch(x,y,Color,x1,y1,x2,y2,Tol,xc,yc:integer;flip:boolean;Wind:Longint):boolean; stdcall; var WindH:Hwnd;Windc:HDC;color11:Tcolor;color22,intvar:integer; begin Windh:=Wind; Windc:=GetDc(Windh); if (flip = False) then begin if (xc=0) and (yc=0) then begin X:=x1; Y:=y1; end else begin x:=xc; y:=yc; end; repeat Color11:=GetPixel(windc,x,y); color22:=color11; if (SimilarColors(color,color22,Tol) = true) then begin result:=True; exit; end else begin repeat if y1<=y2 then Y:=y+1 else if y1>y2 then Y:=y-1; Color11:=GetPixel(windc,x,y); color22:=color11; if (SimilarColors(color,color22,Tol) = true) then begin result:=True; exit; end; until (y=y2) or(result=true) end; Y:=y1; if x1<=x2 then begin x:=x+1; intvar:=1; end else if x1>x2 then begin x:=x-1; intvar:=-1; end; until (x=x+intvar) or (result=true); end; if (flip = True) then begin if (xc=0) and (yc=0) then begin X:=x1; Y:=y1; end else begin x:=xc; y:=yc; end; repeat Color11:=GetPixel(windc,x,y); color22:=color11; if (SimilarColors(color,color22,Tol) = true) then begin result:=True; exit; end else begin repeat if x1<=x2 then x:=x+1 else if x1>x2 then x:=x-1; Color11:=GetPixel(windc,x,y); color22:=color11; if (SimilarColors(color,color22,Tol) = true) then begin result:=True; exit; end; until (x=x2) or(result=true) end; x:=x1; if y1<=y2 then begin y:=y+1; intvar:=1; end else if y1>y2 then begin y:=y-1; intvar:=-1; end; until (y=y+intvar) or (result=true); end; end; //******************************** // Change this accordingly to your function count function GetFunctionCount(): Integer; stdcall; export; begin Result:= 1; end; //******************************* // Change this accordingly to your function definitions function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PChar): Integer; stdcall; begin case x of 0: begin ProcAddr:= @ControlledColorSearch; StrPCopy(ProcDef, 'Function ControlledColorSearch(x,y,Color,x1,y1,x2,y2,Tol,xc,yc:integer;flip:boolean;Wind:Longint):boolean;'); end; else x:= -1; end; Result:= x; end; //*************************** // Don't change below this exports GetFunctionCount; exports GetFunctionInfo; end.