Componentes.Terceros.DevExp.../official/x.30/ExpressBars 6/Demos/Delphi/SampleDocking/SampleDockingMain.pas

596 lines
18 KiB
ObjectPascal
Raw Normal View History

unit SampleDockingMain;
{$I ..\cxVer.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, dxDockControl, dxDockPanel, dxBar, StdCtrls, ExtCtrls, ImgList,
ActnList, ShellAPI, cxControls, dxBarExtItems, dxStatusBar, ComCtrls,
cxGraphics, EBarsUtils;
type
TFormClass = class of TForm;
PPersistInfo = ^TPersistInfo;
TPersistInfo = record
WinControl: TWinControl;
SpecInfo: Integer;
end;
PRichEditSelInfo =^ TRichEditSelInfo;
TRichEditSelInfo = record
SelStart: Integer;
SelLength: Integer;
end;
TSampleDockingMainForm = class(TForm)
dxDockingManager: TdxDockingManager;
DockSite1: TdxDockSite;
BarManager: TdxBarManager;
dxBarButtonExit: TdxBarButton;
dxBarButtonStandardView: TdxBarButton;
dxBarButtonNETView: TdxBarButton;
dxBarButtonOffice11View: TdxBarButton;
dxBarButtonXPView: TdxBarButton;
dxBarButton1: TdxBarLargeButton;
dxBarButton2: TdxBarLargeButton;
dxBarButton3: TdxBarLargeButton;
dxBarButton4: TdxBarLargeButton;
dxBarButton5: TdxBarLargeButton;
dxBarButton6: TdxBarLargeButton;
dxBarButton7: TdxBarLargeButton;
imBarIcons: TImageList;
dxBarSubItem1: TdxBarSubItem;
dxBarSubItem2: TdxBarSubItem;
dxBarSubItem3: TdxBarSubItem;
dxBarButton8: TdxBarButton;
dxBarButton9: TdxBarButton;
dxBarButton10: TdxBarButton;
dxBarButton11: TdxBarButton;
dxBarButton12: TdxBarButton;
dxBarButton13: TdxBarButton;
dxBarButton14: TdxBarButton;
dxBarButton15: TdxBarButton;
dxBarButton16: TdxBarButton;
dxBarSubItem4: TdxBarSubItem;
dxBarButton17: TdxBarButton;
lbDescription: TLabel;
dxBarButton18: TdxBarButton;
dxBarButton19: TdxBarButton;
dxBarButton20: TdxBarButton;
dxBarPopupMenu: TdxBarPopupMenu;
dxBarButtonDockable: TdxBarButton;
dxBarButton22: TdxBarButton;
dxBarButtonAutoHide: TdxBarButton;
dxBarButtonFloating: TdxBarButton;
ilDockPanels: TImageList;
ilDisabledImages: TImageList;
ilHotImages: TImageList;
dxBarLargeButton1: TdxBarLargeButton;
dxBarLargeButton2: TdxBarLargeButton;
dxStatusBar: TdxStatusBar;
procedure SchemeClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure dxBarButton12Click(Sender: TObject);
procedure dxBarButtonExitClick(Sender: TObject);
procedure actRateDemoExecute(Sender: TObject);
procedure dxBarButton13Click(Sender: TObject);
procedure dxBarButton17Click(Sender: TObject);
procedure dxBarButton16Click(Sender: TObject);
procedure dxBarButton14Click(Sender: TObject);
procedure dxBarButton15Click(Sender: TObject);
procedure dxBarButton18Click(Sender: TObject);
procedure dxBarButton19Click(Sender: TObject);
procedure dxBarButtonDockableClick(Sender: TObject);
procedure dxBarButton22Click(Sender: TObject);
procedure dxBarButtonFloatingClick(Sender: TObject);
procedure dxBarButtonAutoHideClick(Sender: TObject);
procedure ShowDockControl(Sender: TdxDockSite; AControl: TdxCustomDockControl);
procedure HideDockControl(Sender: TdxDockSite; AControl: TdxCustomDockControl);
procedure FormCreate(Sender: TObject);
private
FTreeViewFrameCount, FDockingRichTextFrameCount, FRadioGroupFrameCount, FListBoxFrameCount: Integer;
FPopupMenuDockControl: TdxCustomDockControl;
procedure StartDock(Sender: TdxCustomDockControl; X, Y: Integer);
procedure EndDock(Sender: TdxCustomDockControl; Zone: TdxZone; X, Y: Integer);
{$IFDEF DELPHI5}
procedure dpContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
{$ENDIF}
procedure HookupEvents(Sender: TdxCustomDockControl);
procedure CreateTabContainer(Sender: TdxCustomDockControl; ATabContainer: TdxTabContainerDockSite);
procedure CreateSiteContainer(Sender: TdxCustomDockControl; ASideContainer: TdxSideContainerDockSite);
procedure CreateFloatSite(Sender: TdxCustomDockControl; AFloatSite: TdxFloatDockSite);
procedure AutoHideChanged(Sender: TdxCustomDockControl);
procedure AutoHideChanging(Sender: TdxCustomDockControl);
procedure ClearContent;
procedure SetPanelsVisibility(AVisible: Boolean);
procedure CreateScheme1;
procedure CreateScheme2;
procedure CreateScheme3;
procedure CreateScheme4;
procedure CreateScheme5;
procedure CreateFrame(AFrameClass: TFormClass; AOwner: TdxDockPanel);
end;
var
SampleDockingMainForm: TSampleDockingMainForm;
implementation
uses SampleDockingContainers, EBarsDemoRating, SampleDockingAbout,
SampleDockingRichText, SampleDockingRadioGroup, SampleDockingTreeView,
SampleDockingListBox;
{$R *.dfm}
{$R windowsxp.res}
function GetFocusedControl(AWinControl: TWinControl): TWinControl;
var
i: Integer;
begin
Result := nil;
for i:=0 to AWinControl.ControlCount - 1 do
if AWinControl.Controls[i] is TWinControl then
begin
Result := GetFocusedControl(TWinControl(AWinControl.Controls[i]));
if Result <> nil then Exit;
if TWinControl(AWinControl.Controls[i]).Focused then
begin
Result := TWinControl(AWinControl.Controls[i]);
Exit;
end;
end;
end;
procedure TSampleDockingMainForm.HookupEvents(Sender: TdxCustomDockControl);
begin
if Sender is TdxDockSite then
begin
TdxDockSite(Sender).OnShowControl := ShowDockControl;
TdxDockSite(Sender).OnHideControl := HideDockControl;
end;
Sender.OnAutoHideChanged := AutoHideChanged;
Sender.OnAutoHideChanging := AutoHideChanging;
{$IFDEF DELPHI5}
Sender.OnContextPopup := dpContextPopup;
{$ENDIF}
Sender.OnEndDocking := EndDock;
Sender.OnStartDocking := StartDock;
Sender.OnCreateTabContainer := CreateTabContainer;
Sender.OnCreateSideContainer := CreateSiteContainer;
Sender.OnCreateFloatSite := CreateFloatSite;
end;
procedure TSampleDockingMainForm.CreateFloatSite(
Sender: TdxCustomDockControl; AFloatSite: TdxFloatDockSite);
begin
HookupEvents(AFloatSite);
end;
procedure TSampleDockingMainForm.CreateTabContainer(
Sender: TdxCustomDockControl; ATabContainer: TdxTabContainerDockSite);
begin
HookupEvents(ATabContainer);
end;
procedure TSampleDockingMainForm.CreateSiteContainer(
Sender: TdxCustomDockControl; ASideContainer: TdxSideContainerDockSite);
begin
HookupEvents(ASideContainer);
end;
procedure TSampleDockingMainForm.CreateScheme1;
var
Panel, Panel1, Panel2: TdxDockPanel;
begin
Panel1 := TdxDockPanel.Create(Self);
HookupEvents(Panel1);
Panel1.Height := 360;
Panel1.DockTo(DockSite1, dtBottom, 0);
CreateFrame(TSampleDockingListBoxFrame, Panel1);
Panel2 := TdxDockPanel.Create(Self);
HookupEvents(Panel2);
Panel2.DockTo(Panel1, dtClient, 1);
CreateFrame(TSampleDockingRadioGroupFrame, Panel2);
Panel := TdxDockPanel.Create(Self);
HookupEvents(Panel);
Panel.DockTo(Panel2.TabContainer, dtTop, 0);
CreateFrame(TSampleDockingTreeViewFrame, Panel);
Panel1 := TdxDockPanel.Create(Self);
HookupEvents(Panel1);
Panel1.DockTo(Panel, dtClient, 0);
CreateFrame(TSampleDockingRichTextFrame, Panel1);
end;
procedure TSampleDockingMainForm.CreateScheme2;
var
Panel, Panel1, Panel2: TdxDockPanel;
begin
Panel1 := TdxDockPanel.Create(Self);
HookupEvents(Panel1);
Panel1.Height := 300;
Panel1.DockTo(DockSite1, dtRight, 0);
CreateFrame(TSampleDockingTreeViewFrame, Panel1);
Panel2 := TdxDockPanel.Create(Self);
HookupEvents(Panel2);
Panel2.DockTo(Panel1, dtClient, 1);
CreateFrame(TSampleDockingRichTextFrame, Panel2);
Panel := TdxDockPanel.Create(Self);
HookupEvents(Panel);
Panel.DockTo(Panel1, dtLeft, 0);
CreateFrame(TSampleDockingRadioGroupFrame, Panel);
end;
procedure TSampleDockingMainForm.CreateScheme3;
var
Panel1, Panel2, Panel3, Panel4: TdxDockPanel;
begin
Panel1 := TdxDockPanel.Create(Self);
HookupEvents(Panel1);
Panel1.DockTo(DockSite1, dtLeft, 0);
Panel1.AutoHide := True;
CreateFrame(TSampleDockingRichTextFrame, Panel1);
Panel2 := TdxDockPanel.Create(Self);
HookupEvents(Panel2);
Panel2.Height := 170;
Panel2.DockTo(DockSite1, dtTop, 0);
Panel2.AutoHide := True;
CreateFrame(TSampleDockingRadioGroupFrame, Panel2);
Panel3 := TdxDockPanel.Create(Self);
HookupEvents(Panel3);
Panel3.DockTo(DockSite1, dtRight, 0);
Panel3.AutoHide := True;
CreateFrame(TSampleDockingTreeViewFrame, Panel3);
Panel4 := TdxDockPanel.Create(Self);
HookupEvents(Panel4);
Panel4.Height := 190;
Panel4.DockTo(DockSite1, dtBottom, 0);
Panel4.AutoHide := True;
CreateFrame(TSampleDockingListBoxFrame, Panel4);
end;
procedure TSampleDockingMainForm.CreateScheme4;
var
Panel1, Panel2: TdxDockPanel;
begin
Panel1 := TdxDockPanel.Create(Self);
HookupEvents(Panel1);
Panel1.MakeFloating(Left + 50, Top + 100);
CreateFrame(TSampleDockingTreeViewFrame, Panel1);
Panel2 := TdxDockPanel.Create(Self);
HookupEvents(Panel2);
Panel2.DockTo(Panel1, dtClient, 0);
CreateFrame(TSampleDockingRichTextFrame, Panel2);
end;
procedure TSampleDockingMainForm.CreateScheme5;
var
Panel1, Panel2, Panel3: TdxDockPanel;
begin
Panel1 := TdxDockPanel.Create(Self);
HookupEvents(Panel1);
Panel1.Height := 350;
Panel1.DockTo(DockSite1, dtBottom, 0);
CreateFrame(TSampleDockingListBoxFrame, Panel1);
Panel2 := TdxDockPanel.Create(Self);
HookupEvents(Panel2);
Panel2.DockTo(Panel1, dtRight, 1);
CreateFrame(TSampleDockingTreeViewFrame, Panel2);
Panel3 := TdxDockPanel.Create(Self);
HookupEvents(Panel3);
Panel3.DockTo(Panel1, dtTop, 0);
CreateFrame(TSampleDockingRichTextFrame, Panel3);
end;
procedure TSampleDockingMainForm.SchemeClick(Sender: TObject);
begin
case TComponent(Sender).Tag of
0: CreateScheme1;
1: CreateScheme2;
2: CreateScheme3;
3: CreateScheme4;
4: CreateScheme5;
end;
end;
procedure TSampleDockingMainForm.ClearContent;
var
Count: Integer;
begin
Count := dxDockingController.DockControlCount - 1;
while Count >= 0 do
begin
if dxDockingController.DockControls[Count] is TdxDockPanel then
dxDockingController.DockControls[Count].Free;
if (dxDockingController.DockControlCount - 1) < (Count - 1) then
Count := dxDockingController.DockControlCount - 1 else
Dec(Count);
end;
FTreeViewFrameCount := 0;
FDockingRichTextFrameCount := 0;
FRadioGroupFrameCount := 0;
FListBoxFrameCount := 0;
end;
procedure TSampleDockingMainForm.FormDestroy(Sender: TObject);
begin
ClearContent;
end;
procedure TSampleDockingMainForm.dxBarButton12Click(Sender: TObject);
begin
ClearContent;
end;
procedure TSampleDockingMainForm.dxBarButtonExitClick(Sender: TObject);
begin
Close;
end;
procedure TSampleDockingMainForm.actRateDemoExecute(Sender: TObject);
begin
with TEBarsDemoRatingForm.Create(Self) do
try
ShowModal;
finally
Free;
end;
end;
procedure TSampleDockingMainForm.dxBarButton13Click(Sender: TObject);
begin
BarManager.Style := bmsStandard;
dxDockingManager.ViewStyle := vsStandard;
dxStatusBar.PaintStyle := stpsStandard;
end;
procedure TSampleDockingMainForm.dxBarButton17Click(Sender: TObject);
begin
BarManager.Style := bmsFlat;
dxDockingManager.ViewStyle := vsNET;
dxStatusBar.PaintStyle := stpsFlat;
end;
procedure TSampleDockingMainForm.dxBarButton16Click(Sender: TObject);
begin
BarManager.Style := bmsOffice11;
dxDockingManager.ViewStyle := vsOffice11;
dxStatusBar.PaintStyle := stpsOffice11;
end;
procedure TSampleDockingMainForm.dxBarButton14Click(Sender: TObject);
begin
BarManager.Style := bmsXP;
dxDockingManager.ViewStyle := vsXP;
dxStatusBar.PaintStyle := stpsXP;
end;
procedure TSampleDockingMainForm.dxBarButton15Click(Sender: TObject);
begin
BarManager.Style := bmsEnhanced;
dxDockingManager.ViewStyle := vsStandard;
dxStatusBar.PaintStyle := stpsStandard;
end;
procedure TSampleDockingMainForm.SetPanelsVisibility(AVisible: Boolean);
var
i: Integer;
begin
for i:=0 to dxDockingController.DockControlCount - 1 do
if (dxDockingController.DockControls[i] is TdxCustomDockControl) and (dxDockingController.DockControls[i] <> DockSite1) then
begin
if (not AVisible) and dxDockingController.DockControls[i].AutoHide then
dxDockingController.DockControls[i].Visible := True;
dxDockingController.DockControls[i].Visible := AVisible;
end;
end;
procedure TSampleDockingMainForm.dxBarButton18Click(Sender: TObject);
begin
SetPanelsVisibility(True);
end;
procedure TSampleDockingMainForm.dxBarButton19Click(Sender: TObject);
begin
SetPanelsVisibility(False);
end;
{$IFDEF DELPHI5}
procedure TSampleDockingMainForm.dpContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
var
pt: TPoint;
AControl: TdxCustomDockControl;
begin
GetCursorPos(pt);
AControl := dxDockingController.GetDockControlAtPos(pt);
if AControl <> nil then
begin
FPopupMenuDockControl := AControl;
dxBarButtonDockable.Down := AControl.Dockable;
dxBarButtonFloating.Down := AControl.FloatDockSite <> nil;
dxBarButtonAutoHide.Enabled := AControl.CanAutoHide;
dxBarButtonAutoHide.Down := AControl.AutoHide;
dxBarPopupMenu.PopupFromCursorPos;
Handled := True;
end;
end;
{$ENDIF}
procedure TSampleDockingMainForm.dxBarButtonDockableClick(Sender: TObject);
begin
if FPopupMenuDockControl <> nil then
begin
FPopupMenuDockControl.Dockable := (Sender as TdxBarButton).Down;
FPopupMenuDockControl := nil;
end;
end;
procedure TSampleDockingMainForm.dxBarButton22Click(Sender: TObject);
begin
if FPopupMenuDockControl <> nil then
begin
FPopupMenuDockControl.Visible := False;
FPopupMenuDockControl := nil;
end;
end;
procedure TSampleDockingMainForm.dxBarButtonFloatingClick(Sender: TObject);
var
pt: TPoint;
begin
if (FPopupMenuDockControl <> nil) and (FPopupMenuDockControl.DockState <> dsFloating) then
begin
GetCursorPos(pt);
FPopupMenuDockControl.MakeFloating(pt.X, pt.Y);
FPopupMenuDockControl := nil;
end;
end;
procedure TSampleDockingMainForm.dxBarButtonAutoHideClick(Sender: TObject);
begin
if FPopupMenuDockControl <> nil then
begin
FPopupMenuDockControl.AutoHide := (Sender as TdxBarButton).Down;
FPopupMenuDockControl := nil;
end;
end;
procedure TSampleDockingMainForm.CreateFrame(AFrameClass: TFormClass; AOwner: TdxDockPanel);
var
AFrame: TCustomForm;
ACaption: String;
AImageIndex: Integer;
begin
AFrame := AFrameClass.Create(AOwner);
AFrame.Parent := AOwner;
AFrame.Align := alClient;
AImageIndex := -1;
if AFrame is TSampleDockingTreeViewFrame then
begin
Inc(FTreeViewFrameCount);
ACaption := 'TreeView Panel ' + IntToStr(FTreeViewFrameCount);
AImageIndex := 0;
end else
if AFrame is TSampleDockingRichTextFrame then
begin
Inc(FDockingRichTextFrameCount);
ACaption := 'RichText Panel ' + IntToStr(FDockingRichTextFrameCount);
AImageIndex := 1;
end else
if AFrame is TSampleDockingRadioGroupFrame then
begin
Inc(FRadioGroupFrameCount);
ACaption := 'RadioGroup Panel ' + IntToStr(FRadioGroupFrameCount);
AImageIndex := 2;
end else
if AFrame is TSampleDockingListBoxFrame then
begin
Inc(FListBoxFrameCount);
ACaption := 'ListBox Panel ' + IntToStr(FListBoxFrameCount);
AImageIndex := 3;
end;
AOwner.Caption := ACaption;
AOwner.ImageIndex := AImageIndex;
AFrame.Visible := True;
end;
procedure StorePersistentInfo(Sender: TdxCustomDockControl);
var
AWinControl: TWinControl;
p: PPersistInfo;
PSelInfo: PRichEditSelInfo;
begin
if Sender.Visible and (Sender.Tag = 0) then
begin
AWinControl := GetFocusedControl(Sender);
if AWinControl <> nil then
begin
New(p);
p^.WinControl := AWinControl;
if AWinControl is TCustomEdit then
begin
New(PSelInfo);
PSelInfo^.SelStart := TCustomEdit(AWinControl).SelStart;
PSelInfo^.SelLength := TCustomEdit(AWinControl).SelLength;
p^.SpecInfo := Integer(PSelInfo);
Sender.Tag := Integer(p);
end;
Sender.Tag := Integer(p);
end;
end;
end;
procedure RestorePersistentInfo(Sender: TdxCustomDockControl);
begin
if Sender.Visible and (Sender.Tag <> 0) then
begin
if PPersistInfo(Sender.Tag)^.WinControl.CanFocus then
PPersistInfo(Sender.Tag)^.WinControl.SetFocus;
if PPersistInfo(Sender.Tag)^.WinControl is TCustomEdit then
begin
TCustomEdit(PPersistInfo(Sender.Tag)^.WinControl).SelStart := PRichEditSelInfo(PPersistInfo(Sender.Tag)^.SpecInfo)^.SelStart;
TCustomEdit(PPersistInfo(Sender.Tag)^.WinControl).SelLength := PRichEditSelInfo(PPersistInfo(Sender.Tag)^.SpecInfo)^.SelLength;
Dispose(PRichEditSelInfo(PPersistInfo(Sender.Tag)^.SpecInfo));
end;
Dispose(PPersistInfo(Sender.Tag));
Sender.Tag := 0;
end;
end;
procedure TSampleDockingMainForm.StartDock(Sender: TdxCustomDockControl; X,
Y: Integer);
begin
StorePersistentInfo(Sender);
end;
procedure TSampleDockingMainForm.EndDock(Sender: TdxCustomDockControl;
Zone: TdxZone; X, Y: Integer);
begin
RestorePersistentInfo(Sender);
end;
procedure TSampleDockingMainForm.HideDockControl(Sender: TdxDockSite;
AControl: TdxCustomDockControl);
begin
StorePersistentInfo(AControl);
end;
procedure TSampleDockingMainForm.ShowDockControl(Sender: TdxDockSite;
AControl: TdxCustomDockControl);
begin
RestorePersistentInfo(AControl);
end;
procedure TSampleDockingMainForm.AutoHideChanged(
Sender: TdxCustomDockControl);
begin
RestorePersistentInfo(Sender);
end;
procedure TSampleDockingMainForm.AutoHideChanging(
Sender: TdxCustomDockControl);
begin
StorePersistentInfo(Sender);
end;
procedure TSampleDockingMainForm.FormCreate(Sender: TObject);
begin
dmCommonData.AboutFormClass := TSampleDockingAboutForm;
end;
end.