сенсорных

Мультитач (рус. Множественное касание) — функция сенсорных систем ввода (сенсорный экрансенсорная панель), осуществляющая одновременное определение координат двух и более точек касания. © Wiki. 
Как-то незаметно для меня прошли все эти новые веяния в виде активных

http://alexander-bagel.blogspot.com/2014/10/multitouch-gestures-xe4.html

Работа с MapWindow GIS. Убираем ошибку floating point division by zero в 4.9.2

Всем привет дорогие читатели блога, а самое главное, любители MapWindow GIS и вообще, любых других геоинформационных систем. Я обещал, что буду постепенно публиковать  материал  по новой версии MapWindow GIS, поэтому данная небольшая статья для решения одной проблемы с новой версии.

Мне уже задавали этот вопрос, а именно, что когда устанавливают компонент TMap на свою форму, а затем просто при компиляции проекта появляется ошибка: floating point division by zero. Если честно, то я не знаю, в какой момент она возникает. Может это связано с системой координат, либо еще что-то, но решается она очень и очень просто, по крайней мере, я так ее решил. Эту ошибку я наблюдал в Delphi 7, что касается других версий Delphi, я сказать ничего не могу, поэтому ее может просто и не быть.

Поэтому, если после обновления MapWindow GIS до версии 4.9.1 или 4.9.2 у Вас появляется подобная ошибка, то ниже будет описано, как ее можно решить. Мы просто отключим исключения, которые возникают с использованием чисел с плавающей точкой.

Для начала нам нужно объявить константу:

const MCW_EM = DWord($133f);

А затем на событие OnCreate формы, либо можно OnShow пишем следующий код:

Set8087CW(MCW_EM);

Вот и все, как видите, ничего сложного. Теперь нам необходимо просто установить компонент на форму и скомпилировать проект. У меня такой ошибки больше не появляется, и программа отрабатывает на 100 процентов.

Гомельский государственный университет им. Франциска Скорины

Читать на сайте автора.

Стиль оформления кода. Вместо вступления

Читая чужой код, или даже свой собственный (спустя неделю-месяц-год), наверняка каждый хоть раз да испытывал это ощущение “вырви глаз”. Ощущение, когда не покидает мысль: “да это проще переписать заново, чем разбираться в этом”. Речь конечно идёт о стиле оформления кода.

Стиль оформления – это форматирование кода (пробелы, отступы, переносы строк), соглашение об именовании (регистр букв и допустимые символы при написании идентификаторов, директив и зарезервированных слов), а также набор неких правил, используемых при кодировании (именование идентификаторов, комментирование кода, расположение программных блоков относительно друг-друга в рамках одного исходного текста и разделение кода по файлам).

Неделю назад (17.10.2014) я попросил сообщество проголосовать. Голосование продолжается, но уже очевидно, что вопрос о стиле оформления кода в Delphi остаётся актуальным.

Немножко лирики

Если Вы утверждаете, что Вам всё равно, как оформлен код, то выделяйте пожалуйста, Вам ещё всё равно, или уже всё равно. И вот почему.

Наверняка у всех было нечто такое. На начальном этапе изучения своего первого языка программирования мы ещё не задумываемся о стиле. Нам важно понять как работают программы, а как написан код – совершенно всё равно, да хоть в одну строку. Назовём это нулевой ступенью.

Затем, набивая раз за разом себе шишки о собственный же код, рано или поздно многие программисты “прозревают”, и по-тихоньку приходят к неким стилевым правилам самостоятельно. И это хорошо. Назовём такое прозрение первой ступенью.

Одно плохо. Чувство стиля – оно сугубо субъективно. При постоянном кодировании оно имеет тенденцию к развитию. И чем сильнее это чувство развито, тем больнее воспринимается “плохой” код. Назовём это второй ступенью, когда при чтении кода, оформленного в “другом” стиле вызываются негативные эмоции вплоть до не понимания кода.

Ну и наконец может настать момент, когда программисту уже всё равно, как оформлен код (главное чтобы он был оформлен хоть как-то). Назовём это третьей ступенью.

И на нулевой ступени и на третьей – нам всё равно. Но между ними лежит огромная пропасть.

 

Конечно, эти ступени весьма условны (я их вот сейчас сходу выдумал). Но есть очень важный момент – развить в себе правильное чувство стиля. Стремиться к тому стилю, который используют большинство программистов. И тогда негативные эмоции на второй ступени можно свести к минимуму.

Проблема

Не существует общепринятых правил. Даже справка в самой Delphi пестрит разнообразием стилей (мол смотрите, вы можете написать и таК, и ТаК и ТАк, а мы это откомпилируем). Ну и конечно наследие: когда-то давно мониторы были маленькими, текста на экране помещалось мало, не было подсветки синтаксиса и т.п. А времена меняются, язык расширяется, среда IDE Delphi обзаводится всякими вкусностями… Мне вот становится очевидным, что должен быть официальный, поддерживаемый (обновляемый) документ с набором рекомендаций от Embarcadero. А придерживаться этого документа, или нет – конечно дело каждого. Но для фрилансеров (которые отдают свой код заказчику), бибилотеко/компонентописателей (которые публикуют свой код) и для программистских отделов/компаний (где работает более одного программиста) такой документ был бы крайне полезен. Мм.. преподавателей забыл упомянуть – это тоже важно.

