Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.04.2011, 17:56
HmTH HmTH вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 2
Репутация: 10
По умолчанию Циклы

Здравствуйте. Пишу прогу, что-то типа кликера , которая должна кликать в заданных координатах, при условии, что в этих координатах нужный нам цвет.
1. Устанавливаем курсор , нажимаем кнопку и сохраняется нужный нам цвет.
2. Устанавливаем курсор , нажимаем кнопку и сохраняется нужные нам координаты.
3. Нажимаем старт, прога переносит курсор и проверяет, совпадает сохраненый нами цвет, с тем что сейчас, если да, то кликает в это место...

Прога сама по себе рабочая, но столкнулся с вопросом. Как мне сделать так, чтобы я мог задавать интервал между повторениями всех этих процедур, и прога все это делала скажем через каждые 30 секунд до тех пор, пока я не отменю ?


Собственно вот исходник

PHP код:
type
  TForm1 
= class(TForm)
    
Timer1TTimer;
    
Label1TLabel;
    
Timer2TTimer;
    
Label2TLabel;
    
Label3TLabel;
    
StaticText1TStaticText;
    
StaticText2TStaticText;
    
StaticText3TStaticText;
    
Button1TButton;
    
StaticText4TStaticText;
    
Button2TButton;
    
StaticText5TStaticText;
    
Timer3TTimer;
    
Label4TLabel;
    
StaticText6TStaticText;
    
Label5TLabel;
    
Label6TLabel;
    
Timer4TTimer;
    
Timer5TTimer;
    
Button3TButton;
    
StaticText7TStaticText;
    
Edit1TEdit;
    
procedure Timer1Timer(SenderTObject);
    
procedure Timer2Timer(SenderTObject);
    
procedure Button1Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
    
procedure Timer3Timer(SenderTObject);
    
procedure Timer4Timer(SenderTObject);
    
procedure Timer5Timer(SenderTObject);
    
procedure Button3Click(SenderTObject);



  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;
  
Color2TColor;
  
ColorTColor;
  
ptTPoint;
  
posTPoint;
  
dchDC;
  
XYInteger;

implementation

{$R *.dfm}
              
// Определяем цвет экрана, где наведен курсор
procedure TForm1.Timer1Timer(SenderTObject);
begin

dc 
:= GetDC (0);
GetCursorPos (pt);
Color := GetPixel(dcpt.xpt.y);
            
// Запись значения в Label1
Label1.Caption:=IntToHEX(color6);
ReleaseDC (0dc);
           
//  При нажатии на F1 цвет больше не меняется
  
if getasynckeystate($70)<>0 then
    Timer1
.Enabled:=False;
end;
          
// Определяем координаты мыши

procedure TForm1.Timer2Timer(SenderTObject);

begin
  GetCursorPos
(pos);
           
//  Записываем координаты
  
Label2.Caption:=IntToStr(pos.X);
  
Label3.Caption:=IntToStr(pos.Y);
          
//   Если нажать F2 координаты больше не меняются
  
if getasynckeystate($71)<>0 then
    Timer2
.Enabled:=False;



end;
         
//    При нажатии на кнопку координаты снова меняются
procedure TForm1.Button1Click(SenderTObject);
begin
 Timer2
.Enabled := true;
         
// удаляем запись о сохранении координат
 
Label5.Caption:=''
end;    
       
//    При нажатии на кнопку цвет снова меняется

procedure TForm1.Button2Click(SenderTObject);
begin
 Timer1
.Enabled := true;
         
// удаляем запись о сохранении цвета
 
Label6.Caption:=''
end;

         
// Получаем контрольный цвет

procedure TForm1.Timer3Timer(SenderTObject);
begin
dc 
:= GetDC (0);
GetCursorPos (pt);
Color2 := GetPixel(dcpt.xpt.y);
            
// Выводим полученны цвет в Label4
Label4.Caption:=IntToHEX(color26);
ReleaseDC (0dc);

