Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Форма подобна delphi app builder


Автор: SDjon 1.3.2010, 14:58
Добрый день.

Как реализовать форму подобную delphi TappBuilder (форма, где находятся компоненты и основное меню программы)

Первое что пришло на ум

На форму добавить панель 
В обработчик Form1.FormShow
Panel1.width := Screen.width;
Form1.AutoSize:=true;

При этом несовсем понятное поведение формы - 
при максимизации можно таскать форму за заголовок (caption)

Автор: dvamaster 3.3.2010, 07:54
как вариант, отловить нажатие перемещение мыши по заголовку (т.е. текущее сообщение заменить на пустое) когда форма в развернутом виде

Автор: SDjon 3.3.2010, 14:51
Можно заменить
Код

Form1.AutoSize:=true;


на 
Код

 procedure Form1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
      message WM_WINDOWPOSCHANGING;
begin
  CaptionHeight := GetSystemMetrics(SM_CYCAPTION);
Msg.WindowPos^.cy :=  Min(Msg.WindowPos^.cy, Panel1.Height +
//    CaptionHeight);

 inherited;


или

Код

 procedure Form1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
 begin
     inherited;
     with Msg.MinMaxInfo^ do
     begin
//          ptMinTrackSize.x:= Panel1.width;
//          ptMaxTrackSize.x:= Panel1.width;
//          ptMinTrackSize.y:= Panel1.height;
          ptMaxTrackSize.y:= Panel1.height;
   end;
 end;

---
Заглушка на перетаскивание за catpion при wsMaximized
Код

WMNCHitTest(var Msg: TWMNCHitTest);
 begin
      inherited;
  if (Msg.Result = HTCAPTION) and (Self.WindowState = wsMaximized) then
    Msg.Result:= HTNOWHERE
end


но теперь при двойном клике нет возможности вернуть форму в нормальное состояние

есть идеи?


M
Rrader
Используйте подсветку кода (кнопка "Код")


Автор: SDjon 11.3.2010, 11:30
Конечное решение

Код


Ограничиваем высоту главной формы
procedure TForm1.FormCreate(Sender: TObject);
begin
 Constraints.MaxHeight:=pnlMain.Height;
end;


в дочерних
Код

procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging);  message WM_WINDOWPOSCHANGING;


 procedure TChild1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
 begin
     inherited;
{

ptMaxSize Размер окна при его максимизации.
ptMaxPosition Положение левого верхнего угла окна при его максимизации.
ptMaxTrackSize Максимальный размер окна при увеличении его размеров.
ptMinTrackSize Минимальный размер окна при уменьшении его размеров.
}

         Msg.MinMaxInfo^.ptMaxPosition.y:= MainFormBottom;


 end;

где 

MainFormBottom:= Form1.pnlMain.Height +  GetSystemMetrics(SM_CYCAPTION)+10;

+10 константа подобранная "на глаз " т.к. без нее возникает прокрутка на Главной форме (Form1)
Вопрос:
Как точно вычислить высоту?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)