пятница, 29 апреля 2011 г.

Delphi: Секретная комбинация клавиш или "Пасхальное яйцо" - Часть 2

  В предыдущей статье секретная комбинация клавиш или "Пасхольное яйцо"  я описывал как можно управлять компонентами с помощью секретной комбинации клавиш, и для примера использовал запуск отладочного режима при котором отображается дополнительный функционал. Продолжая цикл заметок в этом направлении я попытаюсь описать как можно задать некие отладочные (настроечные) параметры при старте программы. Параметры будут задаваться следующего вида Project.exe -deb.  Для запуска программы отдельно можно создать ярлык с уже заданными параметрами запуска. И так, приступим.
Откроем к примеру предыдущий проект, или создадим новый. В разделе var добавим переменную DEBUGON, которой по умолчанию присвоем значение false
var
  Form1: TForm1;
  DEBUGON:Boolean = false;

   Следующим шагом будет написание процедуры, которая делает перебор всех входных параметров и устанавливает соответствующие значения (процедуру пишем у разделе implementation):

procedure StartInit; // добавляем для глобальной видимости
var
  Form1: TForm1;
  DEBUGON:Boolean = false;

implementation
{$R *.dfm}

procedure StartInit;
  const
    SDebugOn = '-deb';
  var
    I: Integer;
begin
  for I := 0 to ParamCount do
    if ParamStr(I) = SDebugOn  then
      DEBUGON:=true;
end;
  Проверяем в цыклом от 0 до количества параметров все входные параметры.  Кстати первый параметр с индексом 0 будет путь к программе, и ее названием. Если у нас параметр совпадает с константой SDebugOn, то есть имеет значение -deb - тогда переменная DEBUGON = true.
  Дальше нам нужно вызвать данную процедуру при запуске проекта и перед созданием форм. Для этого нужно в главном меню выбрать Project - View Source. В результате откроется исходный код проекта. Вставим вызов нашей процедуры после инициализации и перед созданием форм. У меня код выглядит следующим образом:
program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  StartInit;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
   Двигаемся дальше. Переходим на форму и создаем обработчик события на onCreate (два раза кликаем на пустое поле напротив названия onCreate в Object Inspector - Events) и пишем следующий код:
    Panel1.Visible:= DEBUGON;

  Если у нас переменная установлена, тогда задействуем некие параметры, в данном случае делаем видимой или нет Panel1 в зависимости от параметра DEBUGON.
  Практически все, теперь можно протестировать наше приложение на работоспособность запустив его с параметром -deb и без него. Для запуска программы с параметром можно воспользоваться средствами Delphi, для этого нужно зайти в Run-Parameters и написать в поле Parameters наше отладочное -deb. Пожалуй все, теперь можно опять протестировать и увидеть результат.

Delphi: Секретная комбинация клавиш или "Пасхольное яйцо" - Часть 1

   Бывают ситуации что нужно сделать в программе некий скрытый режим, при котором были доступны какие либо действия. Либо это так называемые "пасхальный яйца" либо какой то специальный режим, к примеру режим отладки, при котором будет доступна какая то панель, в которую мы можем выводить статус работы программы с внутренними параметрами.
   Приведу один из способов. Пример буду приводить на неком новом проекте, чтобы не было ничего лишнего. И так приступим.
   Создадим новый проект в Delphi (При написании статьи я использовал Delphi 2010). File - New - VCL Forms Application . (Рис.1)

 Рис.1.
  Создастся новый проект. Кликаем левой кнопкой мыши на форму и переходим в Object Inspector на закладку Properies, для того чтобы изменить свойство KeyPreview на True. Это свойство определяет будет ли форма обрабатывать события клавиатуры, прежде чем эти события обработаются элементом управления на котором был установлен фокус. В итоге нам нужно будет описать обработчик нажатия клавиш только для формы. Что мы собственно сейчас и сделаем. В переходим в Object Inspector на закладку Events, и в создадим обработчик события на onKeyDown для этого нужно два раза кликнуть левой кнопкой мыши напротив надписи onKeyDown. После создания события - мы переходи в Code Editor  для написания кода. Я заранее определился какая комбинация клавиш будет служить для запуска режима отладки - это Ctrl+Shift+D.Пишем следующий код:
  if (ssCtrl in Shift) AND (ssShift in Shift) AND (Key = Ord('D')) then
      begin
        // код обработки
      end
  Код думаю понятен, если у нас нажата кнопка Ctrl и Shift и D - тогда выполняется какой то заранее подготовленный код. К примеру разместим на форме панель (Panel1 и установим параметр Visible=false в Object Inspector - Properties), а на панели еще какие то компоненты. и к секции begin ... end вышеописанного кода напишем код для скрытия/отображения панели. Весь код представлен ниже:
  if (ssCtrl in Shift) AND (ssShift in Shift) AND (Key = Ord('D')) then
      begin
        Panel1.Visible:= not Panel1.Visible;
      end;
  Все готово.Запись Panel1.Visible:= not Panel1.Visible; означает что при выполнении кода параметр Visible будет принимать противоположное значение. Теперь можно запускать проект для тестирования. После запуска у нас не будет видна панель, поскольку мы установили свойство Visible = false (Рис.2), но при нажатии комбинаций клавиш Ctrl+Shift+D - панель отобразится (Рис.3)


Рис.2

Рис.3
   Вот собственно и все. В следующем описании рассмотрим как можно задать некие отладочные (настроечные) параметры при старте программы. Вида Project.exe -deb

вторник, 5 апреля 2011 г.

UPDATE command denied to user 'xxxx'@'IP' for table

   При осуществлении каких либо операций с таблицей (редактирование, добавление, удаление данных) возникает окно с сообщением:
Рис.1 

   Текст сообщения следующий: Ошибка возвращения idSQL Error: UPDATE command denied to user 'user'@'192.168.0.1' for table 'tablename'.
   С данного сообщения можно узнать причину невыполнения нашей команды, а именно: UPDATE command denie. В данном случае я пытался обновить данные в таблице, к которой у меня закрыт доступ.
   РЕШЕНИЕ: Открыть доступ пользователю (назначить соответствующие права на выбор, удаление, редактирование... данных), под которым вы хотите делать какие либо изменения.
   После того как я открыл пользователю возможность редактирования записей в БД - все заработало.