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

📄 aqdockingreg.pas.~1~

📁 AutomatedDocking Library 控件源代码修改 适合Delphi 2009 和C++ Builder 20009 使用。 修正汉字不能正确显示问题
💻 ~1~
📖 第 1 页 / 共 2 页
字号:

{ TaqDockingControlEditor }

function TaqDockingControlEditor.GetManager: TaqDockingManagerFriend;
begin
  Result := TaqDockingManagerFriend(TaqDockingControl(Component).DockingManager);
end;

{ TaqDockingControlsEditor }

procedure TaqDockingControlsEditor.Edit;
var
  Comp: TPersistent;
begin
  Comp := GetComponent(0);
  if Comp is TaqDockingManager then
    TaqDockingManagerFriend(Comp).Customize(True);
end;

function TaqDockingControlsEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paReadOnly, paDialog];
end;

function TaqDockingControlsEditor.GetValue: string;
begin
  Result := Format('(%s)', [TaqDockingControls.ClassName]);
end;

{$IFDEF VCL}

{ TaqButtonCaptionEditor }

function TaqCaptionButtonProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paReadOnly, paSubProperties];
end;

function TaqCaptionButtonProperty.GetValue: string;
begin
  Result := Format('(%s)', [TaqCaptionButton.ClassName]);
end;

{ TaqTitleButtonWidgetEditor }

constructor TaqButtonWidgetProperty.Create(const ADesigner: IDesigner;
  APropCount: Integer);
begin
  inherited;
  FWidgetSize := 16;
end;

function TaqButtonWidgetProperty.GetAttributes: TPropertyAttributes;
begin
  Result := inherited GetAttributes - [paSortList];
end;

function TaqButtonWidgetProperty.GetStyle: TaqThemedUIStyleFriend;
begin
  Result := TaqThemedUIStyleFriend(TaqCaptionButtonFriend(GetComponent(0)).Owner.Owner);
end;

procedure TaqButtonWidgetProperty.ListDrawValue(const Value: string;
  ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
var
  AWidgetRect, ATextRect: TRect;
  PrevBrushColor: TColor;
begin
  ATextRect := ARect;
  if Style.ThemeAvailable then
  begin
    Inc(ATextRect.Left, FWidgetSize + 2);
    with ARect do
    begin
      PrevBrushColor := ACanvas.Brush.Color;
      ACanvas.Brush.Color := clWindow;
      ACanvas.FillRect(Rect(Left, Top, ATextRect.Left, Bottom));
      ACanvas.Brush.Color := PrevBrushColor;
    end;
    AWidgetRect := ARect;
    AWidgetRect.Right := FWidgetSize + 2;
    InflateRect(AWidgetRect, -1, -1);
    Style.DrawCaptionWidget(ACanvas, AWidgetRect, dbsNormal, dcsNormal, StrToWidget(Value));
  end;
  with ATextRect, ACanvas do
    ACanvas.TextRect(ATextRect, Left + 1, (Top + Bottom - TextHeight(Value)) div 2, Value);
end;

procedure TaqButtonWidgetProperty.ListMeasureHeight(const Value: string;
  ACanvas: TCanvas; var AHeight: Integer);
begin
  if Style.ThemeAvailable and (AHeight < FWidgetSize + 2) then
    AHeight := FWidgetSize + 2;
end;

procedure TaqButtonWidgetProperty.ListMeasureWidth(const Value: string;
  ACanvas: TCanvas; var AWidth: Integer);
begin
  if Style.ThemeAvailable then
    Inc(AWidth, FWidgetSize + 2);
end;

function TaqButtonWidgetProperty.StrToWidget(
  const AText: string): TaqCaptionButtonWidget;
var
  i: TaqCaptionButtonWidget;
begin
  Result := bwDropDown;
  for i := Low(FWidgetNames) to High(FWidgetNames) do
    if AText = FWidgetNames[i] then
    begin
      Result := i;
      Break;
    end;
end;

{$ENDIF}

{ TaqStyleNameEditor }

function TaqStyleProperty.GetManager: TaqDockingManager;
begin
  Result := TaqDockingManager(GetComponent(0));
end;

function TaqStyleProperty.GetValue: string;
begin
  Result := Manager.Style.Caption;
end;

procedure TaqStyleProperty.GetValues(Proc: TGetStrProc);
var
  i: Integer;
begin
  if Manager.StyleManager <> nil then
    for i := 0 to Manager.StyleManager.Items.Count - 1 do
      Proc(Manager.StyleManager.Items[i].Caption);
end;

procedure TaqStyleProperty.SetValue(const Value: string);
var
  i: Integer;
  Style: TaqDockingUIStyle;
begin
  if Manager.StyleManager <> nil then
  begin
    Style := nil;
    for i := 0 to Manager.StyleManager.Items.Count - 1 do
      if Manager.StyleManager.Items[i].Caption = Value then
      begin
        Style := Manager.StyleManager.Items[i];
        Break;
      end;
    Manager.Style := Style;
    Modified;
  end;
end;

{ TaqStyleManagerEditor }

procedure TaqStyleManagerEditor.Edit;
begin
  ExecuteVerb(0);
end;

procedure TaqStyleManagerEditor.ExecuteVerb(Index: Integer);
begin
  case Index of
    0: ShowStyleEditor(GetManager, True);
{$IFDEF VCL}
    3: ShellExecute(0, '', SAutomatedQAUrl, '', '', 0);
{$ENDIF}
  end;
end;

function TaqStyleManagerEditor.GetManager: TaqStyleManager;
begin
  Result := TaqStyleManager(Component);
end;

function TaqStyleManagerEditor.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := SStylesEditItem;
    1: Result := '-';
    2: Result := Format('%s %s', [SProductName, SProductVersion]);
    3: Result := SAutomatedQA;
  end;
end;

function TaqStyleManagerEditor.GetVerbCount: Integer;
begin
  Result := 4;
end;

{ TaqStylesEditor }

procedure TaqStylesEditor.Edit;
var
  Comp: TPersistent;
begin
  Comp := GetComponent(0);
  if Comp is TaqStyleManager then
    ShowStyleEditor(TaqStyleManagerFriend(Comp), True);
end;

function TaqStylesEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paReadOnly, paDialog];
end;

