📄 acealign.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 + -