Датчики в VCL в XE6

добавлено: 17 апр 14
понравилось:0
просмотров: 2062
комментов: 2

теги:

Автор: PeaK

Одна из новых возможностей для VCL в XE6 это наличие компонентов для работы с датчиками.
Сейчас, открыв Tool Palette в VCL проекте Вы увидите три новых компонента на вкладке Sensors. Возможно Вы уже использовали их в Ваших FM приложениях, тогда Вы можете начать их использовать и в VCL. Никаких изменений, только одно ограничение – VCL приложения только для windows. Если у Вас есть Windows планшет с датчиками Вы можете попытаться сделать Ваши приложения более дружественными и удобными.

Пара советов
- Установите на планшет PAServer для windows. Это значительно упростит отладку.
- Настройте удаленный доступ к плашету. На большинство планшетов предустановлена Windows без RDP но существует remote assistant, что существенно облегчает разработку и отладку,
Если Вы никогда не использовали датчики в FM следует знать: каждый компонент предоставляет доступ к одному датчику из списка (категории). Т.е. TMotionSensor позволяет подключиться к следующим датчикам: акселерометр, детектор движения, гироскоп, спидометр. Это зависит от конкретной модели планшета.
Начнем!
У меня есть планшет на котором есть компас. Что мне следует сделать для его использования?
Поместить TOrientationSensor на VCL форму. Выбрать вкладку Events в Object Inspector и создать событие OnSensorChoosing. Это событие позволяет определить какой датчик мы собираемся использовать. Для компаса код может быть следующим:
procedure TForm5.osCompassSensorChoosing(Sender: TObject; const Sensors: TSensorArray; var ChoseSensorIndex: Integer);
var
  I : integer;
begin
  for I := 0 to Length(Sensors) - 1 do
    if (Sensors[I] as TCustomOrientationSensor).SensorType = TOrientationSensorType.Compass3D then
    begin
      ChoseSensorIndex := I;
      Break;
  end;
end;

Видно, что я назвал компонент osCompass.
Ничего сложного. Просто пробегаем по массиву и возвращаем индекс первого датчика, который является компасом.
Мы хотим получить азимут? Активируем датчик и считаем значение:
osCompass.Active := True;
LAzimuth := osCompass.Sensor.CompMagHeading;

Или другое свойство, поддерживаемое данным датчиком. Набор поддерживаемых свойств хранится в AvailableProperties
osCompass.Sensor.AvailableProperties

Дальше можно добавить TTimer и опрашивать датчик периодически или опрашивать его по необходимости.
Ничего сложного. В аттаче пример VCL проекта с демонстрацией получения значений GPS, акселерометра, компаса и датчика положения.

Комментарии


  • Это форумская подсветка синтаксиса или в дельфах всё так же убого выглядит код в редакторе?

  • Подсветка блоговская, но у меня в RAD Studio выглядит так же.



Необходимо войти на сайт, чтобы оставлять комментарии