end;

     
// Статус сохранения цвета
procedure TForm1.Timer4Timer(SenderTObject);
begin
if getasynckeystate($70)<>0 then
Label5
.Caption:='Цвет сохранен'

 
end;
        
// Статус сохранения координат

procedure TForm1.Timer5Timer(SenderTObject);
begin
if getasynckeystate($71)<>0 then
Label6
.Caption:='Координаты сохранены'
end;

       
// Кнопка старта 
procedure TForm1.Button3Click(SenderTObject);
begin
  X 
:= StrToIntDef(Label2.Caption0);
  
:= StrToIntDef(Label3.Caption0);

  
SetCursorPos(XY);
  if 
color color2 then begin
  mouse_event
(MOUSEEVENTF_LEFTDOWN,X,Y,0,0);
  
sleep(5) ;
  
mouse_event(MOUSEEVENTF_LEFTUP,X,Y,0,0);
  
end;

  
end;


end
Ответить с цитированием
  #2  
Старый 10.04.2011, 20:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

У тебя куча таймеров, которые используются не по назначению. А вот как раз на нажатие у тебя кнопка, а не таймер.
Ответить с цитированием
  #3  
Старый 10.04.2011, 23:57
HmTH HmTH вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
У тебя куча таймеров, которые используются не по назначению. А вот как раз на нажатие у тебя кнопка, а не таймер.
Переписал код, теперь два таймера. Один определяет цвет и координаты + ряд других функций. Другой тоже определяет цвет, но постоянно.

PHP код:
unit Bot_start;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrlsExtCtrlsComCtrlsCoolTrayIcon;

type
  TForm1 
= class(TForm)
    
Timer1TTimer;
    
Label1TLabel;
    
Label2TLabel;
    
Label3TLabel;
    
StaticText1TStaticText;
    
StaticText2TStaticText;
    
StaticText3TStaticText;
    
Button1TButton;
    
StaticText4TStaticText;
    
Button2TButton;
    
StaticText5TStaticText;
    
Label4TLabel;
    
StaticText6TStaticText;
    
Label5TLabel;
    
Label6TLabel;
    
Button3TButton;
    
CheckBox1TCheckBox;
    
Edit1TEdit;
    
StaticText7TStaticText;
    
Memo1TMemo;
    
Timer6TTimer;
    
procedure Timer1Timer(SenderTObject);
    
procedure Button1Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
    
procedure Button3Click(SenderTObject);
    
procedure Timer6Timer(SenderTObject);



  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;
  
Color2TColor;
  
ColorTColor;
  
ptTPoint;
  
posTPoint;
  
dchDC;
  
XYInteger;

implementation

{$R *.dfm}
// Определяем цвет экрана, где наведен курсор
procedure TForm1.Timer1Timer(SenderTObject);
begin
dc 
:= GetDC (0);
GetCursorPos (pt);
Color := GetPixel(dcpt.xpt.y);
// Выводим полученный цвет в Label1
Label1.Caption:=IntToHEX(color6);
ReleaseDC (0dc);
// Выводим координаты курсора мыши
  
GetCursorPos(pos);
  
Label2.Caption:=IntToStr(pos.X);
  
Label3.Caption:=IntToStr(pos.Y);
//   При нажатии на F2 координаты запоминаются и больше не меняются
//   При нажатии на F1 цвет запоминается и больше не меняется
  
if
    
getasynckeystate($71)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label6.Caption:='Координаты сохранены' ;
    
Memo1.Lines.Add ('Координаты сохранены') ;
end;
     if
    
getasynckeystate($70)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label5.Caption:='Цвет сохранен' ;
    
Memo1.Lines.Add('Цвет сохранен') ;
  
end;
end;
//    При нажатии на кнопку, координаты снова меняются и удаляется запись
procedure TForm1.Button1Click(SenderTObject);
begin
 Timer1