function TaqStylesEditor.GetValue: string;
begin
  Result := TaqStyles.ClassName;
end;

{ TActiveControlProperty }

procedure TActiveControlProperty.DoAddComponentName(const AName: string);
begin
  FNames.Add(AName);
end;

function TActiveControlProperty.GetDockingControl: TaqDockingControl;
begin
  Result := TaqDockingControl(GetComponent(0));
end;

procedure TActiveControlProperty.GetValues(Proc: TGetStrProc);
var
  i: Integer;
  Comp: TComponent;
begin
  FNames := TStringList.Create;
  try
    Designer.GetComponentNames(GetTypeData(GetPropType), DoAddComponentName);

    for i := FNames.Count - 1 downto 0 do
    begin
      Comp := Designer.GetComponent(FNames[i]);
      if Comp <> nil then
      begin
        Assert(Comp is TaqControl, Format('TaqControl expected, %s found', [Comp.ClassName]));
        if not IsChild(DockingControl.Handle, TaqControl(Comp).Handle) then
          FNames.Delete(i);
      end;
    end;

    TStringList(FNames).Sort;
    for i := 0 to FNames.Count - 1 do
      Proc(FNames[i]);
  finally
    FNames.Free;
  end;
end;

{ TaqDockingStyleStyleProperty }

function TaqDockingStyleStyleProperty.GetAttributes: TPropertyAttributes;
begin
  Result := inherited GetAttributes;
  if not HasSubProperties then
    Exclude(Result, paSubProperties);
  Result := Result - [paReadOnly] +
    [paValueList, paSortList, paRevertable, paVolatileSubProperties];
end;

function TaqDockingStyleStyleProperty.GetValue: string;
begin
  if HasSubProperties then
    Result := aqDockingStyles.Names[TPersistentClass(TaqDockingStyle(GetOrdValue).ClassType)]
  else
    Result := '';
end;

procedure TaqDockingStyleStyleProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
begin
  for I := 0 to aqDockingStyles.Count - 1 do
    Proc(aqDockingStyles.GetClassName(I));
end;

