Spread the love

Спаси Delphi, помоги зоопарку: GSmart Aku A1

Всеволод как-то предложил описать устройства, которые можно успешно использовать для разработки на Delphi XE5. Вот мои пять евроцентов.
1. Автор обзора: Алексей Тимохин
2. Название телефона: Gigabyte GSmart Aku A1 (год выпуска 2013). Мощный (quad core) и бюджетный (5000-6000 рублей) телефон. Слабые места: камера, экран (углы обзора). Ссылка на обсуждение Aku A1 на форуме 4pda – там же можно найти отзывы и ответ на любой вопрос.
3. Как ставилось, были ли сложности, «лекарство», трюки, чудо (оно как-то само), шаманство и т. д. Драйвер из ASDK не сработал. Помог драйвер с официального сайта.
4. Фото телефона:

5. Разное: недорогое мощное устройство с 2 sim-картами. На момент покупки (декабрь 2013) Aku A1 лидировал по соотношению цена/производительность+отсутствие…

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

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

AppMethod – новая IDE только для Firemonkey от Embarcadero.

И кстати, пользуясь случаем хочу передать привет хочу дать ссылку на Roadmap для Delphi на 2014 год.
Embarcadero готовит что-то новенькое. Причём, у этого чего-то еще будет и бесплатная редакция. Последняя бесплатная IDE, насколько я помню была у Turbo Delphi в далёком 2006, которая вроде даже была довольно популярна несмотря на некоторые ограничения.
Продукт будет называться AppMethod. И будет представлять собой версию RAD Studio только для Firemonkey (без VCL). Для пользователей полной RAD Studio, продукт скорее всего не будет представлять интереса. А вот для новых клиентов заинтересованных в кроссплатформенной разработке, это должно быть интересно.
Согласно информации от Techcrunch, нам обещают бесплатную редакцию для индивидуальных разработчиков (которая будет поддерживать…

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

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

Lazy Delphi Builder 1.10.8.268 Alpha от 27.02.2014.

Скачивать здесь
Очень много нововведений. Существенно переписано ядро. Экспериментальный устаревший TasksEx отвечавший за работу в фоне, заменен на Awaitable модуль от Романа Янковского.
Если обнаружите ошибку, пожалуйста, сообщите.
История изменений Новое: Возможность использовать dccaarm, dcciosarm, dccios32 для сборки Появилась возможность компилировать только debug или только release — в Build dialog добавлена галочка Build release dcus. Добавлены preset-ы для scan file masks Добавлен preset «default» чтобы дать возможность сбросить настройки к значениям по умолчанию. Реализовано для: output directories, file scan masks В диалоге Build settings теперь показывается страница настроек Search Paths Выводить Total…

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

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

VCL: Show vs Visible

У котнролов в VCL есть свойство Visible, которое как называется, за то и отвечает. Если Visible = False, то контрол скрыт и пользователь его не увидит. Если Visible = True, то есть вероятность, что пользователь его увидит.

А есть ещё два метода – Hide и Show, которые взаимодействуют со свойством Visible.

А теперь вопрос: как же правильно скрывать/отображать контрол?

На самом деле вопрос с небольшим подвохом, на него ответить однозначно нельзя, но… давайте по порядку

В большинстве случаев ответ напрашивается сам собой: используем Visible, т.к. это способствует единообразию. Например, потому что есть свойство Enabled, для которого нету методов типа Enable/Disable. У экшенов (TAction) есть Visible, но нет Show/Hide. И ещё такой момент, сравните:

LabelSomeInfo.Visible := SomeCondition;

и

if SomeCondition then
  LabelSomeInfo.Show
else
  LabelSomeInfo.Hide;

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

Ещё можно порассуждать так (на интуитивном уровне, ещё не заглядывая в исходники или справку). Visible – это свойство, которое задаёт (и показывает) состояние контрола на текущий момент времени. Show/Hide – это методы, они призваны изменить состояние контрола, но не факт, что это произойдёт одномоментно, и не факт, что это действие не приведёт к какому-то побочному эффекту. Поэтому (как бы) безопаснее использовать Visible.

Теперь самое время заглянуть в исходники VCL. Hide просто скрывает контрол (устанавливая Visible в False). А вот Show не только меняет Visible, но делает кое-что ещё. А именно – вызывает виртуальный метод ShowControl у родительского контрола (если такой определён). А это и есть тот самый побочный эффект, о котором можно догадаться на интуитивном уровне. На практике, в самой VCL, я нашёл только одно место, где это можно использовать – компонент TPageControl. Когда мы вызываем Show для контрола, расположенного на одной из вкладок PageControl’а, происходит активация той вкладки (TabSheet), на которой этот контрол расположен. Более того, если вложить несколько PageControl’ов друг-в-вдруга, то активация вкладок произойдёт по цепочке от контрола вверх до самой формы.

Т.е. вывод делаем такой: если просто нужно задать состояние для контрола (в большинстве случаев именно это и нужно), то используем Visible. Если нужно акцентировать внимание пользователя на контрол, то используем Show (и ещё, после этого, можно вызвать SetFocus для полей ввода). Зачем нужен Hide – не знаю, видимо он заводился на “автомате”, в противовес Show. Ещё странно, что эти методы не виртуальные…

В общем, это надо знать и уметь применять.

А за примерами, где это может быть применимо, далеко ходить не надо. В самой IDE Delphi: нажимаем F6, набираем “editor font”, жамкаем Enter – открывается окно с настройками IDE, осуществляется переход к вкладке Editor Options Display и устанавливается фокус ввода на комбобокс для выбора шрифта. (Уверен, что это сделано парой вызов Show + SetFocus для самого комбобокса.)

Ещё пример (уже из моей практики). На форме есть обязательное для ввода поле. Пользователь его не заполнил и переключился на другую вкладку, затем нажимает OK. Я вижу, что поле не заполнено, и просто вызываю пару методов Show + SetFocus (не задумываясь, надо ли активировать вкладку, на какой вкладке это поле и т.п.). После этого можно показать сообщение пользователю (мол заполни поле) или даже не показывать, а сделать Beep – фокус уже будет где надо, и пользователь поймёт, что от него требуется.

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

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

6. Свойства и методы формы. Лабораторные Delphi, C++ (3)

Размеры, положение и прозрачность формы в Delphi и C++Builder

Запустите на выполнение Delphi или C++Builder. Создайте новый проект, выбрав в меню File | New | VCL Forms Application — Delphi (File | New | VCL Forms Application – C++Builder). Появится форма нового проекта.

Завершение работы программы

Оставьте для формы все значения свойств по умолчанию.

Положите на форму кнопку Button. Присвойте кнопке текст Закрыть. Установите имя (свойство Name) BExit. Форма примет следующий вид:








Рис. 1. Начальный вид формы

Дважды щелкните мышью по кнопке Закрыть. Появится заготовка для обработчика события щелчка по кнопке, где нужно написать оператор завершения работы всего приложения (метод Terminate() объекта Application):

Delphi

procedure TForm2.Button1Click(Sender: TObject);

begin

  Application.Terminate();

end;

C++Builder

void __fastcallTForm1.BExitClick(Sender: TObject);
{
    Application->Terminate();
}

Запустите программу на выполнение. Щелкните по кнопке Закрыть. Работа программы будет завершена.

Изменение размера формы

Свойство формы Height задает размер высоты, а свойство Widthзадает размер ширины формы в пикселах.

Положите на форму из набора инструментов Tool Palette еще три кнопки Button. Одной присвойте текст Высота, другой Ширина, третьей Размер. Задайте имена BHeight, BWidthи BSize, соответственно.

(Как правило, я стараюсь в реальных программах присваивать компонентам осмысленные имена. Имена кнопок начинаю с символа B, элементов меню — с M).


Рис. 2. Форма (изменение размеров)

Для кнопки Высотанапишите обработчик события щелчка по кнопке, при котором высота формы увеличивается на 10 пикселов. Для кнопки Ширина напишите обработчик события щелчка по кнопке, при котором ширина формы увеличивается на 10 пикселов.

Delphi

procedure TForm2.BHeightClick(Sender: TObject);

begin

  Height := Height + 10;

end;

procedure TForm2.BWidthClick(Sender: TObject);

begin

  Width := Width + 10;

end;

C++Builder

void __fastcallTForm1::BHeightClick(TObject *Sender)
{
  Height = Height + 10;
}

void __fastcallTForm1::BWidthClick(TObject *Sender)
{
  Width = Width + 10;
}

Выделите мышью кнопку Высота. Установите значение свойства Default в True. Для этой кнопки будет вызываться событие OnClick, когда пользователь нажмет клавишу Enter. Выделите мышью кнопку Ширина. Установите значение свойства Cancel в True. Для этой кнопки будет вызываться событие OnClick, когда пользователь нажмет клавишу Esc.

Напишите следующий обработчик щелчка мышью по кнопке Размер:

Delphi

procedure TForm2.BSizeClick(Sender: TObject);

begin

  Height := 500;

  Width := 700;

end;

C++Builder

void __fastcallTForm1::BSizeClick(TObject *Sender)
{
  Height = 500;
  Width = 700;
}

Это устанавливает для формы конкретные размеры.

Запустите программу на выполнение. Изменяйте размеры формы, щелкая мышью по соответствующим кнопкам.

Изменение положения формы на экране

Свойства формы Left и Top определяют положение левого верхнего края формы на экране, соответственно, по горизонтали и по вертикали. Эти значения можно изменять в программе в процессе ее выполнения.

Положите на форму четыре новые кнопки X+, X-, Y+, Y-, присвоив им осмысленные имена BXPlus, BXMinus, BYPlus, BYMinus. При щелчке пользователя по этим кнопкам форма должна перемещаться в указанных направлениях на 10 пикселов.

Рис. 3. Форма (изменение положения)

Напишите следующие обработчики событий щелчка мышью по этим кнопкам:

Delphi

procedureTForm1.BXMinusClick(Sender: TObject);
begin
  Left := Left - 10;
end;

procedureTForm1.BXPlusClick(Sender: TObject);
begin
  Left := Left + 10;
end;

procedureTForm1.BYMinusClick(Sender: TObject);
begin
  Top := Top - 10;
end;

procedureTForm1.BYPlusClick(Sender: TObject);
begin
  Top := Top + 10;
end;

C++Builder

void __fastcallTForm1::BXMinusClick(TObject *Sender)
{
  Left = Left - 10;
}

void __fastcallTForm1::BXPlusClick(TObject *Sender)
{
  Left = Left + 10;
}

void __fastcallTForm1::BYMinusClick(TObject *Sender)
{
  Top = Top - 10;
}

void __fastcallTForm1::BYPlusClick(TObject *Sender)
{
  Top = Top + 10;
}

Размещение формы поверх остальных форм на экране

Чтобы форма всегда была видна на экране и размещалась поверх всех других форм, нужно установить свойство формы FormStyleв значение fsStayOnTop. Запустите программу на выполнение. Делайте другие приложения активными. Данная форма всегда будет находиться поверх всех форм.

Изменение прозрачности формы

Свойство AlphaBlendValueпозволяет установить степень прозрачности формы. По умолчанию задано 255, то есть форма полностью непрозрачна. Значение 0 задает совершенно прозрачную форму, которая на экране просто не будет видна. Промежуточные значения задают градации прозрачности. Это свойство применяется только в том случае, если значение свойства AlphaBlend установлено в True.

Установите значение свойства AlphaBlendв True, а свойству AlphaBlendValue задайте значение 120. Запустите на выполнение программу. Форма будет едва видна на экране.

Установите прозрачность 255. Положите на форму две кнопки, задав для них тексты Прозрачность +и Прозрачность —, присвоив им имена OpacityPlus и OpacityMinus. Щелчок мышью по первой будет увеличивать значение свойства AlphaBlendValue, по второй — уменьшать.

Рис. 4. Форма (изменение прозрачности)

Напишите обработчик события щелчка по кнопке Прозрачность +:

Delphi

procedureTForm1.OpacityPlusClick(Sender: TObject);
begin
  if (AlphaBlendValue <= 245) then
    AlphaBlendValue := AlphaBlendValue + 10;
end;

Обработчик события щелчка по кнопке Прозрачность —:

procedureTForm1.OpacityMinusClick(Sender: TObject);
begin
  if (AlphaBlendValue >= 10) then
    AlphaBlendValue := AlphaBlendValue - 10;
end;

C++Builder

Обработчик события щелчка по кнопке Прозрачность +:

void __fastcallTForm1::OpacityPlusClick(TObject *Sender)

{
  if (AlphaBlendValue <= 245)
    AlphaBlendValue = AlphaBlendValue + 10;
}

Обработчик события щелчка по кнопке Прозрачность —:

void __fastcallTForm1::OpacityMinusClick(TObject *Sender)
{
  if (AlphaBlendValue >= 10)
    AlphaBlendValue = AlphaBlendValue - 10;
}

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

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

Ошибка загрузки в RichEdit большого блока данных

Давеча пришлось дорабатывать одну из утилит сбора информации о системе и как-то неожиданно для меня от отдела тестирования пришел багрепорт плана:
Утилита формирует и сохраняет данные

http://alexander-bagel.blogspot.com/2014/02/richedit.html

Лучшее в Delphi блогах за 2013 год.

 Обновлено 2014.02.21 22:34
Подборка ссылок на лучшие публикации по Delphi за 2013 год.
Аналогичные подборки за предыдущие годы: за 2009 год за 2010 год за 2011 год за 2012 год Оглавление Firemonkey. Кроссплатформенная разработка и разработка для мобильных устройств Мобильная разработка Delphi. Разработка для iOs Delphi. Разработка для Android Delphi pascal-study  svg. Переводы справочной системы Delphi Задачки на понимание Библиотеки и компоненты Авторские библиотеки Windows Ribbon Framework Инструменты Полезные и не очень советы Управление лицензиями RAD Studio Вебинары. Интервью Поток сознания Александра Люлина # Firemonkey….

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

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

Шифрование баз данных в InterBase

Наконец-то дописал статью про шифрование баз.

http://www.ibase.ru/devinfo/ib-encrypt.htm

Вопросы можете задавать как удобнее — либо здесь в комментариях, либо на email в конце статьи.

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

Android, Delphi, и … где моя база?

Еще в сентябре 2013 года, на презентации RAD Studio XE5 я докладывал про IBLite, как с ним работать на мобильных устройствах.
http://www.youtube.com/watch?v=YMs1buTLI1Y
Однако сразу же возник вопрос — где находится база данных на смартфоне, как ее «вытащить», обновить, и так далее. Покопавшись в разных местах, ясного ответа не нашел, а экспериментировать вслепую, или перечитывать тонны абстрактной документации по Андроиду, не хотелось.

И вот, к счастью, нашелся человек, который просто и понятно объяснил, где что и как:

Рекомендую блог Андрея Ефимова, особенно статьи:

Deployment Manager или куда ещё можно задеплоить файлы

Получаем список доступных устройств хранения информации
(должна быть правка под мою Sony Xperia V)

Обновляем файл базы данных без перезапуска приложения
(тут про SQLite, но можно легко переделать и на IBLite)

Собственно, эти статьи, и тестирование кода явились как бы хорошим пинком в правильном направлении, в результате которого я форсирую проведение экспериментов в этой области. Что выйдет быстрее — вебинар с Embarcadero или статья в блоге, пока не знаю. Ждите новостей.

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

Есть ли жизнь после триала?

Предпродажная демонстрация возможностей ПО обычно сводится к двум решениям:
Ограничение функциональности ПО, так называемый демо-комплект.Введение временного (тестового) периода, в течении которого ПО работает с полным функционалом,

http://alexander-bagel.blogspot.com/2014/02/blog-post.html