.Enabled := true;
 
Label5.Caption:='' ;
 
Memo1.Lines.Add('Координаты удалены');
end;
//    При нажатии на кнопку, цвет снова меняется  и удаляется запись
procedure TForm1.Button2Click(SenderTObject);
begin
 Timer1
.Enabled := true;
 
Label6.Caption:=''   ;
 
Memo1.Lines.Add('Цвет удален');
end;
// Старт работы проги
procedure TForm1.Button3Click(SenderTObject);
begin
  X 
:= StrToIntDef(Label2.Caption0);
  
:= StrToIntDef(Label3.Caption0);

  
SetCursorPos(XY);
  
sleep(1000) ;
  if
   
color color2
  then begin
  mouse_event
(MOUSEEVENTF_LEFTDOWN,X,Y,0,0);
  
mouse_event(MOUSEEVENTF_LEFTUP,X,Y,0,0);
 
end;
end;
// Постоянное определение цвета и запсиь в Label4
procedure TForm1.Timer6Timer(SenderTObject);
begin
dc 
:= GetDC (0);
GetCursorPos (pt);
Color2 := GetPixel(dcpt.xpt.y);
Label4.Caption:=IntToHEX(color26);
ReleaseDC (0dc);
 
end;
end

Вопрос остается актуальным, плюс возник вопрос в следующем

PHP код:
if
    
getasynckeystate($71)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label6.Caption:='Координаты сохранены' ;
    
Memo1.Lines.Add ('Координаты сохранены') ;
end;
     if
    
getasynckeystate($70)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label5.Caption:='Цвет сохранен' ;
    
Memo1.Lines.Add('Цвет сохранен') ;
  
end;
end
Запускаю прогу, нажимаю F1 , прога делает запись что цвет сохранен, нажимаю F2, прога НЕ делает записи про координаты.... перезапускаю прогу, жму F2, прога делает запись про координаты, жму на F1 прога НЕ делает запись про цвет... в чем подвох ? Прошу помочь.
Ответить с цитированием
  #4  
Старый 11.04.2011, 00:09
HmTH HmTH вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
У тебя куча таймеров, которые используются не по назначению. А вот как раз на нажатие у тебя кнопка, а не таймер.
Переписал код, теперь два таймера. Один определяет цвет и координаты + ряд других функций. Другой тоже определяет цвет, но постоянно.

PHP код:
unit Bot_start;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrlsExtCtrlsComCtrlsCoolTrayIcon;

type
  TForm1 
= class(TForm)
    
Timer1TTimer;
    
Label1TLabel;
    
Label2TLabel;
    
Label3TLabel;
    
StaticText1TStaticText;
    
StaticText2TStaticText;
    
StaticText3TStaticText;
    
Button1TButton;
    
StaticText4TStaticText;
    
Button2TButton;
    
StaticText5TStaticText;
    
Label4TLabel;
    
StaticText6TStaticText;
    
Label5TLabel;
    
Label6TLabel;
    
Button3TButton;
    
CheckBox1TCheckBox;
    
Edit1TEdit;
    
StaticText7TStaticText;
    
Memo1TMemo;
    
Timer6TTimer;
    
procedure Timer1Timer(SenderTObject);
    
procedure Button1Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
    
procedure Button3Click(SenderTObject);
    
procedure Timer6Timer(SenderTObject);



  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;
  
Color2TColor;
  
ColorTColor;
  
ptTPoint;
  
posTPoint;
  
dchDC;
  
XYInteger;

implementation

{$R *.dfm}
// Определяем цвет экрана, где наведен курсор
procedure TForm1.Timer1Timer(SenderTObject);
begin
dc 
:= GetDC (0);
GetCursorPos (pt);
Color := GetPixel(dcpt.xpt.y);
// Выводим полученный цвет в Label1
Label1.Caption:=IntToHEX(color6);
ReleaseDC (0dc);
// Выводим координаты курсора мыши
  
