ID_EDIT :EditBitBtnClick(Self);
ID_ANALIS:AnalisButtonClick(Self);
end;
inherited;
end;
procedureTMyForm.FormCreate(Sender: TObject);
varSysMenu:THandle;
begin
SysMenu:=GetSystemMenu(Handle,False);
InsertMenu(SysMenu, Word(-1), MF_SEPARATOR, ID_ABOUT, '');
InsertMenu(SysMenu, Word(-1), MF_BYPOSITION, ID_Calendar, 'Calendar');
InsertMenu(SysMenu, Word(-1), MF_BYPOSITION, ID_Analis, 'Analis');
InsertMenu(SysMenu, Word(-1), MF_BYPOSITION, ID_Edit, 'Edit');
end;
Как сделать MDI-приложение, в котором способны сливаться не только меню дочернего и главного окна, но и полосы инструментов?
Nomadicсоветует:
Вариант 1. CoolBar.
procedureTMainForm.SetBands(AControls: array ofTWinControl;ABreaks: array ofboolean);
vari: integer;
begin
withCoolBar do begin
fori:=0 toHigh(AControls) do begin
ifBands.Count=succ(i) thenTCoolBand.Create(Bands);
withBands[succ(i)] do begin
ifAssigned(Control) thenControl.Hide;
MinHeight:=AControls[i].Height;
Break:=ABreaks[i];
Control:=AControls[i];
Control.Show;
Visible:=true;
end
end;
fori:=High(AControls)+2 topred(Bands.Count) do Bands[i].Free
end
end;
и
procedureTMsgForm.FormActivate(Sender: TObject);
begin
MainForm.SetBands([ToolBar],[false])
end;
Примечание:
Оба массива равны по длине. CoolBar.Bands[0] должен существовать всегда,.. на нём я размешаю «глобальные» кнопки. СoolBar[1] тоже можно сделать в DesignTime с Break:=false и придвинуть поближе с началу. При CoolBar.AutoSize:=true возможно «мигании» (при добавлении на новую строку) так что можно добавить:
AutoSize:=false; try … finallyAutoSize:=true;
Вариант 2.
TMainForm
…
objectSpeedBar: TPanel
...
Align = alTop
BevelOuter = bvNone
objectToolBar: TPanel
...
Align = alLeft
BevelOuter = bvNone
end
objectRxSplitter1: TRxSplitter
...
ControlFirst = ToolBar
ControlSecond = ChildBar
Align = alLeft
BevelOuter = bvLowered
end
objectChildBar: TPanel
...
Align = alClient
BevelOuter = bvNone
end
end
TMdiChild {прародитель всех остальных}
..
objectpnToolBar: TPanel
…
Align = alTop
BevelOuter = bvNone
Visible = False
end
end;
procedureTMDIForm.FormActivate(Sender: TObject);
begin
pnToolBar.Parent:=MainForm.ChildBar;
pnToolBar.Visible:=True;
end;
procedureTMDIForm.FormDeactivate(Sender: TObject);
begin
pnToolBar.Visible:=false;
pnToolBar.Parent:=self
{pnToolBar.Visible:=false}
end;
Заполнение изображением MDI-формы IV
Nomadicсоветует:
Я делал так:
type
…. = class(TForm)
....
procedureFormCreate(Sender:TObject);
procedureFormDestroy(Sender:TObject);
....
private
FHBrush: HBRUSH;
FCover: TBitmap;
FNewClientInstance: TFarProc;
FOldClientInstance: TFarProc;
procedureNewClientWndProc( var Message:TMessage);
....
protected
....
procedureCreateWnd; override;
....
end;
.....
implementation
{$R myRes.res} //ресурс с битмапом фона
procedure.FormCreate( ...);
varLogBrush:TLogbrush;
begin
FCover:=TBitmap.Create;
FCover.LoadFromResourceName(hinstance,'BMPCOVER');
WithLogBrush do begin
lbStyle:=BS_PATTERN;
lbHatch:=FCover.Handle;
end;
FHBrush:=CreateBrushIndirect(Logbrush);
end;
procedure.FormDestroy( ...);
begin
DeleteObject(FHBrush);
FCover.Free;
end;
procedure.CreateWnd;
begin
inheritedCreateWnd;
if(ClientHandle <> 0) then begin
ifNewStyleControls then
SetWindowLong(ClientHandle, GWL_EXSTYLE, WS_EX_CLIENTEDGE orGetWindowLong(ClientHandle, GWL_EXSTYLE));
FNewClientInstance:=MakeObjectInstance(NewClientWndProc);
FOldClientInstance:=pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, longint(FNewClientInstance));
Читать дальше