Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Problemas con TTimer en captura (https://www.clubdelphi.com/foros/showthread.php?t=78627)

MaxiDucoli 05-05-2012 07:09:56

Problemas con TTimer en captura
 
Hola, cómo están, yo acá molestando otra vez. :)
Mi consulta es la siguiente:

Tengo un mini programita que va capturando la pantalla, en ese Bitmap tomo puntos con colores y puntos de coordenadas de ratón X e Y. Hasta ahí todo bien, lo sé hacer y me sale excelente. Mi problema es que todo eso lo tengo en un TTimer en 200 milisegundos y que no me deja cerrar el programa. Por más que intento con lo que intento no puedo. El programa se queda "tildado" y no hay manera de que cierre.
El objetivo del programa es ir haciendo click en ciertos parámetros true false en las coordenadas indicadas. Les paso lo que tengo dentro del timer a ver si pueden ayudarme.



Gracias!!

procedure TFrmDiamondBot.JvTimer1Timer(Sender: TObject);
var
i, j, h: IntegeR;
Pts: Array [0 .. 90] of TPoint;
Cl: Array [0 .. 90] of TColor;
BitMap: TBitmap;

Begin

while ESCPRESS = False do
begin
//SetForeGroundWindow(Application.Handle);
BitMap := TBitmap.Create;
CapturarPantalla(0, 0, Screen.width, Screen.height, BitMap);
h := 0;

for i := 0 to 8 do // Cargamos los valores de los puntos x e y del mouse a clickar y los colores
for j := 0 to 9 do
begin
Pts[h].X := punto.X + 79 + (j * 40) + 10;
Pts[h].Y := punto.Y + 130 + (i * 40) + 10;
Cl[h] := GetPixel(BitMap.Canvas.Handle, Pts[h].X, Pts[h].Y);
Inc(h);
end;

for j := 0 to FrmDiamondBot.ControlCount - 1 do
for i := 1 to 90 do
Begin (FrmDiamondBot.Findcomponent('Shape' + IntToStr(i)) as TShape) // Pintamos los Shapes con los colores
.Brush.Color := Cl[i - 1];
end;

for i := 0 to 89 do
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 100))
{ Marrón } AND (SimilarColors(Cl[i],rgb($DB, $F2, $FF),50)) then
begin
ClickRaton(Pts[i].X, Pts[i].Y);
Delay(1000);
end;

for i := 0 to 89 do
begin
if ((not SimilarColors(Cl[i], rgb($33, $08, $04), 100))
{ Marrón } AND (not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(Cl[i] <> rgb($62, $62, $62))) AND
(SimilarColors(Cl[i], rgb($B2, $7D, $FE), 0))
{ Violeta } OR (SimilarColors(Cl[i], rgb($14, $72, $FD), 0))
{ Azul } OR (SimilarColors(Cl[i], rgb($41, $B6, $16), 0))
{ Verde } OR (SimilarColors(Cl[i], rgb($EA, $09, $23), 0))
{ Rojo } OR (SimilarColors(Cl[i], rgb($BD, $52, $10), 0)) { Amarillo } then
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;

end;

for i := 0 to 7 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
//Form1.SetFocus;
Delay(850);
end;

end;

end;

for i := 10 to 17 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
//Form1.SetFocus;
Delay(850);


end;
end;

end;
for i := 20 to 27 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
//Form1.SetFocus;
Delay(850);

end;
end;

end;
for i := 30 to 37 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
//Form1.SetFocus;
Delay(850);

end;
end;

end;
for i := 40 to 47 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
//Form1.SetFocus;
Delay(850);

end;
end;

end;
for i := 50 to 57 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
//Form1.SetFocus;
Delay(850);

end;
end;
end;

for i := 60 to 67 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
//Form1.SetFocus;
Delay(850);

end;
end;
end;

for i := 70 to 77 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
// Form1.SetFocus;
Delay(850);

end;
end;
end;

for i := 80 to 87 do
begin
if (not SimilarColors(Cl[i], rgb($33, $08, $04), 60)) AND
(not SimilarColors(Cl[i], rgb($FF, $F3, $F0), 100)) AND
(not SimilarColors(Cl[i], rgb($62,$62,$62),60)) then
Begin
if ((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 2], 30))) OR // XXX
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 20], 30))) OR // X
// X
// X
((SimilarColors(Cl[i], Cl[i + 10], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // X
// XX
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 11], 30))) OR // XX then
// X
((SimilarColors(Cl[i], Cl[i + 1], 30)) AND
(SimilarColors(Cl[i], Cl[i + 10], 30))) // XX
// X
then
begin
// SetCursorPos(Coordenadas.x,Coordenadas.y);
ClickRaton(Pts[i].X, Pts[i].Y);
if ESCPRESS = True then Break;
// Form1.SetFocus;
Delay(850);
end;
end;
end;

// BitMap.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Temp\salvado.bmp');
BitMap.Free;
end;

ecfisa 05-05-2012 08:35:12

Hola MaxiDucoli.

Por favor cuando incluyas código en tus mensaje utiliza TAG's. Te pongo una imágen que explica el uso:



Saludos y gracias por tu colaboración. :)


La franja horaria es GMT +2. Ahora son las 20:27:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi