Delphi: правильное определение номера версии Windows 8.1 и Windows 10 (GetVersionEx)

Я разобрался почему ABTool отображает неверную версию Windows на вкладке «Система». Об этом я написал здесь.

Проблема в том, что для определения версии системы я использовал функцию GetVersionEx. А в ОС Win8.1 и выше эта функция возвращает версию ОС = 6.2.9200. Это чётко описано на этой странице MSDN, смотреть последнюю строку с пометкой *.

* For applications that have been manifested for Windows 8.1 or Windows 10. Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2). To manifest your applications for Windows 8.1 or Windows 10, refer to Targeting your application for Windows.

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

Читать далее Delphi: правильное определение номера версии Windows 8.1 и Windows 10 (GetVersionEx)

RAD Studio XE6: Размещение рекламы Admob в Android-приложении

Вот, первый пост в свежем 2015-ом году. Его я посвящу теме программирования, хотя его тут будет минимум. Перейду к делу.

Что имеем:
• Google-аккаунт (с незаблокированным доступом к AdSense!!);
• RAD Studio XE6 и выше (версия важна, т.к. в них разные танцы с бубном);
•готовое (или почти готовое) приложение, написанное в RAD Studio.

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

    1. Создаём рекламный блок

    Шаг 1.1
    Итак, первым шагом необходима регистрация в сервисе AdMob: https://apps.admob.com/admob/signup. Заполняем все необходимые поля. Это и почтовый адрес, и валюта, и что-то ещё, уже не помню.

    После регистрации будет предложено добавить приложение для монетизации. Должен сказать, что AdMob теснейшим образом взаимоинтегрирован с Google Play (кстати, также и с AdSense, и с Analytics, и с прочими гуглосервисами), поэтому на первом шаге будет предложено ввести имя пакета (или своё как разработчика) чтобы найти приложение в GPlay. Но не будет ничего страшного, если в гугломаркете твоего приложения ещё нет.

    Я просто выбираю «Добавить новое приложение вручную» и заполняю поля:

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

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

    В конечном итоге мы получаем индентификатор нашего баннера:

    Он уникален для каждого создаваемого рекламного блока. Имеет формат:


    ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyyy

    где pub-xxxxxxxxxxxxxxxx — твой идентификатор издателя (отображается в правом верхнем углу), yyyyyyyyyy — судя по всему, идентификатор непосредственно самого блока.

    Шаг 1.3
    Сохрани где-нибудь у себя всю полученную строку, без неё ничего не выйдет.



    2. Вставляем рекламу в приложение

    Шаг 2.1

    Открывай свой проект приложения в RAD Studio. В нужном месте твоего интерфейса необходимо добавить компонент TBannerAd. Бросаешь его на форму, выставляешь нужное прилипание (например, классическое MostBottom, при условии, что Parent у баннера именно форма, а не какой-нибудь ListView).

    Для формы создаёшь обработчик события OnShow и в нём пишешь такие строки:

    BannerAd1.AdUnitID := ‘ca-app-pub-xxxxxxxxxxxxxxxx/yyyyyyyyy’;
    BannerAd1.LoadAd;

    Шаг 2.2
    Открываешь блокнотом файл AndroidManifest.template.xml, в него вставляешь строки:
    • перед < activity … >
    meta-data android:name=»com.google.android.gms.version» android:value=»4323000″ /
    • после < / activity >
    activity android:name=»com.google.ads.AdActivity» android:configChanges=»keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize»/

    Примечание 1: здесь из-за глюков местного редактора я убрал в начале и конце этих строк угловые скобки < и >. Визуальный редактор по умолчанию Blogger не умеет корректно отображать какие бы то не были теги, он их обязательно интерпретирует. Т.о. они исчезают из текста и принимают вид части исходного кода страницы.
    Поэтому тебе надо поставить эти скобоки самому: < в начале строки и > в конце. Ничего страшного, всего четыре символа.

    Примечание 2: говорят, с тех пор, как была выпущена XE6, изменился механизм показа рекламы. Толи в Android, толи в AdMob. Поэтому, если ты столкнулся с проблемами, то советую изучить этот вопрос самостоятельно: http://fire-monkey.ru/topic/547-novyi-admob-v-delphi-xe6-prilozhenii. Автор там сам разобрался и говорит, что возможные проблемы должен помочь решить вот этот патч.

    У компонента TBannerAd есть свойство TestMode (boolean).
    Если оно = true, то будет отображаться тестовый блок, а не реклама. Например, так:

    При этом в AdMob не будут считаться показы рекламы, ведь фактически она и не показывается.

    Это делается для того, чтобы протестировать правильность настройки проекта. Когда там будет отображаться настоящая реклама, а ты на неё ткнёшь, то рано или поздно может произойти блокировка доступа ко всему AdSense (а значит и AdMob) для твоего гуглоаккаунта. Поверь, в этом мало приятного.

    Если TestMode не установить в true, тогда в панели управления AdMob счётчики показа будут увеличиваться. Вот так выглядела моя ПУ после тестов моего приложения:

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

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

    Потом просто запустил приложение в очередной раз и реклама таки появилась! Я не сразу понял это, но причина проста: когда создаёшь рекламный блок в панели управления AdSense и потом вставляешь код объявления в нужное место сайта, то реклама там отображается далеко не сразу, а это место чем-то замещается. Проходит какое-то время (от минут до часов) и всё встаёт на свои места. Здесь ситуация аналогичная. Настоящая реклама по началу долго идёт до твоего рекламного места.

    Так что не следует суетиться из-за «нерабочей» рекламы сразу после её создания — возможно, твоё рекламное место ещё не «активировалось». Лучше включи TestMode.

    Несколько ссылок по теме:
    Алгоритм встраивания рекламы в XE6 (пример)
    Алгоритм встраивания рекламы в XE7 (пример)
    Смотри внимательно, они алгоритмы немного различаются.

    RAD Studio XE4: Работа с AbsoluteDatabase

    Вот, записал скринкаст небольшой. Надеюсь продолжить серию по данной теме.

    Ссылка на страницу скачивания на офиц. сайте:
    http://componentace.com/download/download.php?editionid=1

    Прямая ссылка на используемую в скрикасте версию 7.20 для XE4 (офиц. сайт):
    http://componentace.com/data/distr/absolute_d18_720.zip
    Читать далее RAD Studio XE4: Работа с AbsoluteDatabase

    Обновление блога

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

    Вот, подновил дизайн, изменил название. «Блог Delphi’ста» — банально, «Anthony’s blogg_» — просто и попахивает каким-то оригинальным ходом. Ну, знаете, сейчас ведь модно везде в названиях сервисов на английском пропускать одну гласную букву…

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

    Устроился я на работу на месяц-другой, совсем скоро куплю себе на эту небольшую зарплату отличный гуглофон Acer Liquid Mini E310. Завёл себе Твиттер (@AnthonySoprano_). Профиль нашей команды появился в Google+ (http://gplus.to/ITStage).

    После почти полугодичного перерыва снова взялся за написание ABTool. Это уже смешно. И случайно решил изменить интерфейс стандартными средствами Delphi. Получилось довольно аппетитно, но есть ещё нерешённый вопрос: как прилепить CheckBox’ы к категориям/кнопкам компонента TCategoryButtons. Это ведь нужно для очерёдности установки нескольких программ, а, разумеется, стандартный TCategoryButtons не имеет чекбоксов. Надо ковыряться и смотреть как это воплотить.

    Надо сказать, что вес ещё неготовой программы составляет ~1.2 мб. Прежние рабочие версии были ~400 кб. Думаю, делфистам не надо объяснять из-за чего это. Другим скажу, что во всем виноват делфи и его привычка по умолчанию использовать в проекте то, что только утяжеляет программу и добавляет в неё кучу мусора. Я, конечно, с этим стараюсь бороться, но сделать уже готовую программу меньше 2-х мб на делфи мне, кажется, не удастся.

    Если что, я могу запостить скришоты пре-альфа-недоверсии и объяснить новую концепцию программы.

    Небольшая порция новостей

    N7Blog

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

    Уже не помню откуда пошла идея о нашем переназвании, но она развилась довольно сильно. Журнал будет выходить под заголовком IT-Stage, команду мы хотели сначала сделать NetCrew, однако вскоре передумали — N7Team уже прижилось.

    Всё это будет в момент открытия нашего сайта, нормального сайта с нормальным доменом — it-stage.net. В начальстве uCoz видать какие-то зловреды кое-где шевелятся: они уже и не знают как begun’овкую рекламу распихать на халявных сайтах. Ну, да ладно, пошевелятся и успокоятся, а я рассказываю дальше.

    Вчера закончил создание моего первого и немаленького PDF-файла, содержание которого держится в секрете. Я лучше расскажу в какой программе я это делал.

    Microsoft Publisher

    Недавно мне прислали диски от отца, который мне нарезал вроде 6 болванок со всякими полезностями, среди которых была семёрка с первым сервис-паком, много-много софта и… MSOffice 2010. Я его ждал, наверное, больше всего остального. Установил я себе простой пакетик — Word, Excel и Publisher. Вот о последнем я и поведу речь.

    Я видел лишь один редактор PDF-файлов помимо Publisher’а, но уже могу сказать, что Publisher обгоняет множество из ему подобных по многим показателям. Он гораздо более понятный и простой засчёт того, что он смахивает на Word, а к нему уже привыкли практически все.

    Перед началом работы остаётся лишь удостовериться, что все нужные кнопки на месте, псмотреть какие кнопки новенькие (которых нет в ворде), и что Publisher умеет сохранять файлы в PDF. Удостоверились, убедились — и вперёд создавать свои проекты, не задумываясь. В нем все понятно засчёт Ribbon-ленты, которая не скрывает надписей ко многим копкам и не таит секрета о их действии, как в некоторых других продуктах этого рода. Я, посидев в нем несколько часов, уже точно знал на какой вкладке нужная копка, в течение суток понял, что это то, что надо для верстки журнала. В общем, нахваливать сильно не буду, кто захочет, тот убедится сам.

    Перед началом работы с паблишером я все-таки поставил чистую семерку с сервис-паком, установил только нужные программы, в том числе офис. Однако до установки делфи я так и не дошёл. Последнее время меня чет не тянет к нему. Ну, вот не хочу и всё тут. Странно. Надо срочно захотеть, ибо мне еще по нему статьи писать.

    N7Magazine

    Когда мы создали сайт нашей команды у нас возникли некоторые непонятки. Сначала мы хотели сделать что-то вроде копилки наших работ и проектов. А сайт получался каким-то не скромным под такое дело. Разветвился форум, созданы куча страниц, началось создание некоего комьюнити. Мы остановились почесать репу: что делать — копилку знаний только для нас или для всех?

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

    Так вот. Журнал будет, как обычно, ежемесячным и будет ориентирован на программирование на языках C# и Delphi.

    Пока нас в команде только трое, но, уверен, это ненадолго, ведь у нас объявлен набор в команду N7Team.

    Итак, рассказываю.
    Для работы над нам журналом требуется любой, кто хоть как-то связан с любой сферой IT-индустрии. В частности:

    •  креативный дизайнер. Оформление нашего журнала будет меняться месяц от месяца, поэтому нужен профессионал своего дела;
    • верстальщик — для распределения статей по рубрикам и «упаковки» всего материала в PDF-файл;
    • программисты C# и Delphi;
    • авторы статей, обзоров, умеющие максимально полно и грамотно излагать свои мысли;
    • журналисты и редакторы.

    Ну, это пока все, кто необходим. А требования таковы:

    • великолепное знание русского
    • и хоть какое-то знание английского языков
    • умение и/или желание работать в команде единомышленников
    • общительность и креативность.

    Запись на «собеседование» по адресу: N7TeamHelp at gmail.com. В резюме указывайте всё, что хотите: любимые хобби и увлечения, отношение к IT-миру, кем хотели бы стать в будущем (если ещё не стали)… да просто расскажите о себе, и чем больше, тем лучше. Ни одно письмо без ответа не останется, поэтому у вас есть все шансы влиться в наши, пока ещё, скромные ряды редакции журнала N7Magazine!

    А если нет желания присоединяться к нам, в любом случае у вас есть возможность помочь нашему проекту, подкинув нам на N7TeamBase at gmail.com собственноручно написанную статью на околокомпьютерную тематику. Она обязательно попадёт в первый выпуск журнала.

    Ждём вас на страничках нашего сайта.

    Несколько хороших новостей

    JEDI VCL

    Начну с того, что сегодня скачал-таки пачку фирменных компонентов от JEDI Project.

    Признаюсь, раньше я о нём только слышал и открытием это стало для меня совсем недавно, а когда решился найти его описание таки глазам своим не поверил. Чтобы не перечислять все её достоинства можете сами почитать это описание. Больше меня поразило великое множество VCL-компонентов: от модифицированного TMemo до компонента для записи видео с веб-камеры (и не только), не говорю уже о работе с базами данных. Вобщем, кто ещё не имеет эту библиотеку в наличии — советую!

    Журнал VR-Online будет печататься

    Ура! Дождались-таки. В узких кругах это уже давно не новость. Сколько раз на эту тему говорили VR-онлайновцы уже трудно сказать. Но вот, наконец, журнал планируется к печати. Правда пока в черно-белом варианте, из-за дороговизны цветной. Хотя, я надеюсь, скоро появится и цветная версия журнала.

    Сам я очень рад этому событию, хотелось бы заказать себе пару экземпляров. Я уже долгое время являюсь участником этого прекрасного сообщества и мне нравится следить за развитием этого проекта, участвовать в его жизни. Особенно приятно, блуждая по блогам и сайтам, посвященным программированию, увидеть кнопку VR-Online (которую, кстати, нарисовал я, что втройне приятнее), а ещё лучше новость, что этот журнал будет печататься. Это говорит о популярности ресурса в широких кругах программистов. Хочется пожелать удачи всему администраторскому составу в дальнейшем развитии проекта!

    Новый проект

    Ну вот, не успел выйти из одного «проекта» (про тот действительно без кавычек не скажешь), как зачинается другой.

    Друг, с которым мы ушли из прошлой команды, предложил создать что-то своё. Я об этом тоже подумывал, но как-то не решался спросить, и тут оказывается, что мы с ним на одной волне.

    В общем, готовимся сделать сайт, посвященный программированию. Не будут рассматриваться варианты со всеми языками программирования подряд, от Perl до Assembler’a. Сайт будет разветвлён так: моя ветка — Delphi, мой друг берет на себя C#. И ничего более.

    Для начала нас будет только 2-е, и от каждого будут требоваться статьи, уроки, новости и весь прочий текстовый контент для сайта. Причём каждый отвечает за свою ветку, и будет заниматься только ей. Так будет наибольшая отдача проекту: каждый будет выкладывать то, что знает сам, причём никто не поможет друг другу в плане написания статьи о Delphi или C#. У каждого в голове свой язык программирования. И только когда будет уже сформирован сайт вероятно будем собирать команду.

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

    Сейчас подбирается оптимальная CMS для нашего сайта, по возможности будет дополнена и улучшена специально под нас. Конечно, для начала будет сложновато в плане заполнения сайта «чем-нибудь», но кто через это не проходил? 🙂