СИТ "Сетевые Информационные Технологии (в машиностроении)"
Неформальное объединение IT специалистов
 
tltr
..Visual Loodsman for Delphi
Предыдущая страницаСледующая страницаГлавная страницаКарта сайтаКарта сайта
   
   
   
  Главная
  Карта сайта
  Контакты
   
  Учебное пособие:
  Содержание
   
   
  Компания АСКОН
     
.....
Урок 2 - Создание заготовки дочернего (MDIChild) окна (продолжение).
 

Шаг 2.3 - Создание базовых процедур MDIChild окна.

.....В первую очередь создадим процедуру закрытия формы. Встаньте на форму и в окне инспектора свойств перейдите на закладку Events. Дважды щелкните левой кнопкой мыши на событии OnClose. В созданной процедуре FormClose введите строку, как показано ниже.

procedure TfmMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
.....Action:=caFree;
end;

.....Далее реализуем механизм отключения полноэкранного режима для дочерней формы (описнаие механизма см. Урок 1 Шаг 1.4). В структуре описания формы fmMDIChild в секции private зарегистрируем новые переменные (своеобразный буфер для хранения текущей позиции и размера формы), создадим секцию protected и переопределим процедуру WndProc, как указано ниже.

     TfmMDIChild = class(TForm)
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
     private
          { Private declarations }
          BufWidth: integer;
          BufHeight: integer;
          BufTop: integer;
          BufLeft: integer;
     protected
          { Protected declarations }
          procedure WndProc(var Message: TMessage); override;
     public
          { Public declarations }
     end;

.....В разделе implementation введем следующую строку:

uses VLDefinition;

.....Установите курсор на описание процедуры WndProc и нажмите клавишы <Ctrl>+<Shift>+<C>. Будет создана процедура WndProc, в теле процедуры введите строки, как указано ниже.

procedure TfmMDIChild.WndProc(var Message: TMessage);
begin
     case Message.Msg of
     // если системная команда
     WM_SYSCOMMAND:
          begin
               if Message.WParam=SC_MAXIMIZE then
               // если сделать размер формы максимальным
               begin
                    if Self.BufWidth=0 then
                    // если буфер обнулен
                    begin
                         // заполнить буфер текущими размерами формы и текущей позицией
                         Self.BufTop:=Self.Top;
                         Self.BufLeft:=Self.Left;
                         Self.BufWidth:=Self.Width;
                         Self.BufHeight:=Self.Height;
                         // обнулить позицию и увеличить размер на все свободное клиентское пространство главной формы
                         Self.Top:=0;
                         Self.Left:=0;
                         Self.Width:=CurClientWidth;
                         Self.Height:=CurClientHeight;
                    end
                    else
                    // если буфер заполнен
                    begin
                         // восстановить текущую позицию и размер формы
                         Self.Top:=Self.BufTop;
                         Self.Left:=Self.BufLeft;
                         Self.Width:=Self.BufWidth;
                         Self.Height:=Self.BufHeight;
                         // обнулить буфер
                         Self.BufTop:=0;
                         Self.BufLeft:=0;
                         Self.BufWidth:=0;
                         Self.BufHeight:=0;
                    end;
               end
               else inherited;
          end;
     WM_NCLBUTTONDBLCLK:
     // если двойной клик
          begin
               if Message.WParam=HTCAPTION then
               // на заголовке формы
               begin
                    // послать системную команду развернуть форму на весь экран
                    SendMessage(Handle,WM_SYSCOMMAND,SC_MAXIMIZE,Message.LParam);
               end
               else inherited;
          end;
     else inherited;
     end;
end;

     Эта переопределенная процедура перехватывает системное сообщение с командой о развертывании формы на весь экран. После этого проверяет заполнен ли буфер размеров и позиции формы. В зависимости от этого либо увеличивает форму на все клиентское пространство головной формы, либо восстанавливает текущую позицию и размеры формы. Кроме этого перехватывается двойной клик мышкой на заголовке формы. После этого форме отправляется системное сообщение о развертывании формы на весь экран. В остальных же случаях выполняется процедура WndProc родительского компонента - собственно формы (TForm).
     Для проверки работы вновь созданной формы перейдите в модуль PCMain описания главной формы приложения, в секции implementation в разделе uses добавьте имя модуля PCMDIChild, как показано ниже:

uses VLDefinition, PCMDIChild;

     Далее загрузите редактор компонента am - менеджера действий (TActionManager см. рис. 2.2), дважды щелкните левой кнопкой мыши на действии LibOKP (Классификатор ОКП). Delphi создаст процедуру для этого действия. Введите в тело процедуры строку, как указано ниже:

procedure TPLMCom.LibOKPExecute(Sender: TObject);
begin
     // создать форму
     TfmMDIChild.Create(Application);
end;

     Скомпилируйте проект, загрузите приложение и проверьте как реагирует форма на развертывание на весь экран и двойной клик на заголовке.

     На этом данный урок закончим.

.....Продолжение...


Предыдущая страницаСледующая страницаГлавная страницаКарта сайтаКарта сайта
 
...© 2010 "Сетевые Информационные Технологии" ...Главная...Карта сайта...Контакты