📄 haulm.pas
字号:
unit Haulm;
interface
uses
SysUtils, Types, Classes, Graphics;
type
TTray = record
Level: Integer;
Color: TColor;
Width: Integer;
end;
type
THaulm = class(TObject)
Flag: string;
Peeking: Boolean;
Left: Integer;
Top: Integer;
Height: Integer;
Width: Integer;
Pen: TPen;
TrayHeight: Integer;
TrayVSpace: Integer;
TrayPenWidth: Integer;
Tray: array of TTray;
public
constructor Create();
function Count(): Integer;
function HaulmLeft(): Integer;
function Rect(): TRect;
function TrayRect(Item: Integer): TRect;
function Pop(): TTray;
function Push(const PushTray: TTray): Boolean;
function Peek(): TTray;
destructor Destroy(); override;
end;
implementation
{ THaulm }
constructor THaulm.Create();
begin
Pen := TPen.Create;
Peeking := False;
Left := 0;
Top := 0;
Height := 80;
Width := 80;
Pen.Color := clBlack;
Pen.Width := 2;
TrayHeight := 7;
TrayVSpace := 2;
TrayPenWidth := 1;
end;
function THaulm.Count: Integer;
begin
Result := Length(Tray);
end;
function THaulm.HaulmLeft: Integer;
begin
Result := Left + Width div 2;
end;
function THaulm.Rect: TRect;
var
tmpRect: TRect;
begin
tmpRect.Left := Left;
tmpRect.Top := Top;
tmpRect.Right := Left + Width;
tmpRect.Bottom := Top + Height;
Result := tmpRect;
end;
function THaulm.TrayRect(Item: Integer): TRect;
var
tmpRect: TRect;
begin
tmpRect.Left := HaulmLeft - Tray[Item].Width div 2;
tmpRect.Right := Haulmleft + Tray[Item].Width div 2;
tmpRect.Top := (Rect()).Bottom - (TrayHeight + TrayVSpace) * (Item + 1);
tmpRect.Bottom := tmpRect.Top + TrayHeight;
Result := tmpRect;
end;
function THaulm.Push(const PushTray: TTray): Boolean;
begin
Result := False;
if (Length(Tray) <> 0) and (PushTray.Level > Tray[High(Tray)].Level) then exit;
SetLength(Tray, Length(Tray) + 1);
Tray[High(Tray)] := PushTray;
Result := True;
end;
function THaulm.Pop(): TTray;
var
PopTray: TTray;
begin
// Result := nil;
if Length(Tray) < 1 then exit;
PopTray := Tray[High(Tray)];
Tray := Copy(Tray, 0, Length(Tray) - 1);
Peeking := False;
Result := PopTray;
end;
function THaulm.Peek: TTray;
var
PeekTray: TTray;
begin
// Result := nil;
if Length(Tray) < 1 then exit;
PeekTray := Tray[High(Tray)];
Peeking := True;
Result := PeekTray;
end;
destructor THaulm.Destroy;
begin
inherited;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -