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

📄 acealign.pas

📁 suite component ace report
💻 PAS
字号:
unit AceAlign;

{ ----------------------------------------------------------------
  Ace Reporter
  Copyright 1995,1998 SCT Associates, Inc.
  Written by Kevin Maher, Steve Tyrakowski
  ---------------------------------------------------------------- }

interface
{$I ace.inc}
uses
{$IFDEF WIN32}
  windows,
{$ELSE}
  wintypes, winprocs,
{$ENDIF}
  SysUtils, Messages, Classes, Graphics, Controls, StdCtrls;


type

TAceAlign = class(TObject)
private
  FControls: TList;
protected
public
  constructor Create; virtual;
  destructor Destroy; override;
  procedure AddControl(Control: TControl);
  procedure DeleteControl(Control: TControl);
  procedure AlignLeft;
  procedure AlignRight;
  procedure AlignCenter;

  procedure PageCenter(Center: Integer);

end;


var
  AceAlignLabels: TAceAlign;

implementation

uses Dialogs, Forms;

constructor TAceAlign.Create;
begin
  FControls := TList.Create;
end;

destructor TAceAlign.Destroy;
begin
  if FControls <> nil then FControls.Free;
  inherited Destroy;
end;

procedure TAceAlign.AddControl(Control: TControl);
begin
  FControls.Add(Control);
end;

procedure TAceAlign.DeleteControl(Control: TControl);
begin
  FControls.Remove(Control);
end;

procedure TAceAlign.AlignLeft;
var
  Spot, Left: Integer;
begin
  if FControls.Count > 1 then
  begin
    Left := TControl(FControls.Items[0]).Left;
    for Spot := 1 to FControls.Count - 1 do
    begin
      TControl(FControls.Items[Spot]).Left := Left;
    end;
    TForm(TControl(FControls.Items[0]).Owner).Designer.Modified;
  end;
end;

procedure TAceAlign.AlignRight;
var
  Spot, Right: Integer;
begin
  if FControls.Count > 1 then
  begin
    Right := TControl(FControls.Items[0]).Left + TControl(FControls.Items[0]).Width;
    for Spot := 1 to FControls.Count - 1 do
    begin
      TControl(FControls.Items[Spot]).Left := Right - TControl(FControls.Items[Spot]).Width;
    end;
    TForm(TControl(FControls.Items[0]).Owner).Designer.Modified;
  end;
end;

procedure TAceAlign.AlignCenter;
var
  Spot, Center: Integer;
begin
  if FControls.Count > 1 then
  begin
    Center := TControl(FControls.Items[0]).Left + (TControl(FControls.Items[0]).Width div 2);
    for Spot := 1 to FControls.Count - 1 do
    begin
      TControl(FControls.Items[Spot]).Left := Center - (TControl(FControls.Items[Spot]).Width div 2);
    end;
    TForm(TControl(FControls.Items[0]).Owner).Designer.Modified;
  end;
end;

procedure TAceAlign.PageCenter(Center: Integer);
var
  Spot: Integer;
  List, ParentList: TList;
  Parent: TWinControl;
  Left, Right, Move: Integer;
begin
  if FControls.Count = 1 then
  begin
    for Spot := 0 to FControls.Count - 1 do
      TControl(FControls.Items[Spot]).Left := Center - (TControl(FControls.Items[Spot]).Width div 2);
    TForm(TControl(FControls.Items[0]).Owner).Designer.Modified;
  end else if FControls.Count > 1 then
  begin
    List := TList.Create;
    ParentList := TList.Create;
    try
      for Spot := 0 to FControls.Count - 1 do List.Add(FControls.Items[Spot]);
      while List.Count > 0 do
      begin
        ParentList.Clear;
        Parent := nil;
        for Spot := 0 to List.Count - 1 do
        begin
          if (TControl(List.Items[Spot]).Parent = Parent) or (Parent = nil) then
          begin
            if Parent = nil then Parent := TControl(List.Items[Spot]).Parent;
            ParentList.Add(List.Items[Spot]);
            List.Items[Spot] := nil;
          end;
        end;
        Left := TControl(ParentList.Items[0]).Left;
        Right := TControl(ParentList.Items[0]).Left + TControl(ParentList.Items[0]).Width;
        for Spot := 1 to ParentList.Count - 1 do
        begin
          if TControl(ParentList.Items[Spot]).Left < Left then Left := TControl(ParentList.Items[Spot]).Left;
          if (TControl(ParentList.Items[Spot]).Left + TControl(ParentList.Items[Spot]).Width) > Right then
             Right := TControl(ParentList.Items[Spot]).Left + TControl(ParentList.Items[Spot]).Width;
        end;

        Move := Center - (((Right - Left) div 2) + Left);
        for Spot := 0 to ParentList.Count - 1 do
        begin
          TControl(ParentList.Items[Spot]).Left := TControl(ParentList.Items[Spot]).Left + Move;
        end;

        List.Pack;
      end;
    finally
      List.Free;
      ParentList.Free;
    end;
    TForm(TControl(FControls.Items[0]).Owner).Designer.Modified;
  end;
end;

procedure ExitAceAlignUnit; far;
begin
  if AceAlignLabels <> nil then AceAlignLabels.Free;
end;

initialization
  AceAlignLabels := TAceAlign.Create;


{$IFNDEF WIN32}
  AddExitProc( ExitAceAlignUnit );
{$ELSE}
finalization
  ExitAceAlignUnit;
{$ENDIF}


end.

⌨️ 快捷键说明

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