GetCursorPos(pos);
  
Label2.Caption:=IntToStr(pos.X);
  
Label3.Caption:=IntToStr(pos.Y);
//   При нажатии на F2 координаты запоминаются и больше не меняются
//   При нажатии на F1 цвет запоминается и больше не меняется
  
if
    
getasynckeystate($71)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label6.Caption:='Координаты сохранены' ;
    
Memo1.Lines.Add ('Координаты сохранены') ;
end;
     if
    
getasynckeystate($70)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label5.Caption:='Цвет сохранен' ;
    
Memo1.Lines.Add('Цвет сохранен') ;
  
end;
end;
//    При нажатии на кнопку, координаты снова меняются и удаляется запись
procedure TForm1.Button1Click(SenderTObject);
begin
 Timer1
.Enabled := true;
 
Label5.Caption:='' ;
 
Memo1.Lines.Add('Координаты удалены');
end;
//    При нажатии на кнопку, цвет снова меняется  и удаляется запись
procedure TForm1.Button2Click(SenderTObject);
begin
 Timer1
.Enabled := true;
 
Label6.Caption:=''   ;
 
Memo1.Lines.Add('Цвет удален');
end;
// Старт работы проги
procedure TForm1.Button3Click(SenderTObject);
begin
  X 
:= StrToIntDef(Label2.Caption0);
  
:= StrToIntDef(Label3.Caption0);

  
SetCursorPos(XY);
  
sleep(1000) ;
  if
   
color color2
  then begin
  mouse_event
(MOUSEEVENTF_LEFTDOWN,X,Y,0,0);
  
mouse_event(MOUSEEVENTF_LEFTUP,X,Y,0,0);
 
end;
end;
// Постоянное определение цвета и запсиь в Label4
procedure TForm1.Timer6Timer(SenderTObject);
begin
dc 
:= GetDC (0);
GetCursorPos (pt);
Color2 := GetPixel(dcpt.xpt.y);
Label4.Caption:=IntToHEX(color26);
ReleaseDC (0dc);
 
end;
end

Вопрос остается актуальным, плюс возник вопрос в следующем

PHP код:
if
    
getasynckeystate($71)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label6.Caption:='Координаты сохранены' ;
    
Memo1.Lines.Add ('Координаты сохранены') ;
end;
     if
    
getasynckeystate($70)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label5.Caption:='Цвет сохранен' ;
    
Memo1.Lines.Add('Цвет сохранен') ;
  
end;
end
Запускаю прогу, нажимаю F1 , прога делает запись что цвет сохранен, нажимаю F2, прога НЕ делает записи про координаты.... перезапускаю прогу, жму F2, прога делает запись про координаты, жму на F1 прога НЕ делает запись про цвет... в чем подвох ? Прошу помочь.
Ответить с цитированием
  #5  
Старый 11.04.2011, 01:20
HmTH HmTH вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
У тебя куча таймеров, которые используются не по назначению. А вот как раз на нажатие у тебя кнопка, а не таймер.
Переписал код, теперь два таймера. Один определяет цвет и координаты + ряд других функций. Другой тоже определяет цвет, но постоянно.

PHP код:
unit Bot_start;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrlsExtCtrlsComCtrlsCoolTrayIcon;

type
  TForm1 
= class(TForm)
    
Timer1TTimer;
    
Label1TLabel;
    
Label2TLabel;
    
Label3TLabel;
    
StaticText1TStaticText;
    
StaticText2TStaticText;
    
StaticText3TStaticText;
    
Button1TButton;
    
StaticText4TStaticText;
    
Button2TButton;
    
StaticText5TStaticText;
    
Label4TLabel;
    
StaticText6TStaticText;
    
Label5TLabel;
    
Label6TLabel;
    
Button3TButton;
    
CheckBox1TCheckBox;
    
