Here you go
Kann jeweils zwei TB2000-Toolbars (oder davon abgeleitete wie TBX, SpTBX) miteinander mergen und auch wieder entmergen.
Delphi-Quellcode:
unit TB2Merge;
...
interface
type
TTBToolbarMerger =
class(TComponent)
public
procedure Merge(Target, Source: TComponent; Options: TTBMergeOptions);
procedure Unmerge(Target, Source: TComponent);
procedure UnmergeAll(Comp: TComponent);
procedure Delete(
Index: Integer);
function IsMerged(Target: TComponent): Integer;
function IsMergedWith(Source: TComponent): Integer;
procedure Clear;
property Count: Integer
read GetCount
stored false;
property Items[
Index: Integer]: TTBMergedItems
read GetItem
stored false;
end;
function ToolbarMerger: TTBToolbarMerger;
...
end.
Dazu müsst ihr z.B. einen Haupt-Toolbar als Menü im
MDI-Parent haben und im
MDI-Child macht ihr ein verstecktes Dock und darauf euer Kind-Toolbar als Menü (ähnlich wie man TMainMenu für
MDI-Parent und
MDI-Child einrichtet).
Annahmen:
- Hauptformular ist frmMDIParent
- Hauptmenü ist tbMainMenuBar
- Unterformular ist frmMDIChild
- Untermenü ist tbChildMenuBar
Dann müsst ihr in euer
MDI-Child die folgenden Events einbauen:
Delphi-Quellcode:
procedure TfrmMDIChild.FormActivate(Sender: TObject);
begin
ToolbarMerger.Merge(frmMDIParent.tbMainMenuBar, tbChildMenuBar, []);
end;
procedure TfrmMDIChild.FormDeactivate(Sender: TObject);
begin
ToolbarMerger.Unmerge(frmMDIParent.tbMainMenuBar, tbChildMenuBar);
end;
procedure TfrmMDIChild.FormDestroy(Sender: TObject);
begin
ToolbarMerger.UnmergeAll(tbChildMenuBar);
end;
Bei dem Prozess werden KEINE Element neu erzeugt, lediglich der Vater und die Position werden umgehängt (also die ausgeblendeten aus dem ursprünglichen Menü wandern in das versteckte Menü des Kindfensters und umgekehrt).
Die behandelten Element müssen einfach nur von TTBItem abstammen, daher sollte es mit allen von TB2000 abgeleiteten Klassen funktionieren (wie TBX, SpTBX).
Mit der großen Bitte um Kommentare und Anregungen.