Но чего нет – так нет. А когда самодисциплины не хватает – приходится самостоятельно составлять некую инструкцию и принимать её внутри компании. Конечно есть вещи, которые нельзя вынести за пределы компании, но я надеюсь получить документ, который можно будет опубликовать. (Т.е. в  итоге, наверное, будет два документа – общие требования и внутренние.)

Сейчас такой процесс у нас (наконец-то?) запущен. Скорее всего, я буду постепенно публиковать некоторые правила (ну чтобы получить фидбэк – это очень важно), а потом в конце всё сведу в отдельный файл.

С чего начать

Если Вы находитесь на нулевой или первой стадии (а также просто для общего развития) рекомендуется к прочтению:

А также:

 

Если у Вас есть полезные ссылки – добавляйте в комментарии. Если у Вас есть свой набор правил или свои инструкции – пишите, можно на e-mail (есть в профиле) или g+. Я постараюсь принять к сведению, может быть получится что-то обобщить.

 

P.S.: Вот у меня сейчас очень близко к третьей ступени, и я боюсь, что когда я на неё поднимусь, мне будет всё равно настолько, что я не буду делать никаких документов и писать на эту тему заметки в блог. А пока меня это тема ещё волнует – не проходите мимо, Ваши комментарии (советы, замечания, критика) служат хорошим стимулом для продолжения.

Читать на сайте автора.

Работа с MapWindow GIS. Новая версия 4.9.2. Обзор обновлений

MapWindowGIS в DelphiВсем доброго времени суток. Давненько я не писал ничего про MapWindow GIS в Delphi. Может оно и к лучшему, так как летом вышла очередная новая версия данного ActiveX-компонента, в которой наконец-то появилась поддержка Google-карт.

Мы уже с Вами рассматривали один проект, который позволяет в своих программах добавлять интерактивные карты Google. Эта библиотека называется GMLib и я уже о ней рассказывал на этом блоге. Но многим нравиться именно MapWindows GIS, так как по мне, она более функциональная и универсальная, да и разобрали в данном компоненте мы уже прилично вопросов.

Так вот, здесь я хотел бы поговорить о новой версии, которая вышла в августе 2014 года – MapWinGis 4.9.2. Вам лишь необходимо скачать последнюю версию с официального сайта (ссылка) для своей операционной системы.

Затем на всякий случай удалите старую версию компонента и установите новую, как это сделать я рассказывал в данной статье. Сейчас поговорим о самых интересных и больших обновлениях в этой версии, а в следующей статье уже будем рассматривать, как можно работать с этим компонентом.

Вообще, карты Google теперь в проекте Вашем могут выглядеть следующим образом:

MapWindowGIS 4.9.2

Горячие клавиши по умолчанию

Теперь на карте есть свои встроенные горячие клавиши, которыми можно с легкостью управлять своим проектом, например:

  • «+» — увеличение на карте
  • «-» — уменьшение на карте
  • «*» — увеличение на карте до ближайшей плитки
  • «M» — измерение расстояния
  • «Колесо мыши» — увеличение или уменьшение масштаба, в независимости от того, какой тип курсора у Вас установлен
  • «Z» — увеличение
  • «Shift+Left» – увеличение до предыдущего слоя
  • «Shift+Right» – увеличение до следующего слоя

Горячие клавиши будут работать только в том случае, если на вашей карте установлен фокус. А стрелки влево и вправо будут работать, только при выполнение некоторого кода, об этом будет рассмотрено в следующих статьях, так как здесь в основном рассматриваем новые возможности.

Измерения расстояния и площади

Теперь Вы можете очень легко и просто измерять площадь и расстояние на своих картах. Поэтому, чтобы Вы могли начать измерение расстояния, необходимо в свойствах компонента  CursorMode выбрать cmMeasure, либо же использовать горячую клавишу «M», но в данном случае карта должна находиться в фокусе.

Чтобы измерить площадь необходимо включить режим измерения площади, это делается следующим образом:

Measuring.MeasuringType:=MeasureArea;

Вот так будет выглядеть измерение расстояния:

MapWindowGIS 4.9.2

А вот так измерение площади:

MapWindowGIS 4.9.2

Данный режим также поддерживает различные горячие клавиши:

  • Щелчок левой кнопки мыши – добавление новой точки
  • Щелчок правой кнопки мыши – стирание последней добавленной точки
  • Двойной щелчок мыши – разделение измерения пути
  • Ctrl+щелчок мыши – закрывает полигон для измерения
  • Shift+щелчок мыши – привязывает линию к ближайшей вершине на слое карты

Кроме этого, теперь можете создавать слои без создания нужных объектов. В версии 4.9.2 еще много различных вкусностей: он поддерживает и гибридные карты Яндекс, Yahoo и других картографических систем, о которых мы будем говорить в следующих статьях.

Обновление предыдущей версии MapWindowGIS

