亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mrgmngr.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
字號:
{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (RX)                    }
{                                                       }
{         Copyright (c) 1998 Master-Bank                }
{                                                       }
{*******************************************************}

unit MrgMngr;

{$I RX.INC}

interface

uses Classes, Controls, Forms, VCLUtils;

type
  TFormRequestEvent = procedure(Sender: TObject; CurrentForm: TCustomForm;
    var NewForm: TCustomForm) of object;
  TFormReorderEvent = procedure(Sender: TObject;
    Activated, Deactivated: TCustomForm) of object;
  TFormHistory = class;
  TFormHistoryCommand = (hcNone, hcAdd, hcBack, hcForward, hcGoto);

{ TMergeManager }

  TMergeManager = class(TComponent)
  private
    FMergeFrame: TWinControl;
    FFormHistory: TFormHistory;
    FHistoryCommand: TFormHistoryCommand;
    FOnGetBackForm: TFormRequestEvent;
    FOnGetForwardForm: TFormRequestEvent;
    FOnChange: TNotifyEvent;
    FOnReorder: TFormReorderEvent;
    function IsForm: Boolean;
    function NotIsForm: Boolean;
    procedure ReadForm(Reader: TReader);
    procedure WriteForm(Writer: TWriter);
    procedure SetMergeFrame(Value: TWinControl);
    function GetActiveForm: TCustomForm;
    procedure SetActiveForm(Value: TCustomForm);
  protected
    procedure DefineProperties(Filer: TFiler); override;
    function GetBackForm: TCustomForm; virtual;
    function GetForwardForm: TCustomForm; virtual;
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
    procedure DoChange; dynamic;
    procedure DoReorder(Deactivated: TCustomForm); dynamic;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Merge(AForm: TCustomForm; Show: Boolean);
    function GotoForm(AForm: TCustomForm): Boolean;
    function GotoFormClass(AFormClass: TFormClass): Boolean;
    procedure GoBack;
    procedure GoForward;
    procedure GotoHistoryIndex(HistoryIndex: Integer);
    property FormHistory: TFormHistory read FFormHistory;
    property ActiveForm: TCustomForm read GetActiveForm write SetActiveForm;
    property HistoryCommand: TFormHistoryCommand read FHistoryCommand
      write FHistoryCommand;
  published
    property MergeFrame: TWinControl read FMergeFrame write SetMergeFrame
      stored NotIsForm;
    property OnGetBackForm: TFormRequestEvent read FOnGetBackForm
      write FOnGetBackForm;
    property OnGetForwardForm: TFormRequestEvent read FOnGetForwardForm
      write FOnGetForwardForm;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
    property OnReorder: TFormReorderEvent read FOnReorder write FOnReorder;
  end;

{ TFormHistory }

  TFormHistory = class(TList)
  private
    FCurrent: Integer;
    FHistoryCapacity: Integer;
    procedure SetCurrent(Value: Integer);
    procedure SetHistoryCapacity(Value: Integer);
    function GetForm(Index: Integer): TCustomForm;
  public
    constructor Create;
    destructor Destroy; override;
    procedure AddForm(AForm: TCustomForm);
    procedure DeleteHistoryItem(Index: Integer);
    function RemoveItem(Item: TComponent): Boolean;
    procedure ResetHistory;
    property Current: Integer read FCurrent write SetCurrent;
    property HistoryCapacity: Integer read FHistoryCapacity
      write SetHistoryCapacity;
    property Forms[Index: Integer]: TCustomForm read GetForm;
  end;

implementation

{ TMergeManager }

constructor TMergeManager.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FFormHistory := TFormHistory.Create;
  FHistoryCommand := hcAdd;
end;

destructor TMergeManager.Destroy;
begin
  FFormHistory.Free;
  inherited Destroy;
end;

function TMergeManager.NotIsForm: Boolean;
begin
  Result := (MergeFrame <> nil) and not (MergeFrame is TCustomForm);
end;

function TMergeManager.IsForm: Boolean;
begin
  Result := (MergeFrame <> nil) and ((MergeFrame = Owner) and
    (Owner is TCustomForm));
end;

procedure TMergeManager.ReadForm(Reader: TReader);
begin
  if Reader.ReadBoolean then
    if Owner is TCustomForm then MergeFrame := TWinControl(Owner);
end;

procedure TMergeManager.WriteForm(Writer: TWriter);
begin
  Writer.WriteBoolean(IsForm);
end;

