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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.08.2013, 15:52   #11
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию


Спасибо за критику, сам знаю что код очень и очень далек от совершенства. И вы все конечно же правильно сказали, но переделывать я не хочу. Делфи я изучаю полтора месяца, пока идет лето. Скоро начнется университет и поэтому переделывать пол кода у меня просто нет времени.
Да он кривой, но работать он должен. Просто дело в какой-то переменной .
Praud вне форума
Старый 29.08.2013, 17:37   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

Цитата:
Сообщение от Brian W. Kernighan
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Отсюда

Несколько путей решения:
1) Ждать озарения - случайно найти ошибку
2) Научиться пользоваться отладчиком
3) Переписать код более лаконично

Однажды, из-за 1 символа программа работала неверно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума
Старый 29.08.2013, 18:37   #13
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Похоже придется ждать озарения.
По просьбе asmprog написать поставленную задачу:
Написать автокликер, который будет переходить по координатам и нажимать левую кнопку мыши. Координаты задаются с помощью клавиши backspace и выводятся в memo. Задавать можно минимум по 3 координаты. ( то есть, 3,6,9... До 30 ) Существует счетчик, который считает кол-во нажатий кнопки backspace, тем самым проверяя сколько задано координат. Есть таймер, по истечению таймера программа переходит к следующей тройки координат. Кнопка Esc переводит переменную Stopcircle в true, при Stopcircle:=true, весь цикл останавливается.
Praud вне форума
Старый 30.08.2013, 00:30   #14
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,883
По умолчанию

Цитата:
Похоже придется ждать озарения.
Озарения можно ждать до дряхлой старости и кому оно тогда будет нужно?
А научиться пользоваться отладчиком гораздо проще. Хотя бы потому, что его можно изучать постепенно. Начать можно с "2+2", а именно с ознакомления с клавишами F5 и F8 (в предположении что уже известно что делает клавиша F9). Т.е. было бы желание.

P.S. Ну а людей, которые могут вполне осознанно сказать что они полностью изучили отладчик я лично не знаю.
northener вне форума
Старый 30.08.2013, 15:37   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Существует счетчик, который считает кол-во нажатий кнопки backspace, тем самым проверяя сколько задано координат.

Есть таймер, по истечению таймера программа переходит к следующей тройки координат.

Кнопка Esc переводит переменную Stopcircle в true, при Stopcircle:=true, весь цикл останавливается.
есть список координат, надо
1. в течение заданного промежутка кликать на указанном месте с заданным интервалом.
По истечении промежутка перейти к другим координатам.
Если таковых нет, закончить работу.
2. иметь возможность оперативно перервать работу "нажать Esc".

решение
два таймера
1 TimerClick для повторных кликов на одном месте
2 Timercoord для перехода к новым координатам

Код:
...........buttonStartClick(sender: TObject);
begin
  timerClick.enabled:=false; //нам негде кликать отключаем таймер кликов 
  timerCoord.enabled:=true; //начинаем работу вкл. таймер переходов
end;

...........TimerCoordTimer(sender: TObject);
begin
  timerClick.enabled:=false; //пока нет координат нам негде кликать => отключаем таймер кликов
  if CalcClickcoord then  // вычисляем где будем кликать и можно ли это делать
    timerclick.enabled:=true; //запускаем таймер кликов
  end
  else timercoord.enabled:=false; // больше не будем работать
end;

...........timerClickTimer(sender: TObject);
begin
  if not self.timerCoord.Enabled then Exit; // проверим а может нас отключили но мы еще не узнали (Esc)
  if not self.timerClick.enabled then Exit; 
// устанавливаем по ИЗВЕСТНЫМ ((вычисляем место кликов И ЗАНОСИМ В ГЛОБАЛЬНЫЕ переменные, чтобы использовать при имитации клика.))
// делаем клик!!!!
end;

...........KeyPress(var key: char;...);
begin
  timerclick.enabled:=false; //отключаем и клики
  timercoord.enabled:=false; //и переходы
end;

...........function CalcClickCood: boolean;
begin
  if memocoord.lines.count<>4  then result:=false
  else begin
    вычисляем место кликов И ЗАНОСИМ В ГЛОБАЛЬНЫЕ переменные, чтобы использовать при имитации клика.
  end;
end;
НЕДОСТАТКИ: Клики начинаются не сразу а после срабатывания ДВУХ таймеров. сначала ждем таймер вычисления и контроля координат. Потом, после его срабатывания, еще ждем таймер кликов.
лечится:
перенос ВСЕХ действий из обработчиков во внутренние методы (процедуры) DoRunCoordClick; DoMouseClick;
в обработчиках оставляем только управление (вкл. таймеров).
Код:
...........buttonStartClick(sender: TObject);
begin
  timerCoord.enabled:=true; //вкл. таймер переходов
  DoRuncoordClick;//делаем не дожидаясь срабатывания
end;

...........TimerCoordTimer(sender: TObject);
begin
  doRunCoordclick;//делаем тоже ПРИ срабатывании
end;

...........timerClickTimer(sender: TObject);
begin
  DoMouseClick;//делаем тоже ПРИ срабатывании
end;

...........KeyPress(var key: char;...);
begin
  timerclick.enabled:=false; //отключаем клики
  timercoord.enabled:=false; //и переходы
end;

...........doRunCoordclick;
begin
  timerClick.enabled:=false; //пока нет координат нам негде кликать => отключаем таймер кликов
  if CalcClickcoord then  // вычисляем где будем кликать и можно ли это делать
    timerclick.enabled:=true; //запускаем таймер кликов
    doMouseClick;//делаем не дожидаясь срабатывания
  end
  else timercoord.enabled:=false; // больше не будем
end;

...........doMouseClick;
begin
  if not self.timerclick.enabed then Exit;
  if not self.timerCoord.Enabled then Exit; // проверим а может нас отключили но мы еще не узнали (Esc)
// устанавливаем по ИЗВЕСТНЫМ ((вычисляем место кликов И ЗАНОСИМ В ГЛОБАЛЬНЫЕ переменные, чтобы использовать при имитации клика.))
// и делаем клик!!!!
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 30.08.2013, 17:14   #16
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Все таки не пришлось ожидать озарение до старости. stopminicircle в таймере переключается в true, однако в false он не переводится ( если задана первая тройка координат, далее переключается). Всем спасибо.
Praud вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запутался с кодировкой Blad47 Свободное общение 6 25.08.2011 17:12
Запутался с формами iHikita Общие вопросы .NET 6 30.07.2010 16:08
Запутался с CopyRect Alex Cones Общие вопросы Delphi 2 01.12.2009 20:55
запутался! mistertvister Помощь студентам 3 28.10.2009 14:52
запутался в процедурах world12_tk Помощь студентам 6 03.03.2009 18:57