Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 18:14   #1
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию Циклы или что-то вроде...

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

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


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

Код:
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Timer2: TTimer;
    Label2: TLabel;
    Label3: TLabel;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    Button1: TButton;
    StaticText4: TStaticText;
    Button2: TButton;
    StaticText5: TStaticText;
    Timer3: TTimer;
    Label4: TLabel;
    StaticText6: TStaticText;
    Label5: TLabel;
    Label6: TLabel;
    Timer4: TTimer;
    Timer5: TTimer;
    Button3: TButton;
    StaticText7: TStaticText;
    Edit1: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);



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

var
  Form1: TForm1;
  Color2: TColor;
  Color: TColor;
  pt: TPoint;
  pos: TPoint;
  dc: hDC;
  X, Y: Integer;

implementation

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

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

procedure TForm1.Timer2Timer(Sender: TObject);

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(Sender: TObject);
begin
 Timer2.Enabled := true;
         // удаляем запись о сохранении координат
 Label5.Caption:=''
end;    
       //    При нажатии на кнопку цвет снова меняется

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

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

procedure TForm1.Timer3Timer(Sender: TObject);
begin
dc := GetDC (0);
GetCursorPos (pt);
Color2 := GetPixel(dc, pt.x, pt.y);
            // Выводим полученны цвет в Label4
Label4.Caption:=IntToHEX(color2, 6);
ReleaseDC (0, dc);

end;

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

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

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

       // Кнопка старта 
procedure TForm1.Button3Click(Sender: TObject);
begin
  X := StrToIntDef(Label2.Caption, 0);
  Y := StrToIntDef(Label3.Caption, 0);

  SetCursorPos(X, Y);
  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.

Последний раз редактировалось Stilet; 13.04.2011 в 12:13.
HmTH вне форума Ответить с цитированием
Старый 10.04.2011, 18:18   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Таймер-то тут нафига ? Да еще и не один ?
mss вне форума Ответить с цитированием
Старый 10.04.2011, 18:19   #3
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Таймер-то тут нафига ? Да еще и не один ?
Мне было проще с помощью них определять цвет и координаты. Если вы готовы предложить свои идеи, то с радостью выслушаю. Я не силен в delphi, к сожалению.
HmTH вне форума Ответить с цитированием
Старый 10.04.2011, 18:33   #4
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Добавьте еще один таймер, который будет управлять остальными. Сам бы я так конечно не сделал, но вам думаю подойдет.
eduard93 вне форума Ответить с цитированием
Старый 10.04.2011, 18:34   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Можно на много проще=)

сохранение координат и цвета в одной кнопке.
Проверка всего этого в одном таймере.

Повторение действия вторым таймером. Вот и всё.
Человек_Борща вне форума Ответить с цитированием
Старый 10.04.2011, 18:48   #6
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Можно на много проще=)

сохранение координат и цвета в одной кнопке.
Проверка всего этого в одном таймере.

Повторение действия вторым таймером. Вот и всё.
Нет, мне надо чтобы было именно на разных кнопках.

Я не понимаю как сделать таймер, чтобы он повторял сразу несколько процедур ? Можно какой-то пример или где почитать ?
HmTH вне форума Ответить с цитированием
Старый 10.04.2011, 19:31   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Вот пожалуйста, написан специально для таких случаев=)
Там даже больше чем вам надо=)
Вложения
Тип файла: zip RepeatMethods.zip (156.4 Кб, 19 просмотров)
Человек_Борща вне форума Ответить с цитированием
Старый 10.04.2011, 19:44   #8
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Вот пожалуйста, написан специально для таких случаев=)
Там даже больше чем вам надо=)
Спасибо, сейчас поковыряюсь.
З.Ы.
Ник у вас забавный )

Чтобы не создавать новую тему, спрошу тут
Код:
 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 прога НЕ делает запись про цвет... в чем подвох ? Прошу помочь.

Последний раз редактировалось Stilet; 13.04.2011 в 12:14.
HmTH вне форума Ответить с цитированием
Старый 11.04.2011, 07:06   #9
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Проблема остается актуальной. Не сохраняет одну из двух записей, в зависимости от того, какая кнопка была нажата первой.

Вторая проблема. По непонятным для меня причинам, при наведении курсора, теперь меняется цвет ВСЕЙ формы, как это можно исправить ? Убрал лишние таймеры, чутка где-то дополнил, где-то урезал код, и в итоге получилось такое.

Третья проблема, так и не понял, как грамотно создать таймер. Я теряюсь в том, куда его и как вешать. Плюс остается загадкой, как сделать так, чтобы я в edit1 мог менять значения этого таймера. То есть прога должна сделать все свои функции, далее, после нажатия кнопки старт, перемещает курсор по сохраненным координатам, проверяет совпадает ли цвет с сохраненным, и если да, то кликает в это место, далее, нужно чтобы прога проверяла и кликала, через заданное в edit1 время. Объясните на моём примере плз, мне так понятнее будет. Сменя человеческое спасибо и плюс в репу.
Код:


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

var
  Form1: TForm1;
  Color2: TColor;
  Color: TColor;
  pt: TPoint;
  pos: TPoint;
  dc: hDC;
  X, Y: Integer;
  lt : TSYSTEMTIME;
  st : TSYSTEMTIME;
  S: string;

