Тема: Фреймы
Показать сообщение отдельно
  #5  
Старый 11.04.2019, 07:55
pikabu pikabu вне форума
Прохожий
 
Регистрация: 27.12.2017
Сообщения: 30
Версия Delphi: 10.1
Репутация: 10
По умолчанию

Главная форма

Код:
***
 public
    procedure OpenFrame(FrameType: TacFrame; Animated: boolean);
***

procedure TMainForm.OpenFrame(FrameType: TacFrame; Animated: boolean);
var
  OldFrame: TFrame;
begin
  if not (FormData.CurrentMenuFrame is FrameType) then begin
    OldFrame := FormData.CurrentMenuFrame;
    if Animated and FormData.sSkinManager1.Effects.AllowAnimation then
      PrepareForAnimation(sPanel3, atcRunup);

    FormData.CurrentMenuFrame := FrameType.Create(Self);
    FormData.CurrentMenuFrame.Align := {alTop;//}alClient;
    FormData.CurrentMenuFrame.Parent := sPanel3;
    FreeAndNil(OldFrame);
    if Animated and FormData.sSkinManager1.Effects.AllowAnimation then
      AnimShowControl(sPanel3, 50, 255, atcRunup);
  end;
end;

FormData

Код:
unit UnitData;

interface

uses
  SysUtils, Classes, Forms, ImgList, Controls,
  acAlphaImageList, sSkinManager, sSpeedButton, acAlphaHints;

type
  TacFrame = class of TFrame;

  TFormData = class(TDataModule)
    sSkinManager1: TsSkinManager;
    sCharImageList1: TsCharImageList;
    sAlphaImageList1: TsAlphaImageList;
    sAlphaHints1: TsAlphaHints;
  public
    CurrentMenuFrame: TFrame;
    CurrentMenuBtn: TsSpeedButton;
    CurrentWorkFrame: TFrame;
    CurrentWorkBtn: TsSpeedButton;
    procedure OpenFrame(FrameType: TacFrame; SelectBtn: TsSpeedButton);
    procedure PaintSelRect(Bmp: TBitmap);
  end;


var
  FormData: TFormData;

implementation

{$R *.dfm}

uses sConst, sCommonData, sGraphUtils, sPanel, sVCLUtils, MainUnit;

procedure TFormData.OpenFrame(FrameType: TacFrame; SelectBtn: TsSpeedButton);
var
  OldFrame: TFrame;
begin
  if (FrameType <> nil) and (CurrentWorkBtn <> SelectBtn) then begin
    MainForm.sSplitView2.SideShadow.Mode := ssmInternal;
    MainForm.PanelMain.SideShadow.Mode := ssmNone;
    MainForm.PanelMain.SkinData.SkinSection := '';
    if CurrentWorkBtn <> nil then
      CurrentWorkBtn.SkinData.SkinSection := 'LBTN';

    CurrentWorkBtn := SelectBtn;
    CurrentWorkBtn.SkinData.SkinSection := 'SELBTN';

    if not (FormData.CurrentWorkFrame is FrameType) then begin
      OldFrame := FormData.CurrentWorkFrame;
      if sSkinManager1.Effects.AllowAnimation then
        PrepareForAnimation(MainForm.PanelContainer, atcRunup);

      FormData.CurrentWorkFrame := FrameType.Create(Application);
      FormData.CurrentWorkFrame.Align := alClient;
      FormData.CurrentWorkFrame.Parent := MainForm.PanelContainer;
      FreeAndNil(OldFrame);
      if sSkinManager1.Effects.AllowAnimation then
        AnimShowControl(MainForm.PanelContainer, 50, 255, atcRunup);
    end;
  end
  else begin
    if CurrentWorkBtn <> nil then begin
      CurrentWorkBtn.SkinData.SkinSection := 'LBTN';
      CurrentWorkBtn := nil;
    end;
    if FormData.CurrentWorkFrame <> nil then
      FreeAndNil(FormData.CurrentWorkFrame);

    MainForm.sSplitView2.SideShadow.Mode := ssmNone;
    MainForm.PanelMain.SideShadow.Mode := ssmInternal;
    MainForm.PanelMain.SkinData.SkinSection := 'TRANSPARENT';
  end;
end;

Открытие фрейма

Код:
type
  TFrameAccount = class(TFrame)
    sSpeedButton1: TsSpeedButton;
    procedure sSpeedButton1Click(Sender: TObject);
  public
    destructor Destroy; override;
  end;

implementation

{$R *.dfm}

uses MainUnit, UnitData, UnitFrameEmpty, UnitFrameAccountEdit,
  UnitFrameAccountCreate;

destructor TFrameAccount.Destroy;
begin
  FormData.CurrentWorkBtn := nil;
  inherited;
end;


procedure TFrameAccount.sSpeedButton1Click(Sender: TObject);
begin
  FormData.OpenFrame(TFrameAccountCreate, TsSpeedButton(Sender));
end;


end.
Ответить с цитированием