⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aqdockcustform.pas

📁 AutomatedDocking Library 控件源代码修改 适合Delphi 2009 和C++ Builder 20009 使用。 修正汉字不能正确显示问题
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  Result := lvPanels.Items.Add;
  with Result do
  begin
    ImageIndex := AControl.ImageIndex;
    Caption := AControl.Caption;
    Data := AControl;
    SubItems.Add('[' + DockControlStateToStr(AControl.DockState) + ']');
  end;
end;

procedure TfrmDockingSetup.btnRenameClick(Sender: TObject);
begin
  RenamePanel;
end;

procedure TfrmDockingSetup.lvPanelsEditing(Sender: TObject;
  Item: TListItem; var AllowEdit: Boolean);
begin
  btnClose.Default := False;
end;

procedure TfrmDockingSetup.UpdateStyleList;
var
  i: Integer;
  Item: TListItem;
begin
  FUpdateStyles := True;
  try
    lvStyles.Items.Clear;
    if FManager.StyleManager <> nil then
    begin
      pnlStyleWarn.Visible := False;
      for i := 0 to FManager.StyleManager.Items.Count - 1 do
        AddStyle(FManager.StyleManager.Items[i], FManager.StyleManager.Items.Names[i]);
      if lvStyles.Items.Count > 0 then
      begin
        Item := GetItemByStyle(FManager.Style);
        Item.Selected := True;
        Item.Focused := True;
        aqMakeVisible(Item);
      end;
    end
    else
      pnlStyleWarn.Visible := True;
  finally
    FUpdateStyles := False;
    UpdatePage(tsStyles);
  end;
end;

function TfrmDockingSetup.AddStyle(AStyle: TaqDockingUIStyle;
  const AStyleName: string): TListItem;
begin
  Result := lvStyles.Items.Add;
  with Result do
  begin
    Caption := AStyleName;
    Data := AStyle;
  end;
end;

procedure TfrmDockingSetup.RenamePanel;
begin
  if SelectedPanel <> nil then
    aqEditCaption(lvPanels.Selected);
end;

procedure TfrmDockingSetup.btnDeleteClick(Sender: TObject);
begin
  DeletePanel;
end;

procedure TfrmDockingSetup.DeletePanel;
var
  Control: TaqCustomDockingControl;
  NewSelection: TListItem;
begin
  Control := SelectedPanel;
  if Control <> nil then
  begin
    FUpdatePanels := True;
    NewSelection := nil;
    try
      Control.RemoveFromDocking(True);
      Control.Free;
      if lvPanels.Items.Count > 1 then
      begin
        if lvPanels.Selected.Index = lvPanels.Items.Count - 1 then
          NewSelection := lvPanels.Items[lvPanels.Selected.Index - 1]
        else
          NewSelection := lvPanels.Items[lvPanels.Selected.Index + 1];
      end;
      lvPanels.Selected.Free;
    finally
      FUpdatePanels := False;
      if NewSelection <> nil then
      begin
        NewSelection.Selected := True;
        NewSelection.Focused := True;
        aqMakeVisible(NewSelection);
      end;
      UpdatePage(tsPanels);

      if FManager.Designing then
        aqIDEDesigner.Modified(FManager);
    end;
  end;
end;

procedure TfrmDockingSetup.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited;
  if Operation = opRemove then
    if AComponent = FManager.OwnerForm then
      Free
    else if AComponent = FManager then
    begin
      FManager := nil;
      Free;
    end;
end;

procedure TfrmDockingSetup.UpdatePanel(AControl: TaqCustomDockingControl);
var
  Item: TListItem;
begin
  Item := GetItemByControl(AControl);
  if Item <> nil then
  begin
    with Item do
    begin
      ImageIndex := AControl.ImageIndex;
      Caption := AControl.Caption;
      Data := AControl;
      SubItems[0] := '[' + DockControlStateToStr(AControl.DockState) + ']';
    end;
    if SelectedPanel = AControl then
      UpdatePage(tsPanels);
  end;
end;

function TfrmDockingSetup.GetItemByControl(
  AControl: TaqCustomDockingControl): TListItem;
var
  i: Integer;
begin
  for i := 0 to lvPanels.Items.Count - 1 do
    if lvPanels.Items[i].Data = AControl then
    begin
      Result := lvPanels.Items[i];
      Exit;
    end;
  Result := nil;
end;

function TfrmDockingSetup.GetItemByStyle(
  AStyle: TaqDockingUIStyle): TListItem;
var
  i: Integer;
begin
  for i := 0 to lvStyles.Items.Count - 1 do
    if lvStyles.Items[i].Data = AStyle then
    begin
      Result := lvStyles.Items[i];
      Exit;
    end;
  Result := nil;
end;

procedure TfrmDockingSetup.lvPanelsSelectItem(Sender: TObject;
  Item: TListItem; Selected: Boolean);
begin
  if FUpdatePanels then Exit;

  if (lvPanels.Tag = 1) or Selected then
    UpdatePage(tsPanels);
  lvPanels.Tag := 0;
end;