function TaqDockingStyleStyleProperty.HasSubProperties: Boolean;
var
  I: Integer;
begin
  for I := 0 to PropCount - 1 do
  begin
    Result := TaqDockingManager(GetComponent(I)).DockingStyle <> nil;
    if not Result then Exit;
  end;
  Result := True;
end;

procedure TaqDockingStyleStyleProperty.SetValue(const Value: string);
var
  DockingStyleClass: TaqDockingStyleClass;
  I: Integer;
begin
  DockingStyleClass := TaqDockingStyleClass(aqDockingStyles.FindClass(Value));

  for I := 0 to PropCount - 1 do
    TaqDockingManager(GetComponent(I)).DockingStyleClass := DockingStyleClass;
  Modified;
end;

{ registration routine }

procedure Register;
begin
  RegisterComponents(SPalletteName, [TaqDockingManager, TaqStyleManager, TaqDockingSite]);
  RegisterNoIcon([TaqDockingControl]);

  RegisterComponentEditor(TaqDockingManager, TaqDockingManagerEditor);
  RegisterComponentEditor(TaqDockingSite, TaqDockingSiteEditor);
  RegisterComponentEditor(TaqDockingControl, TaqDockingControlEditor);
  RegisterComponentEditor(TaqStyleManager, TaqStyleManagerEditor);
  RegisterPropertyEditor(TypeInfo(TaqStyles), TaqStyleManager, 'Items',
    TaqStylesEditor);
  RegisterPropertyEditor(TypeInfo(TaqDockingControls), TaqDockingManager, 'Items',
    TaqDockingControlsEditor);
  RegisterPropertyEditor(TypeInfo(TaqDockingUIStyle), TaqDockingManager, 'Style',
    TaqStyleProperty);
  RegisterPropertyEditor(TypeInfo(TaqControl), TaqDockingControl, 'ActiveControl',
    TActiveControlProperty);
  RegisterPropertyEditor(TypeInfo(string), TaqDockingSite, 'Hint', nil);
  RegisterPropertyEditor(TypeInfo(string), TaqDockingControl, 'Hint', nil);
  RegisterPropertyEditor(TypeInfo(string), TaqDockingManager, 'DockingStyleClassName', nil);
  RegisterPropertyEditor(TypeInfo(TaqDockingStyle), TaqDockingManager, 'DockingStyle', TaqDockingStyleStyleProperty);
  RegisterPropertiesInCategory('Auto Hide', TaqDockingManager,
    ['AutoHideCaptions', 'AutoHideContainers', 'AutoHideEnabled', 'AutoHideInterval',
    'AutoHideSpeed', 'AutoHideStartAction', 'AutoHideTabs', 'AutoShowSpeed']);
  RegisterPropertiesInCategory('Docking', TaqDockingManager, ['Enabled', 'AutoDockKey',
    'AutoDragDocking', 'AutoDragKey', 'DockingStyle']);
  RegisterPropertiesInCategory('Visual', TaqDockingManager, ['ShowDisabledButtons',
    'ShowImages', 'ShowContainerCaption', 'CaptionButtons']);
  RegisterPropertiesInCategory('Floating Forms', TaqDockingManager,
    ['FloatingFormConstraints', 'FloatingFormOnTop', 'FloatingFormType']);
  RegisterPropertiesInCategory('Persistence', TaqDockingManager,
    ['StoreKind', 'StoreOptions', 'StorePath']);
{$IFDEF VCL}
  RegisterPropertyEditor(TypeInfo(TaqCaptionButtonWidget), TaqCaptionButton,
    '', TaqButtonWidgetProperty);
  RegisterPropertyEditor(TypeInfo(TaqCaptionButtonWidgets), TaqThemedUIStyle,
    '', TaqCaptionButtonProperty);
  RegisterPropertyEditor(TypeInfo(Integer), TaqCaptionButtonWidgets, 'Tag', nil);
{$ENDIF}
{$IFDEF DELPHI10}
  RegisterComponentGuidelines(TaqDockingControl, TComponentGuideLines);
{$ENDIF}
end;

initialization
  aqIDEDesigner := TaqDelphiDesigner.Create;
finalization
end.

⌨️ 快捷键说明

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