Hey,
zugegeben es ist ein recht spezielles problem, aber es nervt mich dass ich keine vernünftige Lösung dafür bekomme. Ich habe mich an diesem Artikel
http://edn.embarcadero.com/article/33446 orientiert und ein formular mit DockTabSet Komponenten erstellt. soweit so gut, es funktioniert auch ganz gut, solange ich dieses Formular als Fenster in einer gewöhnlichen Anwendung anzeige. Problematisch wird es allerdings, wenn ich dieses Formular in eine
DLL packe. Dann "verschwinden" beim erzeugen des Formulars die Leiste der Tabs der DockTabSet Komponenten und die Leiste des angedockten Formulars, die den "Pin", die Caption des gedockten Formulars und den "Close"-Button enthält ist ebenso verschwunden. Erst wenn ich ein Resize der DockTabSet-Komponente über einen Splitter durchführe erscheinen die fehlenden Anzeigen wieder. Ich hab mal nen Screenshot in den Anhang gepackt. Eine Lösung die ich im Moment habe, ist einfach die gedockten Formulare beim erzeugen nicht anzupinnen. Das bringt aber auch nciht wirklich einen schönen Effekt, da beim ersten DockTabSet zwar das gedockte Formular angezeigt wird, wenn ich dann aber das nächste Formular im zweiten DockTabSet andocke, wird das erste ausgeblendet und verschwindet in einem Tab des ersten DockTabSets.
Falls also irgendwer weiß, warum das DockTabSet in
DLL's ein merkwürdiges Verhalten zeigt, würde ich mich über Lösungen freuen.
Hier noch die Methode zum erzeugen der gedockten Formulare nach dem erzeugen des Formulars
Delphi-Quellcode:
procedure TFormMacroController.AddDockElement(AForm: TForm;
ADockSite, ADropControl: TWinControl; AAlign: TAlign);
begin
with AForm do
begin
BorderStyle := bsSizeToolWin;
DragKind := dkDock;
DragMode := dmAutomatic;
UseDockManager := true;
ManualDock(ADockSite, ADropControl, AAlign);
// Align := alClient;
end;
end;
procedure TFormMacroController.LoadDefaultDockLayout;
begin
// Global Variables
if Assigned(FVarInspector) then
FVarInspector.Free;
FVarInspector := TDataModuleInspector.Create(self);
FDockClients[VAR_INSPECTOR_CLIENT] := FVarInspector;
with FDockClients[VAR_INSPECTOR_CLIENT] do
FDefaultDockSetup[VAR_INSPECTOR_CLIENT] := Point(LRDockWidth, TBDockHeight);
with FVarInspector do
begin
Caption := 'Global Variables';
ShowBtnPanel := false;
ShowToolBar := false;
ShowMemory := false;
OnClose := DataModuleInspectorPreventClose;
OnHide := DataModuleInspectorTreatHide;
OnDestroy := OnInspectorDestroy;
OnEndDock := OnInspectorDocked;
OnVisibleChanging := DataModuleInspectorTreatVisibleChanging;
DMTree.Header.Columns[0].Width := Width div 2 - 5;
DMTree.Header.Columns[1].Width := Width div 2 - 5;
end;
AddDockElement(FVarInspector, FDockPanels[DOCK_PANEL_RIGHT], DockTabSetRight, alClient);
// FVarInspector.ManualDock(FDockPanels[DOCK_PANEL_RIGHT]);
SetVarInspectorVariables(CurrentMacro);
// Executable Info Inspector
if Assigned(FExecutableInspector) then
FExecutableInspector.Free;
FExecutableInspector := TDataModuleInspector.Create(self);
FDockClients[EXEC_INSPECTOR_CLIENT] := FExecutableInspector;
with FDockClients[EXEC_INSPECTOR_CLIENT] do
FDefaultDockSetup[EXEC_INSPECTOR_CLIENT] := Point(LRDockWidth, TBDockHeight);
with FExecutableInspector do
begin
Caption := 'Executable Inspector';
ShowBtnPanel := false;
ShowToolBar := false;
ShowMemory := false;
OnClose := DataModuleInspectorPreventClose;
OnHide := DataModuleInspectorTreatHide;
OnDestroy := OnInspectorDestroy;
OnEndDock := OnInspectorDocked;
OnVisibleChanging := DataModuleInspectorTreatVisibleChanging;
DMTree.Header.Columns[0].Width := Width div 2 - 5;
DMTree.Header.Columns[1].Width := Width div 2 - 5;
end;
AddDockElement(FExecutableInspector, FDockPanels[DOCK_PANEL_LEFT], DockTabSetLeft, alClient);
// FExecutableInspector.ManualDock(FDockPanels[DOCK_PANEL_LEFT]);
// Message Client
if Assigned(FMessageClient) then
FMessageClient.Free;
FMessageClient := TMessageForm.Create(self);
FDockClients[MESSAGE_CLIENT] := FMessageClient;
with FDockClients[MESSAGE_CLIENT] do
FDefaultDockSetup[MESSAGE_CLIENT] := Point(LRDockWidth, TBDockHeight);
with FMessageClient do
begin
Caption := 'Messages';
OnClose := DataModuleInspectorPreventClose;
OnHide := DataModuleInspectorTreatHide;
OnDestroy := OnInspectorDestroy;
OnEndDock := OnInspectorDocked;
OnVisibleChanging := DataModuleInspectorTreatVisibleChanging;
end;
AddDockElement(FMessageClient, FDockPanels[DOCK_PANEL_BOTTOM], DockTabSetBottom, alClient);
// FMessageClient.ManualDock(FDockPanels[DOCK_PANEL_BOTTOM]);
SetStatusMessages(CurrentMacro);
FVarInspector.Show;
FExecutableInspector.Show;
FMessageClient.Show;
end;
Danke im Voraus und viele Grüße
Sebastian