Àêæàí â ñåòè - Íà óðîâåíü ââåðõ(VCL) Êàê ñäåëàòü 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
  {pnToolBar.Visible:=false}
end;

Jury Martynov

(2:5020/800.21)