procedure TfrmDockingSetup.lvPanelsChanging(Sender: TObject;
  Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
begin
  if FUpdatePanels then Exit;

  lvPanels.Tag := lvPanels.Tag + 1;
end;

procedure TfrmDockingSetup.lvStylesSelectItem(Sender: TObject;
  Item: TListItem; Selected: Boolean);
begin
  if FUpdateStyles then Exit;

  if (lvStyles.Tag = 1) or Selected then
    UpdatePage(tsStyles);
  lvStyles.Tag := 0;
end;

procedure TfrmDockingSetup.lvStylesChanging(Sender: TObject;
  Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
begin
  if FUpdateStyles then Exit;

  lvStyles.Tag := lvStyles.Tag + 1;
end;

//procedure TfrmDockingSetup.UndockPanel;
//var
//  Control: TaqCustomDockingControl;
//begin
//  Control := SelectedPanel;
//  if (Control <> nil) and (Control.DockState = dcsDocked) then
//    Control.MakeFloating(Control.ScreenRect);
//end;

function TfrmDockingSetup.GetSelectedPanel: TaqCustomDockingControl;
begin
  if (tsPanels.PageControl <> nil) and (lvPanels.SelCount > 0) then
    Result := TaqCustomDockingControl(lvPanels.Selected.Data)
  else
    Result := nil;
end;

function TfrmDockingSetup.GetSelectedStyle: TaqDockingUIStyle;
begin
  if lvStyles.SelCount > 0 then
    Result := TaqDockingUIStyle(lvStyles.Selected.Data)
  else
    Result := nil;
end;

procedure TfrmDockingSetup.btnApplyClick(Sender: TObject);
var
  Style: TaqDockingUIStyle;
begin
  Style := SelectedStyle;
  if Style <> nil then
  begin
    FManager.Style := Style;
    aqIDEDesigner.Modified(FManager);
    UpdatePage(tsStyles);
    ActiveControl := lvStyles;
  end;
end;

procedure TfrmDockingSetup.btnShowClick(Sender: TObject);
begin
  ShowPanel;
end;

procedure TfrmDockingSetup.btnHideClick(Sender: TObject);
begin
  HidePanel;
end;

procedure TfrmDockingSetup.ShowPanel;
var
  Control: TaqCustomDockingControl;
begin
{  if FManager.MainDockSite = nil then
    raise Exception.Create(SENoDockSite);}
  Control := SelectedPanel;
  if Control <> nil then
  begin
    Control.ForceVisible;
    UpdatePanel(Control);
  end;
end;

procedure TfrmDockingSetup.HidePanel;
var
  Control: TaqCustomDockingControl;
begin
  if FManager.NullDockingSite = nil then
    raise Exception.Create(SENoDockSite);

  Control := SelectedPanel;
  if Control <> nil then
  begin
    Control.Actions[idactHide].Execute(Self);
//  Control.RemoveFromDocking;
    UpdatePanel(Control);
  end;
end;

procedure TfrmDockingSetup.SelectPanel(AControl: TaqCustomDockingControl;
  AEdit: Boolean);
var
  Item: TListItem;
begin
  pgcDockSetup.ActivePageIndex := 0;
  Item := GetItemByControl(AControl);
  if Item <> nil then
  begin
    Item.Focused := True;
    Item.Selected := True;
    aqMakeVisible(Item);

    UpdatePage(tspanels);

    if AEdit then
      aqEditCaption(Item);
  end;
end;

procedure TfrmDockingSetup.SelectPage(const APageName: string);
var
  i: Integer;
begin
  if APageName <> '' then
    for i := 0 to pgcDockSetup.PageCount - 1 do
      if pgcDockSetup.Pages[i].Caption = APageName then
      begin
        pgcDockSetup.ActivePage := pgcDockSetup.Pages[i];
        TaqControlFriend(pgcDockSetup.ActivePage).SelectFirst;
        Exit;
      end;
end;

procedure TfrmDockingSetup.ApplicationEventsActivate(Sender: TObject);
begin
  BringToFront;
end;

procedure TfrmDockingSetup.ApplicationEventsRestore(Sender: TObject);
begin
  BringToFront;
end;

procedure TfrmDockingSetup.pgcDockSetupChange(Sender: TObject);
begin
  UpdatePage(pgcDockSetup.ActivePage);
end;

procedure TfrmDockingSetup.UpdatePage(APage: TTabSheet);
var
  Control: TaqCustomDockingControl;
  Style: TaqDockingUIStyle;
begin
  if csDestroying in ComponentState then Exit;
  case APage.Tag of
    0:
    begin
      if FUpdatePanels then Exit;

      Control := SelectedPanel;
      btnRename.Enabled := Control <> nil;
      btnDelete.Enabled := Control <> nil;
      btnShow.Enabled := Control <> nil;
      btnHide.Enabled := Control <> nil;

      if APage = pgcDockSetup.ActivePage then
        SelectComponent(Control);
    end;
    1:
    begin
      Style := SelectedStyle;
      btnApply.Enabled := (Style <> nil) and (Style <> FManager.Style);

      if APage = pgcDockSetup.ActivePage then
        SelectComponent(Style);
    end;
  end;
end;

procedure TfrmDockingSetup.SelectComponent(AComponent: TPersistent);
begin
  if AComponent <> nil then
    aqIDEDesigner.SelectComponent(FManager, AComponent)
  else
    aqIDEDesigner.SelectComponent(FManager, FManager);
end;

procedure TfrmDockingSetup.chkAutoDragClick(Sender: TObject);
begin
  if not FUpdateSettings then
    FManager.AutoDragDocking := TCheckBox(Sender).Checked;
end;

procedure TfrmDockingSetup.chkShowInsideClick(Sender: TObject);
begin
  if not FUpdateSettings then
    if TCheckBox(Sender).Checked then
      FManager.ShowContainerCaption := FManager.ShowContainerCaption + [cntInside]
    else
      FManager.ShowContainerCaption := FManager.ShowContainerCaption - [cntInside];
end;

procedure TfrmDockingSetup.chkButtonClick(Sender: TObject);
var
  Buttons: TaqDockButtonItems;
begin
  if not FUpdateSettings then
  begin
    Buttons := FManager.CaptionButtons;
    if chkHide.Checked then
      Include(Buttons, dbiHide)
    else
      Exclude(Buttons, dbiHide);
    if chkUndock.Checked then
      Include(Buttons, dbiUndock)
    else
      Exclude(Buttons, dbiUndock);
    if chkHelp.Checked then
      Include(Buttons, dbiHelp)
    else
      Exclude(Buttons, dbiHelp);
    if chkMax.Checked then
      Include(Buttons, dbiMaximizeRestore)
    else
      Exclude(Buttons, dbiMaximizeRestore);
    if chkMenu.Checked then
      Include(Buttons, dbiMenu)
    else
      Exclude(Buttons, dbiMenu);
    if chkCustom.Checked then
      Include(Buttons, dbiCustom)
    else
      Exclude(Buttons, dbiCustom);
    FManager.CaptionButtons := Buttons;
    aqIDEDesigner.Modified(FManager);
  end;
end;

procedure TfrmDockingSetup.chkShowHintClick(Sender: TObject);
begin
  if not FUpdateSettings then
  begin
    FManager.ShowDockButtonHint := TCheckBox(Sender).Checked;
    aqIDEDesigner.Modified(FManager);
  end;
end;

procedure TfrmDockingSetup.UpdateSettings;
begin
  FUpdateSettings := True;
  try
    chkAutoDrag.Checked := FManager.AutoDragDocking;
    chkShowInside.Checked := cntInside in FManager.ShowContainerCaption;
    chkShowVert.Checked := cntVertical in FManager.ShowContainerCaption;
    chkShowHor.Checked := cntHorizontal in FManager.ShowContainerCaption;
    chkHide.Checked := dbiHide in FManager.CaptionButtons;
    chkUndock.Checked := dbiUndock in FManager.CaptionButtons;
    chkMax.Checked := dbiMaximizeRestore in FManager.CaptionButtons;
    chkMenu.Checked := dbiMenu in FManager.CaptionButtons;
    chkHelp.Checked := dbiHelp in FManager.CaptionButtons;
    chkCustom.Checked := dbiCustom in FManager.CaptionButtons;
    chkShowHint.Checked := FManager.ShowDockButtonHint;
    chkAutoHideButtons.Checked := FManager.ShowDisabledButtons;
    chkFloatOnTop.Checked := FStayOnTop;
  finally
    FUpdateSettings := False;
  end;
end;

procedure TfrmDockingSetup.chkAutoHideButtonsClick(Sender: TObject);
begin
  if not FUpdateSettings then
  begin
    FManager.ShowDisabledButtons := TCheckBox(Sender).Checked;
    aqIDEDesigner.Modified(FManager);
  end;
end;

procedure TfrmDockingSetup.chkFloatOnTopClick(Sender: TObject);
begin
  if not FUpdateSettings then
  begin
    FStayOnTop := TCheckBox(Sender).Checked;
    aqIDEDesigner.Modified(FManager);
  end;
end;

procedure TfrmDockingSetup.chkShowVertClick(Sender: TObject);
begin
  if not FUpdateSettings then
  begin
    if TCheckBox(Sender).Checked then
      FManager.ShowContainerCaption := FManager.ShowContainerCaption + [cntVertical]
    else
      FManager.ShowContainerCaption := FManager.ShowContainerCaption - [cntVertical];
    aqIDEDesigner.Modified(FManager);
  end;
end;

procedure TfrmDockingSetup.chkShowHorClick(Sender: TObject);
begin
  if not FUpdateSettings then
  begin
    if TCheckBox(Sender).Checked then
      FManager.ShowContainerCaption := FManager.ShowContainerCaption + [cntHorizontal]
    else
      FManager.ShowContainerCaption := FManager.ShowContainerCaption - [cntHorizontal];
    aqIDEDesigner.Modified(FManager);
  end;
end;

procedure TfrmDockingSetup.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #27 then
    Close;
end;

initialization
  RegisterCustomizer(TaqDockingManagerCustomizer.Create as IaqDockingManagerCustomizer);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -