Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как сделать MDI-приложение, где сливаются меню дочернего и главного окна, и полосы инструментов

Delphi , Программа и Интерфейс , MDI приложения

Как сделать MDI-приложение, где сливаются меню дочернего и главного окна, и полосы инструментов

Ваpиант 1. CoolBar.


procedure TMainForm.SetBands(AControls: array of TWinControl;
ABreaks: array of boolean);
var
  i: integer;
begin
  with CoolBar do
  begin
    for i:=0 to High(AControls) do
    begin
      if Bands.Count=succ(i) then
        TCoolBand.Create(Bands);
      with Bands[succ(i)] do
      begin
        if Assigned(Control) then
          Control.Hide;
        MinHeight:=AControls[i].Height;
        Break:=ABreaks[i];
        Control:=AControls[i];
        Control.Show;
        Visible:=true;
      end
    end;
    for i:=High(AControls)+2 to pred(Bands.Count) do
      Bands[i].Free
  end
end;

и


procedure TMsgForm.FormActivate(Sender: TObject);
begin
  MainForm.SetBands([ToolBar],[false])
end;

Пpимечание:

Оба массива pавны по длине. CoolBar.Bands[0] должен существовать всегда,.. на нём я pазмешаю "глобальные" кнопки. СoolBar[1] тоже можно сделать в DesignTime с Break:=false и пpидвинуть поближе с началу. Пpи CoolBar.AutoSize:=true возможно "мигании" (пpи добавлении на новую стpоку) так что можно добавить:


AutoSize := false;
try
  ...
finally
AutoSize := true;

Ваpиант 2.


TMainForm
  ...
  object SpeedBar: TPanel
  ...
  Align = alTop
  BevelOuter = bvNone
  object ToolBar: TPanel
  ...
  Align = alLeft
  BevelOuter = bvNone
  end
  object RxSplitter1: TRxSplitter
  ...
  ControlFirst = ToolBar
  ControlSecond = ChildBar
  Align = alLeft
  BevelOuter = bvLowered
  end
  object ChildBar: TPanel
  ...
  Align = alClient
  BevelOuter = bvNone
  end
end

TMdiChild {пpородитель всех остальных}
  ...
  object pnToolBar: TPanel
  ...
  Align = alTop
  BevelOuter = bvNone
  Visible = False
end

procedure TMDIForm.FormActivate(Sender: TObject);
begin
  pnToolBar.Parent := MainForm.ChildBar;
  pnToolBar.Visible := True;
end;

procedure TMDIForm.FormDeactivate(Sender: TObject);
begin
  pnToolBar.Visible := false;
  pnToolBar.Parent := self
end;

Первый подход использует компонент CoolBar, который позволяет создавать полосы (аналогичные панелям инструментов) и располагать их вертикально. Процедура SetBands используется для настройки cool bar с желаемыми контролами и разрывами.

В обновленной версии кода:

procedure TMainForm.SetBands(AControls: array of TWinControl; ABreaks: array of boolean);
var
  i: integer;
begin
  with CoolBar do
  begin
    for i := 0 to High(AControls) do
    begin
      if Bands.Count = succ(i) then
        TCoolBand.Create(Bands);
      with Bands[succ(i)] do
      begin
        if Assigned(Control) then
          Control.Hide;
        MinHeight := AControls[i].Height;
        Break := ABreaks[i];
        Control := AControls[i];
        Control.Show;
        Visible := true;
      end;
    end;
    for i := High(AControls) + 2 to pred(Bands.Count) do
      Bands[i].Free;
  end;
end;

procedure TMsgForm.FormActivate(Sender: TObject);
begin
  MainForm.SetBands([ToolBar], [false]);
end;

В процедуре SetBands мы проходимся по массивам контролов и разрывов. Для каждого контрола создаем новый cool band, если это необходимо, настраиваем его свойства (например, высоту, разрыв) и отображаем.

Второй подход использует комбинацию панелей (TPanel) для создания объединенной панели инструментов и child bar. Компонент RxSplitter используется для разделения основной формы на две области: одну для панели инструментов и другую для child bar.

В обновленной версии кода:

TMDIForm = class(TForm)
  pnToolBar: TPanel;
  RxSplitter1: TRxSplitter;
  ChildBar: TPanel;
   // ... 
end;

procedure TMDIForm.FormActivate(Sender: TObject);
begin
  pnToolBar.Parent := ChildBar;
  pnToolBar.Visible := True;
end;

procedure TMDIForm.FormDeactivate(Sender: TObject);
begin
  pnToolBar.Visible := false;
  pnToolBar.Parent := Self;
end;

В процедуре FormActivate мы устанавливаем родителя панели инструментов в child bar и делаем ее видимой. В процедуре FormDeactivate мы скрываем панель инструментов и устанавливаем ее родителя обратно в основную форму.

Оба подхода должны достичь желаемого результата: объединенной меню и панели инструментов для основной формы и ее дочерних форм.

Как сделать MDI-приложение, где сливаются меню дочернего и главного окна, и полосы инструментов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: MDI приложения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-07 04:46:39/0.0057249069213867/1