implementation

{$R *.dfm}
// Определяем цвет экрана, где наведен курсор
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 GetLocalTime(lt);
  S := Format('%-2.2d:%-2.2d:%-2.2d',
    [lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds]);
Memo1.Lines.Add(S + ' Определяем цвет и координаты для сохранения');
dc := GetDC (0);
GetCursorPos (pt);
Color := GetPixel(dc, pt.x, pt.y);
// Выводим полученный цвет в Label1
Label1.Caption:=IntToHEX(color, 6);
ReleaseDC (0, dc);
// Выводим координаты курсора мыши
  GetCursorPos(pos);
  Label2.Caption:=IntToStr(pos.X);
  Label3.Caption:=IntToStr(pos.Y);
//   При нажатии на F2 координаты запоминаются и больше не меняются
//   При нажатии на F1 цвет запоминается и больше не меняется
  if
    getasynckeystate($71)<>0
  then begin
    Timer1.Enabled:=False;
   GetLocalTime(lt);
  S := Format('%-2.2d:%-2.2d:%-2.2d',
    [lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds]);
Memo1.Lines.Add(S + ' Координаты сохранены');
    Label6.Caption:='Координаты сохранены' ;


end;
     if
    getasynckeystate($70)<>0
  then begin
    Timer1.Enabled:=False;
     GetLocalTime(lt);
  S := Format('%-2.2d:%-2.2d:%-2.2d',
    [lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds]);
Memo1.Lines.Add(S + ' Цвет сохранен');
    Label5.Caption:='Цвет сохранен' ;
  end;
end;
//    При нажатии на кнопку, координаты снова меняются и удаляется запись
procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled := true;
  GetLocalTime(lt);
  S := Format('%-2.2d:%-2.2d:%-2.2d',
    [lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds]);
Memo1.Lines.Add(S + ' Координаты удалены');
end;
//    При нажатии на кнопку, цвет снова меняется  и удаляется запись
procedure TForm1.Button2Click(Sender: TObject);
begin
 Timer1.Enabled := true;
 Label6.Caption:=''   ;
  GetLocalTime(lt);
  S := Format('%-2.2d:%-2.2d:%-2.2d',
    [lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds]);
Memo1.Lines.Add(S + ' Цвет удален');

end;

// Старт работы проги
procedure TForm1.Button3Click(Sender: TObject);
begin

  X := StrToIntDef(Label2.Caption, 0);
  Y := StrToIntDef(Label3.Caption, 0);

  SetCursorPos(X, Y);
  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(Sender: TObject);
begin
dc := GetDC (0);
GetCursorPos (pt);
Color2 := GetPixel(dc, pt.x, pt.y);
Label4.Caption:=IntToHEX(color2, 6);
ReleaseDC (0, dc);
if getasynckeystate($1B)<>0 then begin
 GetLocalTime(lt);
  S := Format('%-2.2d:%-2.2d:%-2.2d',
    [lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds]);
Memo1.Lines.Add(S + ' Программа будет закрыта через 5 секунд');
sleep(5000);
close;
end;

 end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Lines.Clear;
  GetLocalTime(lt);
  S := Format('%-2.2d:%-2.2d:%-2.2d',
    [lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds]);
Memo1.Lines.Add(S + ' Лог очищен');

end;


end.
Может кто-то что-то подсказать ?

Печаль, однако (

Эммм, боюсь даже спросить, ни кто не знает как помочь, или просто лень ?)

Последний раз редактировалось Stilet; 13.04.2011 в 12:19.
HmTH вне форума Ответить с цитированием
Старый 13.04.2011, 11:29   #10
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Ничего особо не понял, уж извини, некогда вчитываться...

скинь чтоли проект, погляжу, чего у тебя там чудит...

вообще по поставленной задаче у меня вырисовалась такая штука : форма, на ней 1 тлиствию , неск кнопей и ползунЪ(красиво, думаю, это можно оформить в одну высокую вертикальную узкую формочку и ставить её на краю экрана). в листвию записаны координаты и цвет экранной точки, везде где щёлкнули. можно, например, сделать пушабл кнопку "режим ввода" и при этом каждый щёлк записывается(кроме щёлка по ней самой ) ну или выход из режима по экскейпу ). потом ползуном ставим таймер, сортируем записанные щелчки в листвию, выбираем нужные из них и стартуем прогу...

Вообще у мну есть такая прога, кликер, не моя правда и без сурсей, ну и ещё там нет проверки цвета
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
незнаю сюда или нет? ну туту вроде паскаль( Scorch92 Паскаль, Turbo Pascal, PascalABC.NET 5 28.12.2010 18:59
синусы и ко. циклы, вроде циклы Scorch92 Паскаль, Turbo Pascal, PascalABC.NET 2 22.12.2010 19:26
Насколько сложно сделать что-то вроде Rangdoll Masters . vedro-compota Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 08.08.2010 16:57
Сдвиги и циклы ...вроде Magnit Паскаль, Turbo Pascal, PascalABC.NET 1 01.06.2007 01:01