procedure TMergeManager.DefineProperties(Filer: TFiler);
{$IFDEF WIN32}
  function DoWrite: Boolean;
  begin
    if Assigned(Filer.Ancestor) then
      Result := IsForm <> TMergeManager(Filer.Ancestor).IsForm
    else Result := IsForm;
  end;
{$ENDIF}
begin
  inherited DefineProperties(Filer);
  Filer.DefineProperty('IsForm', ReadForm, WriteForm,
    {$IFDEF WIN32} DoWrite {$ELSE} IsForm {$ENDIF});
end;

procedure TMergeManager.SetMergeFrame(Value: TWinControl);
begin
  if FMergeFrame <> Value then begin
    FMergeFrame := Value;
{$IFDEF WIN32}
    if Value <> nil then Value.FreeNotification(Self);
{$ENDIF}
    FFormHistory.ResetHistory;
  end;
end;

function TMergeManager.GetActiveForm: TCustomForm;
var
  I: Integer;
begin
  if (MergeFrame <> nil) and (MergeFrame.ControlCount > 0) then begin
    for I := MergeFrame.ControlCount - 1 downto 0 do begin
      if MergeFrame.Controls[I] is TCustomForm then begin
        Result := TCustomForm(MergeFrame.Controls[I]);
        Exit;
      end;
    end;
  end;
  Result := nil;
end;

procedure TMergeManager.SetActiveForm(Value: TCustomForm);
begin
  GotoForm(Value);
end;

function TMergeManager.GetBackForm: TCustomForm;
begin
  if FormHistory.Current < 1 then
    Result := nil
  else
    Result := FormHistory.Forms[FormHistory.Current - 1];
  if Assigned(FOnGetBackForm) then FOnGetBackForm(Self, ActiveForm, Result);
end;

function TMergeManager.GetForwardForm: TCustomForm;
begin
  if FormHistory.Current >= FormHistory.Count - 1 then
    Result := nil
  else
    Result := FormHistory.Forms[FormHistory.Current + 1];
  if Assigned(FOnGetForwardForm) then FOnGetForwardForm(Self, ActiveForm, Result);
end;

procedure TMergeManager.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if Operation = opRemove then begin
    if AComponent = MergeFrame then MergeFrame := nil;
    if FormHistory.RemoveItem(AComponent) then DoChange;
  end;
end;

procedure TMergeManager.DoChange;
begin
  if Assigned(FOnChange) then FOnChange(Self);
end;

procedure TMergeManager.DoReorder(Deactivated: TCustomForm);
begin
  if Assigned(FOnReorder) then FOnReorder(Self, ActiveForm, Deactivated);
end;

procedure TMergeManager.Merge(AForm: TCustomForm; Show: Boolean);
begin
  MergeForm(MergeFrame, TForm(AForm), alClient, Show);
  GotoForm(AForm);
end;

function TMergeManager.GotoForm(AForm: TCustomForm): Boolean;
var
  I: Integer;
  OldActiveForm: TCustomForm;
begin
  Result := False;
  OldActiveForm := ActiveForm;
  if MergeFrame = nil then Exit;
  for I := 0 to MergeFrame.ControlCount - 1 do begin
    if MergeFrame.Controls[I] = AForm then begin
      AForm.BringToFront;
      case HistoryCommand of
        hcNone: ;
        hcAdd: FormHistory.AddForm(AForm);
        hcBack: FormHistory.Current := FormHistory.Current - 1;
        hcForward: FormHistory.Current := FormHistory.Current + 1;
        hcGoto: ;
      end;
      HistoryCommand := hcAdd;
      DoReorder(OldActiveForm);
      DoChange;
      Result := True;
      Exit;
    end;
  end;
end;

function TMergeManager.GotoFormClass(AFormClass: TFormClass): Boolean;
var
  I: Integer;
begin
  Result := False;
  if MergeFrame = nil then Exit;
  for I := 0 to MergeFrame.ControlCount - 1 do begin
    if MergeFrame.Controls[I] is AFormClass then begin
      Result := GotoForm(MergeFrame.Controls[I] as TCustomForm);     
      Exit;
    end;
  end;
end;

procedure TMergeManager.GoBack;
begin
  HistoryCommand := hcBack;
  GotoForm(GetBackForm);
end;

procedure TMergeManager.GoForward;
begin
  HistoryCommand := hcForward;
  GotoForm(GetForwardForm);
end;

procedure TMergeManager.GotoHistoryIndex(HistoryIndex: Integer);
var
  SaveCurrent: Integer;
