Показаны сообщения с ярлыком About. Показать все сообщения
Показаны сообщения с ярлыком About. Показать все сообщения

вторник, 20 марта 2012 г.

Урок 36. Продолжаем разговор...

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

Прежде, чем углубиться дальше в лес Delphi и не только,  я бы хотел оживить некоторые пункты меню проекта "Расходы".

Шаг 1. Пункт меню "О программе"


Когда-то, в уроке №13, я рассказал о том, как сделать компонент "О программе". Вам придется его немного подправить :-) и разместить на форме MainFrm, а затем назначить соответствующему пункту меню вот такой простой обработчик:


procedure TMainFrm.N_AboutClick(Sender: TObject);
begin
  PrDAboutBoxDlg1.Execute;
end;


Наделите компонент следующими свойствами:



Щаг 2. Никто не обратил внимания, что кнопка Cancel (PrDCancelButton1) на верхней панельке осталась без обработчика. Добавьте обработку действий, когда пользователь ничего не ввел в поля новой записи или передумал добавлять новую запись:


procedure TMainFrm.PrDCancelButton1Click(Sender: TObject);
begin


  // Отказ от редактирования
  ADOTableMain.Cancel;
  DBGridEh1.Enabled:=True;                                   // Переключение грида в режим доступности
  Panel3.Visible:=False;                                            // Скрытие верней панели


end;

Шаг 3. Новый Action Data_Insert, обрабатывающий процесс добавления новой записи, необходимо добавить в список ActionList и подложить его под соответствующие пункты главного меню и PopupMenu:


Обработчик события выполнения экшена:


procedure TMainFrm.Data_InsertExecute(Sender: TObject);
begin


  // Новая запись
  ADOTableMain.Insert;


end;



Внимание! Не забыть вернуться к процедуре:

procedure TMainFrm.Data_SelectMOExecute(Sender: TObject);    // Соответствует N_EditClick
begin
...
  //   Сделать доступным именно Action, а пункты меню станут доступными автоматически
  Data_Insert.Enabled:=True;


Шаг 4. Выбор базы данных

Добавьте Action в категорию Service


Создайте обработчик Action:




procedure TMainFrm.Service_Select_DiskExecute(Sender: TObject);
begin


  // Выбор диска с базой данных
  SetDisk;
  MainConnecting;
  TableActive(True);


  // Инфо на статусбаре
  StatusBarUpdate;


end;

Установите соответствие пункта меню и нового действия.
Данный пункт меню позволит Вам выбрать для просмотра и работы другую базу данных (например, по прошествии года, после архивации базы данных, сохранения ее в другом каталоге).

На этом пока все.
В следующем уроке я предполагаю показать как "перевести" интерфейс программы на другой язык.



пятница, 10 июня 2011 г.

Урок 13. Компонент “О программе”


В предыдущем уроке я рассказал как добавить в приложение форму “О программе”. Несколько форм в одном приложении - дело повсеместное и привычное. Но что делать, если разрабатывается большая система, состоящая из множества программ? Пусть даже не система, пусть Вы написали уже много программ, и Вам хочется, чтобы такая форма как “О программе” или какой-то общий справочник, кодификатор, были одинаковыми во всех программах. Копировать каждый раз файл формы *.pas из папки с одним проектом в папку с другим? Или каждый раз добавлять в новый проект из какого-то одного директория? И первый, и второй способы неудобны, хотя и они приемлемы. Гораздо удобнее на случай раз и навсегда отлаженной формы, сделать на ее основе компонент, зарегистрировать его в панели Tools рабочей среды, и пользоваться.
Проведите эксперимент по удалению формы из проекта, рассмотренного на предыдущем уроке. После компиляции и запуска программы, форма “О программе” будет вызвана на экран как ни в чем не бывало. Поскольку я руками прописал в uses ссылку на модуль формы About, я должен это описание руками же и удалить, не забыв удалить и операторы создания и вызова этой формы из соответствующей процедуры.
Затем создайте модуль компонента:
unit PrDAbout;
interface
Uses SysUtils
, WinTypes
, WinProcs
, Messages
, Classes
, Graphics
, Controls
, Forms
, aboutLes                                       // Объявление о намерении
// использовать модуль
// About
;
Type TPrDAbout = class(TComponent)                // Новый класс
Public
Constructor Create (AOwner: TComponent); override;    // Объявление конструктора
Function Execute: Boolean;                      // Объявление функции, реализующей
// метод "выполнить"
end;
Procedure Register;                               // Объявление процедуры регистрации
implementation
Constructor TPrDAbout.Create (AOwner: TComponent);// Конструтор компонента
Begin
Inherited Create(AOwner);                       // Оператор, устанавливающий
// наследование всех свойств
// и методов от предка TComponent
end;
Function TPrDAbout.Execute: Boolean;              // Текст метода
Begin
AboutFrm:=  TAboutFrm.create( Application);     // Создание формы, описанной
// в модуле About
Try
Result:= (AboutFrm.ShowModal = IDOK);         // Оценка возвращаемого результата
// и передача его в результат
// работы функции (тип Boolean)
finally
AboutFrm.Free;                                // Создалась форма или нет,
// память надо очищать
end;
end;
Procedure Register;                               // Регистрация компонента TPrDAbout
// на закладке  Pro-Delphi Lib
Begin
RegisterComponents('Pro-Delphi Lib',[TPrDAbout]);
end;
end.
И сохраните его.
Создайте новый пакет, добавьте в него новый модуль, инсталлируйте пакет в среду разработки Delphi. Обратите внимание, что при создании формы About я использовал ранее созданные компоненты (например: компонент гиперссылку), поэтому в процессе инсталляции пакета, на экран будет выведено окно с информацией о безусловном включении модулей этих компонентов в пакет, как необходимых для создания данного компонента.
Вообще-то, я не склонен делать одни новые компоненты на основе других, разработанных ранее. Во-первых, даже при всей моей любви только к параллельным и перпендикулярным направлениям, легко запутаться, что где хранится и откуда берется. Во-вторых, изменения, вносимые в логику работы более ранних компонентов, никак не отразятся на более поздних. В-третьих, если Вам необходимо избавиться навсегда от какого-то компонента (скажем, разработали другой, более крутой), а он “завязан”  на кучу других, то это становится настоящей проблемой.
Наглядный видео урок Вы можете посмотреть или скачать.

Что же дальше?
На следующем уроке я планирую рассказать о создании и добавлении в проект “Таймер” еще одной формы. С помощью этой формы можно будет задать настройки программы и сохранить их.
А через урок я завершу цикл, посвященный проекту “Таймер” рассказом о том, как можно обработать уже готовый exe-файл.
Затем нас ждет знакомство с разработкой более сложного проекта, в работе которого будет использовано подключение к базе данных и работа с записями, хранимыми в ней.
Удачи всем!