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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2014, 23:17   #1
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию По течению или против течения? Delphi7

В какую сторону двигался курсор по заданному маршруту "по шерсти или против шерсти". Посоветуйте, пока совсем не запутался. Не спешу. Впереди ещё 50 лет жизни!
Код:
unit main; //это работает хорошо

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Contnrs, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Shape1: TShape; 
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

  private
    
  public
   
  end;
    type                          //работа с  ObjectList
 TButtonList = class(TObjectList)  //работа с  ObjectList
  private
    function GetItems(Index: Integer): TButton;
    procedure SetItems(Index: Integer; const Value: TButton);
  published
  public
    property Items[Index: Integer]: TButton read GetItems write SetItems; default;
  end;

var
  Form1: TForm1;
  ButtonList: TButtonList; 
  i,//для циклов
  t,//для дальнейшего сравнения
  j,//
  j2,//цикл до этого номера
  j3,//кнопок за одно движение курсора
  j4,//оборотов курсора по траектории эллипс
  n: Integer;//номер кнопки в момент действия курсора
  mas1: array[1..2] of Integer;//массив    кнопок в последовательности обращения к ним
  mas2: array[1..2] of Integer;//массив кнопок -"- 
  mas3: array[1..2] of Integer;//массив кнопок -"- 
  mas4: array[1..2] of Integer;//массив кнопок -"- 
  completed: array[1..8] of Integer;//номера кнопок -"- 


implementation

{$R *.dfm}
function TButtonList.GetItems(Index: Integer): TButton; 
begin
   Result := TButton(inherited GetItem(Index));
end;

procedure TButtonList.SetItems(Index: Integer; const Value: TButton);
begin
  inherited SetItem(Index, Value);
end;

procedure TForm1.FormCreate(Sender: TObject); 
 var
   i: Integer;
begin
  ButtonList := TButtonList.Create();  //работа с  ObjectList
  for i:= 0 to ComponentCount - 1 do
  if Components[i] is TButton
    then ButtonList.Add(Components[i]);

   for i:=0 to ButtonList.Count - 1 do    // for i:=0 to ButtonList.Count - 1 do
    begin
    ButtonList[i].visible:=False ;  //сделать невидимым True
    ButtonList[i].Tag := i;    //присвоить Tag
    end;
    j2 := 2;//делать циклы до этого значения массива
    j4 :=0;// еще не сделано ни одного круга по траектории
  end;

procedure TForm1.FormDestroy(Sender: TObject); 
begin
   ButtonList.Free;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
 var j: Integer;
begin
    j :=1;
    for i:=0 to ButtonList.Count - 1 do
  begin
    if (X>=ButtonList[i].Left) and (X<=(ButtonList[i].Left+ButtonList[i].Width))
    and (Y>=ButtonList[i].Top) and   (Y<=(ButtonList[i].Top+ButtonList[i].Height))
    then
    begin
     ButtonList[i].visible:=True;
     n:=ButtonList[i].Tag;//в n:=  Tag   Button на которую наведен курсор в данный момент, то есть [i]
      if n<>t then // ну, уж если это новая кнопка, тогда уж...
         Memo1.lines.add('Button.Tag'+IntToStr(n)); //выводим очередную опрашиваемую кнопку
         completed[j]:=n;//заполняем массив последовательностью попадания в кнопки (может пропустили какую? Плевать, это не важно.)
         j3:=j3+1;//мы посмотрели на j3 штук кнопок
         if j3= ButtonList.Count - 1  //а как это много?
         then //этого количества достаточно, чтобы считать, что пройден один круг
         begin
          j4 :=j4+1;  // это был j4 оборот курсора по эллипсу
          Memo1.lines.add('сделали полный круг'+IntToStr(j4));
           j3:=0;// подготовились считать новые круги
         end;
         {
         Хочу разделить массив "completed" на четыре  части:  completed=mas1,mas2,mas3,mas4 .
         Содержимое каждого просуммировать. А затем сравнить эти суммы (этих массивов) между собой.
         Например так: mas4-mas3; mas3-mas2; mas2-mas1; mas1-mas4
         Если положительных результатов было больше трех, то мы двигались по часовой стрелке,
         иначе против шерсти.
         }
    end
    else
    ButtonList[i].visible:=False;

  end;
       t:=n; // ButtonList[n] уже была, запомним её на всякий случай, может пригодиться об этом знать
       for j:=1 to 8 do //кнопок пока только 8, но может быть и очень много
      begin
        completed[j]:=0; //очистим массив попавшихся кнопок для следующего круга
      end;
  end;

