Firemonkey TFrame의 생성 및 해제를 편하게 해주는 TFrame 관리 클래스입니다..
2017.12.15 16:14
안녕하세요...
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.
클래스는 파일로 첨부되어 있습니다....
사용자 상황에 맞게 수정하여 사용하셔도 되며,
무단 복제 및 배포를 적극 환영합니다....