Edit1TEdit;
    
StaticText7TStaticText;
    
Memo1TMemo;
    
Timer6TTimer;
    
procedure Timer1Timer(SenderTObject);
    
procedure Button1Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
    
procedure Button3Click(SenderTObject);
    
procedure Timer6Timer(SenderTObject);



  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;
  
Color2TColor;
  
ColorTColor;
  
ptTPoint;
  
posTPoint;
  
dchDC;
  
XYInteger;

implementation

{$R *.dfm}
// Определяем цвет экрана, где наведен курсор
procedure TForm1.Timer1Timer(SenderTObject);
begin
dc 
:= GetDC (0);
GetCursorPos (pt);
Color := GetPixel(dcpt.xpt.y);
// Выводим полученный цвет в Label1
Label1.Caption:=IntToHEX(color6);
ReleaseDC (0dc);
// Выводим координаты курсора мыши
  
GetCursorPos(pos);
  
Label2.Caption:=IntToStr(pos.X);
  
Label3.Caption:=IntToStr(pos.Y);
//   При нажатии на F2 координаты запоминаются и больше не меняются
//   При нажатии на F1 цвет запоминается и больше не меняется
  
if
    
getasynckeystate($71)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label6.Caption:='Координаты сохранены' ;
    
Memo1.Lines.Add ('Координаты сохранены') ;
end;
     if
    
getasynckeystate($70)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label5.Caption:='Цвет сохранен' ;
    
Memo1.Lines.Add('Цвет сохранен') ;
  
end;
end;
//    При нажатии на кнопку, координаты снова меняются и удаляется запись
procedure TForm1.Button1Click(SenderTObject);
begin
 Timer1
.Enabled := true;
 
Label5.Caption:='' ;
 
Memo1.Lines.Add('Координаты удалены');
end;
//    При нажатии на кнопку, цвет снова меняется  и удаляется запись
procedure TForm1.Button2Click(SenderTObject);
begin
 Timer1
.Enabled := true;
 
Label6.Caption:=''   ;
 
Memo1.Lines.Add('Цвет удален');
end;
// Старт работы проги
procedure TForm1.Button3Click(SenderTObject);
begin
  X 
:= StrToIntDef(Label2.Caption0);
  
:= StrToIntDef(Label3.Caption0);

  
SetCursorPos(XY);
  
sleep(1000) ;
  if
   
color color2
  then begin
  mouse_event
(MOUSEEVENTF_LEFTDOWN,X,Y,0,0);
  
mouse_event(MOUSEEVENTF_LEFTUP,X,Y,0,0);
 
end;
end;
// Постоянное определение цвета и запсиь в Label4
procedure TForm1.Timer6Timer(SenderTObject);
begin
dc 
:= GetDC (0);
GetCursorPos (pt);
Color2 := GetPixel(dcpt.xpt.y);
Label4.Caption:=IntToHEX(color26);
ReleaseDC (0dc);
 
end;
end

Вопрос остается актуальным, плюс возник вопрос в следующем

PHP код:
if
    
getasynckeystate($71)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label6.Caption:='Координаты сохранены' ;
    
Memo1.Lines.Add ('Координаты сохранены') ;
end;
     if
    
getasynckeystate($70)<>0
  then begin
    Timer1
.Enabled:=False;
    
Label5.Caption:='Цвет сохранен' ;
    
Memo1.Lines.Add('Цвет сохранен') ;
  
end;
end
Запускаю прогу, нажимаю F1 , прога делает запись что цвет сохранен, нажимаю F2, прога НЕ делает записи про координаты.... перезапускаю прогу, жму F2, прога делает запись про координаты, жму на F1 прога НЕ делает запись про цвет... в чем подвох ? Прошу помочь.
Ответить с цитированием
  #6  
Старый 11.04.2011, 11:52
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

А с чего она должна 2-ю запись делать?
если таймер вы отключаете!
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025