end.
Вложения
Тип файла: zip ButtonList12.zip (201.2 Кб, 10 просмотров)
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 21.10.2014 в 23:52.
zvygin1964 вне форума Ответить с цитированием
Старый 08.11.2014, 23:52   #2
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Выглядит это например так:
http://www.fayloobmennik.net/4300949
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 08.11.2014 в 23:54. Причина: Ничего не видно.
zvygin1964 вне форума Ответить с цитированием
Старый 09.11.2014, 00:05   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

дядьмиша, завязывай. тяжёлая наркота – это серьёзно.
бухни бабдашиного самогону, наступи пару раз в коровье говно и езжай уже на рыбалку, а потом к внукам. скажи наркотикам «нет». юзай комп для скайпа, порно и говноклассников; программизм – это не твоё.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.11.2014, 10:21   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я честно не понял что нужно...
Определить по часовой или против часовой стрелки курсор водили что ли?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2014, 10:26   #5
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Да !!!!!!!
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 09.11.2014, 10:43   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я сейчас точно не помню, но вот с потолка проверять можно так:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { private declarations }
  public
    { public declarations }
  end;

var ang:double;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var ax,ay,r,cx,cy,an:double;
begin
 cx:=Width/2; cy:=Height/2;
 ax:=cx-x; ay:=cy-y;
 an:=arctan(y/x);
 if an>ang then Caption:='По' else Caption:='Против';
 ang:=an;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2014, 10:51   #7
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
Смех

Нет. Нужно не по координатам, а по маршруту. Фотографии управляющих органов будут разными, и не только вращения, но и поворота на 90 градусов, и в аксонометрической проекции, и с наклоном.
Мышь будет водить человек с хроническим дрожанием пальцев.
Это уже обсуждалось в теме: http://programmersforum.ru/showthrea...=118353&page=3
"Надо: "сфотографировал вращающийся маховик газового крана;
поместил его на Form1 как фон;
набросал по шкив маховика невидимых и очень мелких Button-ов или Shape-ов (штук 100 или сколько надо);
теперь при движении курсора мыши надо определить в какую сторону его крутили (закрывали или открывали), с какой скоростью и равномерностью (если что не так, то звони 03 и соскребай со стен тех кто выжил.)"

Проиграть .avi из .RES уважаемый min@y™ меня научил...
Учебное видео я снял, озвучил...

В этой теме флуд приветствую!
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 09.11.2014 в 11:57.
zvygin1964 вне форума Ответить с цитированием
Старый 09.11.2014, 12:01   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну вот наконец-то я окончательно ничего не понял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2014, 22:14   #9
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
Хорошо

Цитата:
Сообщение от Stilet Посмотреть сообщение
Caption:='По' else Caption:='Против';
[/CODE]
Спасибо! Работает изумительно! А с какой скоростью и равномерностью крутили шкив маховика узнаю по прохождению через контрольные Button разбросанные по маршруту.
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 19.11.2014, 19:13   #10
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Какой контрольные батаны, слющий, да ?
Что за химера из 10 частей разных животных ?

Аналитика же вполне простая, как и с арктангенсами.
Берём по таймеру несколько точек (постоянно держим очередь из нескольких штук, каждый тик таймера одну старую выбрасываем, новую запоминаем), для каждой соседней пары считаем по Пифагору расстояние, и его анализируем - если допустим 3-5 величин подряд увеличиваются, значит мышка ускоряется и всё в таком духе.
Смену вектора движения тоже можно отследить - когда знак любой из дельты координат меняется, значит вектор начинает смотреть в другую четверть коорд плоскости, на основании чего можно даже сделать анализ формы траектории - дуга с дыркой в какую-то из сторон, линия, или даже С с дыркой в какую-то из сторон и даже круг.
И так далее, много чего можно придумать.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Платформа автоматизации "бизнеса" или конфигурирование против кодинга serzh-kz Общие вопросы по программированию, компьютерный форум 0 06.06.2013 05:35
Диагностика уровня закритичности конвективного течения на основе численного решения задачи Релея -Бенара(Делфи) Эльвира91 Помощь студентам 3 15.03.2013 17:27
ListBox или ComboBox, выбор элмента, в Delphi7 Николай ПН Помощь студентам 11 17.11.2010 19:55
Жильцы против Управляющих компаний или когда в нашей стране восторжествует справедливость? vasek123 Свободное общение 18 05.11.2010 06:37
Arcgis проблема с направлением течения реки treder Помощь студентам 0 06.04.2010 23:07