unit Unit1;interfaceuses Classes, Forms, dxBar;type TMainForm = class(TForm) dxBarManager: TdxBarManager; dxBarButtonNewWindow: TdxBarButton; dxBarButtonArrangeAll: TdxBarButton; dxBarButtonNextWindow: TdxBarButton; dxBarButtonPreviousWindow: TdxBarButton; dxBarListWindows: TdxBarListItem; dxBarSubItemWindow: TdxBarSubItem; procedure dxBarButtonNewWindowClick(Sender: TObject); procedure dxBarButtonArrangeAllClick(Sender: TObject); procedure dxBarButtonNextWindowClick(Sender: TObject); procedure dxBarButtonPreviousWindowClick(Sender: TObject); procedure dxBarListWindowsGetData(Sender: TObject); procedure dxBarListWindowsClick(Sender: TObject); public CreatedMDICount: Integer; end;var MainForm: TMainForm;implementation{$R *.DFM}uses Unit2;// Creates a new child form procedure TMainForm.dxBarButtonNewWindowClick(Sender: TObject); begin TChildForm.Create(Application); end;procedure TMainForm.dxBarButtonArrangeAllClick(Sender: TObject); begin Tile; end;procedure TMainForm.dxBarButtonNextWindowClick(Sender: TObject); begin Next; end;procedure TMainForm.dxBarButtonPreviousWindowClick(Sender: TObject);begin Previous; end;// The OnGetData event handler of TdxBarListItem procedure TMainForm.dxBarListWindowsGetData(Sender: TObject); begin with dxBarListWindows do ItemIndex := Items.IndexOfObject(ActiveMDIChild); end;// The OnClick event handler of TdxBarListItem procedure TMainForm.dxBarListWindowsClick(Sender: TObject); begin with dxBarListWindows do TCustomForm(Items.Objects[ItemIndex]).Show;end;end.// The child form unit unit Unit2;interfaceuses Classes, Forms;type TChildForm = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); end;implementation{$R *.DFM}uses SysUtils, Unit1;// Adds a child window to the child window listprocedure TChildForm.FormCreate(Sender: TObject); begin Inc(MainForm.CreatedMDICount); Caption := 'Document' + IntToStr(MainForm.CreatedMDICount); MainForm.dxBarListWindows.Items.AddObject(Caption, Self); end;// Removes a child window from the child window list procedure TChildForm.FormDestroy(Sender: TObject); begin with MainForm.dxBarListWindows.Items do Delete(IndexOfObject(Self)); end;procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;end.
Classes, Forms, dxBar;type
TMainForm = class(TForm)
dxBarManager: TdxBarManager;
dxBarButtonNewWindow: TdxBarButton;
dxBarButtonArrangeAll: TdxBarButton;
dxBarButtonNextWindow: TdxBarButton;
dxBarButtonPreviousWindow: TdxBarButton;
dxBarListWindows: TdxBarListItem;
dxBarSubItemWindow: TdxBarSubItem;
procedure dxBarButtonNewWindowClick(Sender: TObject); procedure dxBarButtonArrangeAllClick(Sender: TObject);
procedure dxBarButtonNextWindowClick(Sender: TObject);
procedure dxBarButtonPreviousWindowClick(Sender: TObject);
procedure dxBarListWindowsGetData(Sender: TObject);
procedure dxBarListWindowsClick(Sender: TObject);
public
CreatedMDICount: Integer;
end;var
MainForm: TMainForm;implementation{$R *.DFM}uses
Unit2;// Creates a new child form
procedure TMainForm.dxBarButtonNewWindowClick(Sender: TObject);
begin
TChildForm.Create(Application);
end;procedure TMainForm.dxBarButtonArrangeAllClick(Sender: TObject);
begin
Tile;
end;procedure TMainForm.dxBarButtonNextWindowClick(Sender: TObject);
begin
Next;
end;procedure TMainForm.dxBarButtonPreviousWindowClick(Sender: TObject);begin
Previous;
end;// The OnGetData event handler of TdxBarListItem
procedure TMainForm.dxBarListWindowsGetData(Sender: TObject);
begin
with dxBarListWindows do
ItemIndex := Items.IndexOfObject(ActiveMDIChild);
end;// The OnClick event handler of TdxBarListItem
procedure TMainForm.dxBarListWindowsClick(Sender: TObject);
begin
with dxBarListWindows do
TCustomForm(Items.Objects[ItemIndex]).Show;end;end.// The child form unit
unit Unit2;interfaceuses
Classes, Forms;type
TChildForm = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;implementation{$R *.DFM}uses
SysUtils, Unit1;// Adds a child window to the child window listprocedure TChildForm.FormCreate(Sender: TObject);
begin
Inc(MainForm.CreatedMDICount);
Caption := 'Document' + IntToStr(MainForm.CreatedMDICount);
MainForm.dxBarListWindows.Items.AddObject(Caption, Self);
end;// Removes a child window from the child window list
procedure TChildForm.FormDestroy(Sender: TObject);
begin
with MainForm.dxBarListWindows.Items do
Delete(IndexOfObject(Self));
end;procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;end.
参考下我请教过的帖子 http://topic.csdn.net/u/20081211/10/f6ee56b5-784f-4943-87c0-87c11b9f3fa7.html
1、可在这里维护你的菜单列表;
2、本进程内,一旦有窗体创建或者销毁,都会触发此事件,代码自己敲吧
在BPL窗體中發送信息到主窗體,通過通知來實現。 當BPL窗體半閉時,發送住處: RegisterWindowMessage 發送信息通知主窗體來處理。 重載了主窗體的 WndProc . 在WNDPROC中處理BPL或DLL窗體通過RegisterWindowMessage 發送過來的信息。 根據發送信息的值來判斷BPL或DLL窗體的請求。
說明了就是模仿了一些WINDOWS的消息機制。
這里有個疑問:你要捕獲窗體的銷毀和新建過程,僅僅是維護菜單的窗體列表嗎?若是這樣,你只需在OnActiveFormChange里取得當前screen所記錄的forms,重新產生即可。