Если Вы не знаете, как можно установить новую версию ActiveX-компонента, то посетите данную статью. Если же она у Вас установлена, то можно просто ее обновить, например, при помощи регистрации библиотеки с помощью команды regsvr32 (Пуск-Выполнить), либо же просто импортируйте новую версию компонента в Delphi.

На этом все, хотели бы Вы дальше читать статьи по MapWindowGIS в Delphi?

Читать на сайте автора.

10. События формы. Лабораторные Delphi, C++ (6)

События перемещения мыши на форме в Delphi и C++Builder

Здесь будут исследованы события формы, появляющиеся при перемещениях пользователем указателя мыши по форме:

Читать на сайте автора.

Как добавить "резиновый" SplashScreen в XE7

Как известно, в XE7 упростили возможность добавления заставки (SplashScreen) для нашего приложения. В этой заметке я расскажу как добавлять «статичную» и «резиновую» заставки. Данная заметка

Читать на сайте автора.

Спрайтовая анимация в FM

Читать на сайте автора.

Немного про замыкания

Наверное для тех кто постоянно использует замыкания не будет новостью. Но вот осознал, что может существовать только одно замыкания для какого то конкретного контекста. То есть, анонимных функций может быть несколько, но анонимный класс для контекста создается один.
В этом легко убедиться:

program closuretest;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils;

procedure Test;
var
i: Integer;
m: string;
proc, proc2: TProc;

function GetClosure1:TProc;
begin
Result := proc;
end;

function GetClosure2:TProc;
begin
Result := proc2;
end;

var
intf1, intf2: IInterface;
begin
i := 0;
proc := procedure()
begin
inc(i,2);
Writeln(i);
end;
proc2 := procedure()
begin
inc(i,3);
Writeln(i);
end;

proc();
proc2();

GetClosure1.QueryInterface(IInterface, intf1);
GetClosure2.QueryInterface(IInterface, intf2);
Writeln(GetClosure1 = GetClosure2); //False
Writeln(intf1 = intf2); // TRUE, что и требовалось доказать

Read(m);
end;

begin
try
Test;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

Читать на сайте автора.

Android 4.4 и запись на внешнюю карту памяти…

До Android 4.4 (API 19), нам приходилось читать файлы (vold.fstab, mounts), чтобы понять, установлена ли внешняя карта памяти и какой до неё путь.  Теперь у

Читать на сайте автора.

Переход с Delphi 2010 на Delphi XE7

Чуть больше года назад я писал об успешном переходе с Delphi 7 на Delphi 2010 приложений в нашей компании (Вот и мы перешли на Юникод).

В этой заметке кратенько опишу об особенностях перехода с Delphi 2010 на Delphi XE7.

Требования остались прежними – надо чтобы работало и там, и там. Впоследствии, возможно, с отказом от использования Delphi 2010. (От Delphi 7 мы уже отказались… ну за исключением совсем старых программ, которые не развиваются.)

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

Черновой переход – компиляция и запуск программ со случайным “прокликиванием” интерфейсов и без прогонки тестов – у меня занял всего несколько часов (менее одного рабочего дня). Тяжелее скучнее всего было делать замены такого плана:

  с DecimalSeparator на
  {$if CompilerVersion >= 24}FormatSettings.{$ifend}DecimalSeparator

потому что надо было:

  • найти номер версии Delphi, где это произошло в RTL (в данном случае это XE3 – произошёл отказ аж от 20 штук глобальных переменных в пользу всего одной);
  • таких подобных мест очень много – кроме групповой замены я себе ещё помечал, что не плохо бы пересмотреть код.

Удивила так называемая нормализация типов TPoint, TRect, TSize (в XE2). В одном месте даже написал такой хелпер (хелпер оказался лишним, всё решилось проще, путём переименования локальной переменной).

Ну и некоторые другие редкие мелочи, типа UNIT_PTR или LRESULT.

Переход пока черновой, ради спортивного интереса. Скорость полной сборки приложений можно сказать, что осталась прежней – я проводил по несколько измерений после разных сценариев использования IDE – разница в среднем на 0.4 сек дольше, чем в Delphi 2010 (редко бывало и наоборот). Размер исполняемого exe-файла, получаемого на выходе – в XE7 в среднем на 2.5 мегабайта больше (в Release-сборке, проверял на семи проектах с размером экзешников от 6 до 19 мегабайт).

При этом, стоит отметить как плюс в сторону IDE – Find Declaration (он же Ctrl+Click) стал стабильно добираться до цели, в Delphi 2010 же он через какое-то время просто отваливается.

Сейчас в XE7 пока достаёт только то, что при открытии проекта IDE сразу загружает все модули,объявленные в dpr-файле. И из-за того, что компоненты в IDE я пока не устанавливал, Delphi выдаёт десятки окон вида:

image

Приходится зажимать Escape и ждать… ну секунд 10, терпимо.

Пока я доволен.

P.S.: не спешно (ну очень не спешно) готовлю обновление для BaseForms и dnSplitter. Ваши комментарии могут сыграть роль волшебного пендаля :с).

Читать на сайте автора.