begin
  SaveCurrent := FormHistory.Current;
  FormHistory.Current := HistoryIndex;
  try
    HistoryCommand := hcGoto;
    GotoForm(FormHistory.Forms[HistoryIndex]);
  finally
    if ActiveForm <> FormHistory.Forms[HistoryIndex] then
      FormHistory.Current := SaveCurrent;
  end;
end;

{ TFormHistory }

constructor TFormHistory.Create;
begin
  inherited Create;
  FCurrent := -1;
  FHistoryCapacity := 10;
end;

destructor TFormHistory.Destroy;
begin
  inherited Destroy;
end;

procedure TFormHistory.SetCurrent(Value: Integer);
begin
  if Value < 0 then Value := -1;
  if Value > Count - 1 then Value := Count - 1;
  if FCurrent <> Value then begin
    FCurrent := Value;
  end;
end;

procedure TFormHistory.SetHistoryCapacity(Value: Integer);
var
  I: Integer;
begin
  if Value < FHistoryCapacity then begin
    for I := 0 to Count - Value do begin
      RemoveItem(Forms[0]);
    end;
  end;
  FHistoryCapacity := Value;
end;

function TFormHistory.GetForm(Index: Integer): TCustomForm;
begin
  Result := TCustomForm(Items[Index]);
end;

procedure TFormHistory.AddForm(AForm: TCustomForm);
var
  I: Integer;
begin
  for I := Count - 1 downto Current + 1 do begin
    DeleteHistoryItem(I);
  end;
  for I := 0 to Count - HistoryCapacity do begin
    DeleteHistoryItem(0);
  end;
  if Count < HistoryCapacity then begin
    Add(AForm);
  end;
  Current := Count - 1;
end;

procedure TFormHistory.DeleteHistoryItem(Index: Integer);
begin
  if (Index >= 0) and (Index < Count) then begin
    Delete(Index);
    if Current > Count - 1 then Current := Count - 1;
  end;
end;

function TFormHistory.RemoveItem(Item: TComponent): Boolean;
var
  I: Integer;
begin
  Result := False;
  for I := Count - 1 downto 0 do begin
    if Items[I] = Item then begin
      DeleteHistoryItem(I);
      Result := True;
    end;
  end;
end;

