Einzelnen Beitrag anzeigen

Kanne

Registriert seit: 16. Mai 2003
5 Beiträge
 
Delphi XE2 Professional
 
#18

AW: Bildschirm nach bestimmten Bitmap absuchen

  Alt 16. Nov 2016, 22:51
Hi,
war auf der Suche nach einem BITMAP-Vergleich und bin dabei auf diesen (etwas älteren !) Eintrag gestoßen.
Habe mir einen DLL-Source von der ImageSearchDLL besorgt und konnte das in Delphi XE2 wie folgt zum Laufen bekommen:

Bei Delphi XE2 wurde im Vergleich zu V7 gerade bei den Strings viel geändert, so dass man die externe DLL anders aufrufen muss:

Delphi-Quellcode:
function ImageSearch(aLeft: Integer; aTop: Integer; aRight: Integer; aBottom: Integer; aImageFile: PAnsiChar):
PAnsiChar; stdcall; external 'ImageSearchDLL.dll';

Aufruf (ALLE (!) Vorkommen der gesuchten Grafik in Schleife suchen):

Delphi-Quellcode:
procedure TBOT_Form.FindAllGraphics(pStartX,pStarty,pEndeX,pEndeY:integer);
var
  pPosX,pPosY,pSizeX,pSizeY,pRetC : integer;
  sRet : AnsiString;
  pFileName : AnsiString;
  sText : AnsiString;
  sStringList : TStringList;
Begin
  sStringList := TStringList.Create;
  sStringList.Delimiter := '|';
  sStringList.StrictDelimiter := true;
  pFileName := '*50 z:\ImageSearch.bmp';
  sText := '';
  sRet := ImageSearch(pStartX, pStarty, pEndeX, pEndeY, PAnsiChar(pFileName));
  while (LeftStr(sRet,1) = '1') do begin
    sText := sText + sRet + #13#10;
    sStringList.DelimitedText := sRet;
    pRetC := StrToInt(sStringList.Strings[0]);
    pPosX := StrToInt(sStringList.Strings[1]);
    pPosY := StrToInt(sStringList.Strings[2]);
    pSizeX := StrToInt(sStringList.Strings[3]);
    pSizeY := StrToInt(sStringList.Strings[4]);
    sRet := ImageSearch(pPosX+1, pPosY, pEndeX, pEndeY, PAnsiChar(pFileName)); {nächste rechts}
    if LeftStr(sRet,1) = '0then begin {kein Vorkommen mehr => links Anfangen nach unten}
    sRet := ImageSearch(pStartX, pPosY+1, pEndeX, pEndeY, PAnsiChar(pFileName)); {nach rechts}
    end;
  end;
  sStringList.Free;
  memo1.Clear;
  memo1.lines.Add(TimeToStr(now()) + ' Capture ' + Format(' %d x %d y ... %d x %d y',[xPosStart, yPosStart, xPosEnd, yPosEnd]));
  memo1.lines.Add(sText);

Geändert von Kanne (16. Nov 2016 um 23:18 Uhr)
  Mit Zitat antworten Zitat