안녕하세요...

TFrame을 처음 사용하면 좀 난해한 부분이 있습니다..

어떻게 생성하고 또 어떻게 해제를 해야 하는지.....

이럴 경우에 아주 편리하게 사용할 수 있는 TFrame 관리 클래스를 공개합니다..

(공개라 하기에는 좀 뭐시기 하지만....)

 

현재 도쿄 10.2.2에서 잘 돌아감....

 

 

// 메인 폼...

unit Unit3;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.VirtualKeyboard,  FMX.Platform,
  uFrameList; 

type
  TForm3 = class(TForm)
    btnFrameTest: TButton;
    btnClose: TButton;
    Button1: TButton;
    procedure btnFrameTestClick(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
    procedure btnCloseClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private

  public
    FrameList: TFrameList;   // 프레임 관리 변수를 전역으로...
  end;

var
  Form3: TForm3;

 

implementation

 

uses Unit4;

 

{$R *.fmx}

procedure TForm3.btnFrameTestClick(Sender: TObject);
var
    fr: TFrame1;
begin

  // 버튼을 누르면 프레임을 생성해서 관리 클래스에 추가한다....
    fr := TFrame1.Create(Self);
    FrameList := TFrameList.GetObject;
    FrameList.Add(Self, fr);

end;

procedure TForm3.btnCloseClick(Sender: TObject);
begin
    Close;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin

   // 메인 폼 처음 생성 시 프레임 관리 변수에 클래스를 생성하여 저장한다...
    FrameList := TFrameList.GetObject;  // 중복 생성을 방지하기 위해 싱글톤으로.....

end;

procedure TForm3.FormDestroy(Sender: TObject);
begin

   // 메인 폼 종료 시 클래스도 해제한다...
    FrameList.Free;

end;

procedure TForm3.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
var
    Keyboard: IFMXVirtualKeyboardService;
begin
    if Key = vkHardwareBack then
    begin
        Key := 0;

 

        // 백버튼을 눌렀을 때 프레임이 생성되 있으면 해제한다....

        if FrameList.Count > 0 then
        begin
            FrameList.DeleteCurrentFrame; // 가장 마지막에 생성된 프레임(현재 프레임) 삭제....
            //  FrameList.Clear;  // 모든 프레임 일괄 삭제....
            Exit;
        end;


        Close;
    end;
end;

end.

 

 

 

// 프레임 유닛....

unit Unit4;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.Edit;

type
  TFrame1 = class(TFrame)
    Edit1: TEdit;
    btnFrameFree: TButton;
    procedure btnFrameFreeClick(Sender: TObject);
  private
  public
  end;

implementation

 

uses Unit3;

 

{$R *.fmx}

procedure TFrame1.btnFrameFreeClick(Sender: TObject);
begin

   // 프레임 위의 '닫기' 버튼을 눌렀을 때 현재 프레임을 삭제한다...
    Form3.FrameList.DeleteCurrentFrame;

end;

end.

 

클래스는 파일로 첨부되어 있습니다....

사용자 상황에 맞게 수정하여 사용하셔도 되며,

무단 복제 및 배포를 적극 환영합니다....

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15469
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13974
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16505
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22062
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23276
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39266
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174729
863 FireDAC 성능 비교(BDE, dbGO(ADO), dbExpress, FireDAC) 험프리 2016.08.09 1756
» TFrame의 생성 및 해제를 편하게 해주는 TFrame 관리 클래스입니다.. file 푸른솔 2017.12.15 1739
861 [BaaS] VCL에서 특정사용자에게 GCM/APN 전송하기(FMX도 사용가능) Humphery 2014.07.25 1727
860 [VCL] 에디트/버튼의 다양한 속성 소개 Humphery 2015.02.13 1721
859 [시애틀] BSON(Binary JSON)을 처리하고, JSON 데이터를 스트리밍 모델로 읽고, 쓸수 있습니다. file Humphery 2015.10.05 1718
858 n [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 1. 델파이 소개, 단순 컴포넌트들 관리자 2019.02.13 1717
857 [업데이트][10.2 도쿄][릴리즈 2] 10.2 도쿄 - 릴리즈 2 출시 & 설치방법 안내 file 험프리 2017.12.13 1699
856 [마이그레이션] 컴파일러 버젼 [1] 험프리 2014.08.18 1691
855 멀티-티어 애플리케이션 개발과 배포: 파이어몽키 코스북 9장 file 관리자 2014.07.25 1689
854 [FireDAC Skill Sprints] 6. 전처리: SQL문을 유연하게 작성할 수 있는 Param와 Macro 사용하기 Humphery 2015.03.13 1686
853 TListView 행별로 배경색 설정 및 글꼴변경하기 험프리 2017.09.08 1685
852 n [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 9. 함수들 관리자 2019.03.29 1684
851 [10.4 시드니 신기능] 다시 태어난 '코드 인사이트' [2] file 험프리 2020.05.08 1676
850 [10.3.3] 안드로이드 64비트 앱 빌드하기 [4] file 험프리 2019.11.27 1670
849 퀵레포트 보고서 엑셀로 내보내기(저장하기) [1] 험프리 2016.08.01 1668
848 [기술문서] 델파이XE2와 파이어몽키 관리자 2014.09.16 1657
847 [20140610 온라인 세미나 발표자료] 처음 만나는: RAD Studio XE6, Delphi XE6, C++Builder XE6 file 관리자 2014.06.14 1652
846 [XE8] 대화형 지도 컴포넌트로 구글맵과 애플 맵킷 한번에 사용하기 Humphery 2015.04.17 1650
845 RAD 스튜디오 - 사물인터넷 관련기술과 고객사례 험프리 2017.10.31 1644
844 [온라인 세미나 발표자료] RAD Studio XE7! 관리자 2014.09.17 1641