procedure TFormHistory.ResetHistory;
begin
  Clear;
  Current := -1;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品gif动图一区| 欧美一区三区二区| 亚洲最新在线观看| 在线区一区二视频| 亚洲mv在线观看| 欧美一区二区免费| 精品一区二区三区免费观看| 久久久久久久久99精品| 成人动漫一区二区| 亚洲综合丝袜美腿| 欧美一区二区成人6969| 国产精品亚洲午夜一区二区三区 | 亚洲图片另类小说| 欧美综合一区二区三区| 日韩精品一二三| 久久伊人蜜桃av一区二区| 国产成人午夜视频| 亚洲欧美另类久久久精品| 欧美日韩精品一区二区天天拍小说| 日韩精品一二三四| 久久久天堂av| 在线欧美日韩国产| 美国毛片一区二区三区| 欧美激情在线一区二区三区| 91九色最新地址| 蜜桃av一区二区在线观看| 国产精品系列在线| 欧美区视频在线观看| 国产美女在线观看一区| 亚洲精品久久嫩草网站秘色| 欧美一级在线观看| 北岛玲一区二区三区四区 | 一二三四区精品视频| 日韩一级黄色大片| 成人性生交大片免费看视频在线| 亚洲国产精品一区二区久久| 欧美成人三级电影在线| 91麻豆国产在线观看| 免费精品视频在线| 国产精品福利电影一区二区三区四区| 欧美日韩国产小视频在线观看| 国产一区啦啦啦在线观看| 亚洲日本在线a| 精品欧美一区二区在线观看| 日本乱码高清不卡字幕| 韩国成人福利片在线播放| 一区二区三区免费在线观看| 精品成人私密视频| 色婷婷精品久久二区二区蜜臀av| 蜜臀久久久99精品久久久久久| 亚洲欧美在线高清| 欧美大片在线观看| 色94色欧美sute亚洲线路一久 | 欧美人与z0zoxxxx视频| 国产宾馆实践打屁股91| 午夜精品久久久久久久99樱桃| 国产精品丝袜91| 日韩视频免费观看高清完整版| 一本一本大道香蕉久在线精品| 久久精品国产亚洲高清剧情介绍| 亚洲精品日韩一| 久久久噜噜噜久噜久久综合| 88在线观看91蜜桃国自产| av在线不卡网| 精品一区二区三区蜜桃| 亚洲v日本v欧美v久久精品| 国产精品久久久久四虎| 精品日韩欧美一区二区| 欧美日韩精品一区二区天天拍小说| k8久久久一区二区三区 | 麻豆国产一区二区| 亚洲国产精品久久一线不卡| 国产精品嫩草久久久久| 精品久久久三级丝袜| 欧美日韩一级二级三级| 91年精品国产| 成人精品视频一区二区三区尤物| 久久99精品久久久久久动态图 | 亚洲一级二级在线| 国产精品国产三级国产aⅴ中文| 久久亚洲欧美国产精品乐播| 欧美一区二区三区白人| 色美美综合视频| 99re成人在线| 波多野结衣中文一区| 国产精品正在播放| 精品中文字幕一区二区| 日韩精品乱码免费| 亚洲一区二区三区在线看| 亚洲视频在线一区| 中文字幕在线观看一区| 欧美国产成人在线| 国产偷国产偷精品高清尤物 | 精品一区中文字幕| 蜜桃av噜噜一区| 日韩国产精品大片| 日韩精品色哟哟| 日韩av不卡一区二区| 亚洲一区二区三区美女| 一区二区在线观看不卡| **性色生活片久久毛片| 国产精品三级av在线播放| 国产情人综合久久777777| 久久久久久久久伊人| 久久嫩草精品久久久精品一| 久久婷婷国产综合精品青草| 久久亚洲综合色一区二区三区| 久久综合999| 久久九九久精品国产免费直播| xvideos.蜜桃一区二区| 2023国产一二三区日本精品2022| 精品三级在线看| 精品日韩一区二区| 久久精品视频网| 日本一区二区综合亚洲| 中文字幕巨乱亚洲| 中文字幕日韩一区| 亚洲美女电影在线| 亚洲一区中文日韩| 婷婷开心久久网| 日本不卡视频在线| 狠狠网亚洲精品| 国产激情视频一区二区三区欧美| 国产精品18久久久久久久久| 国产成人自拍网| 99久久婷婷国产精品综合| 91网页版在线| 欧美日韩一级视频| 欧美一区二区在线免费播放| 欧美白人最猛性xxxxx69交| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 91天堂素人约啪| 色域天天综合网| 欧美久久免费观看| 日韩免费观看高清完整版| 国产日韩精品一区二区浪潮av| 最新欧美精品一区二区三区| 亚洲综合视频在线观看| 日本aⅴ亚洲精品中文乱码| 精品一二线国产| 不卡一区二区在线| 欧美最猛黑人xxxxx猛交| 日韩一级高清毛片| 国产嫩草影院久久久久| 亚洲免费伊人电影| 日本不卡一区二区三区| 国产伦精品一区二区三区视频青涩 | 亚洲美女淫视频| 日本中文一区二区三区| 国产精品996| 在线视频国产一区| 精品欧美一区二区三区精品久久| 欧美激情一区二区三区蜜桃视频| 一级精品视频在线观看宜春院| 美女视频网站黄色亚洲| 国产麻豆成人精品| 在线视频一区二区免费| 精品少妇一区二区三区在线视频| 日韩毛片在线免费观看| 日韩1区2区3区| av欧美精品.com| 91麻豆精品国产自产在线 | 专区另类欧美日韩| 日本欧美大码aⅴ在线播放| 丁香婷婷综合五月| 欧美日韩在线播放三区四区| 精品粉嫩超白一线天av| 亚洲三级久久久| 激情图片小说一区| 色欧美乱欧美15图片| 精品国产乱码久久久久久蜜臀| 亚洲免费高清视频在线| 精久久久久久久久久久| 日本乱码高清不卡字幕| 久久在线免费观看| 亚洲福利视频一区二区| 成人免费看片app下载| 在线成人av网站| 中文字幕一区在线观看视频| 免费看日韩a级影片| 色婷婷综合久久久| 精品久久久久久无| 亚洲一二三专区| 粉嫩欧美一区二区三区高清影视| 91精品免费在线观看| 1024亚洲合集| 韩国毛片一区二区三区| 欧美日产国产精品| 中文字幕一区视频| 国产在线精品一区二区不卡了| 欧美天堂一区二区三区| 欧美激情一区二区| 久久精品国产77777蜜臀| 欧美亚一区二区| 亚洲欧洲精品一区二区三区不卡| 国内成人自拍视频| 欧美高清视频不卡网| 亚洲免费观看高清完整版在线 | av一区二区不卡| 久久久亚洲午夜电影|