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

вторник, 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-файл.
Затем нас ждет знакомство с разработкой более сложного проекта, в работе которого будет использовано подключение к базе данных и работа с записями, хранимыми в ней.
Удачи всем!