ÀÚ¹ÙÀÇ Toast¸¦ ÆÄÀ̾î¸ÛÅ°·Î ¸¸µé¾î ºÃ½À´Ï´Ù... ÀÚ¹ÙÀÇ Toast¿¡ ºø´ë¾î Bread¶ó°í Çߴµ¥ ¾²½Ç ºÐµéÀº ¸¶À½´ë·Î NamingÇؼ ¾²½Ã±â ¹Ù¶ø´Ï´Ù.... ±×¸®°í À̸¦ ÀÌ¿ëÇØ µÚ·Î ¹öÆ°À» µÎ ¹ø ´·¯ ¾ÛÀ» Á¾·áÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù... (ÃÊ ´ÜÀ§°¡ ¾Æ´Ñ Millisecond ´ÜÀ§·Î Àû¿ë.)
// »ç¿ë ¹æ¹ýÀÔ´Ï´Ù..
unit Unit1;
interface
uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.VirtualKeyboard, FMX.Platform, System.DateUtils, FMX.Controls.Presentation, FMX.StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); procedure FormCreate(Sender: TObject); private // µÚ·Î ¹öÆ°ÀÌ ´·Á Á³´ÂÁö¸¦ üũ... HardwareBackClickCheckFlag: Boolean; // ¹öÆ°ÀÌ ´·Á Á³À» ¶§ÀÇ ½Ã°£ BackFirstClick: TDateTime; public { Public declarations } end;
var Form1: TForm1;
implementation
uses uBread;
{$R *.fmx}
// »§ Ŭ·¡½º¸¦ ¾²±â ÆíÇÏ°Ô... procedure Bread(AOwner: TComponent; msg: string); begin TBread.Create(AOwner, msg); end;
procedure TForm1.FormCreate(Sender: TObject); begin // ¹Ýµå½Ã ÃʱâÈ... ±×·¸Áö ¾ÊÀ¸¸é ÇÑ ¹ø¸¸ ´·¯µµ Á¾·áµÇ´Â Çö»óÀÌ °¡²û¾¿ ³ªÅ¸³².. HardwareBackClickCheckFlag := False; end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); // Áö¿ª procedure procedure HardwareBackClickCheck; var BackSecondClick: TDateTime; BackClickTimeSpan: Int64; begin if not HardwareBackClickCheckFlag then begin BackFirstClick := Now; Bread(Self, '''µÚ·Î'' ¹öÆ°À» ÇÑ ¹ø ´õ ´©¸£¸é Á¾·áÇÕ´Ï´Ù.'); HardwareBackClickCheckFlag := True; Exit; end;
if HardwareBackClickCheckFlag then begin BackSecondClick := Now; BackClickTimeSpan := MillisecondsBetween(BackFirstClick, BackSecondClick); // 1500 millisecond Áï, 1.5ÃÊ ¾È¿¡ ¶Ç ÇÑ ¹ø ´©¸£¸é Á¾·á... if BackClickTimeSpan <= 1500 then Close; BackFirstClick := Now; Bread(Self, '''µÚ·Î'' ¹öÆ°À» ÇÑ ¹ø ´õ ´©¸£¸é Á¾·áÇÕ´Ï´Ù.'); end; end; var Keyboard: IFMXVirtualKeyboardService; begin if Key = vkHardwareBack then begin Key := 0; HardwareBackClickCheck; end; end;
// »§ Ŭ·¡½ºÀÔ´Ï´Ù... (ÆÄÀÏ Ã·ºÎ) // ÇÊ¿äÇϸé ÀÔ ¸À¿¡ ¸Â°Ô ¼öÁ¤ÇØ »ç¿ëÇϽñæ.... unit uBread;
interface
uses System.SysUtils, System.Types, System.UITypes, System.Classes, FMX.Graphics, FMX.Types, FMX.Forms, FMX.Objects;
type TBread = class(TRoundRect) private FText: TText; FTimer: TTimer; procedure Free; public constructor Create(AOwner: TComponent; msg: string); reintroduce; destructor Destroy; override; procedure OnBreadTimer(Sender: TObject); end;
var FInterval: Integer = 1500; // ¸Þ½ÃÁö°¡ ¶° ÀÖ´Â ½Ã°£
implementation
{ TBread }
constructor TBread.Create(AOwner: TComponent; msg: string); begin inherited Create(AOwner);
// Round Rectangle draw Parent := AOwner as TFmxObject; Align := TAlignLayout.Center; Fill.Color := TAlphaColorRec.Firebrick; Stroke.Color := TAlphaColorRec.Null; Stroke.Cap := TStrokeCap.Round; Height := (AOwner as TForm).Canvas.TextHeight(msg) + 20; // 20Àº ¿©À¯ºÐ // ¹®ÀÚ¿ ±æÀÌ¿¡ ¸Â°Ô ÀÚµ¿ Á¶Àý.. Width := (AOwner as TForm).Canvas.TextWidth(msg) + 30; // 30Àº ¿©À¯ºÐ
// Text display FText := TText.Create(Self); FText.Parent := Self; FText.Align := TAlignLayout.Contents; FText.TextSettings.Font.Family := '¸¼Àº °íµñ'; FText.TextSettings.Font.Style := FText.TextSettings.Font.Style + [TFontStyle.fsBold]; FText.TextSettings.FontColor := TAlphaColorRec.White; FText.TextSettings.HorzAlign := TTextAlign.Center; FText.TextSettings.VertAlign := TTextAlign.Center; FText.TextSettings.WordWrap := False; FText.AutoSize := True; FText.Text := msg;
// Timer set FTimer := TTimer.Create(Self); FTimer.Parent := Self; FTimer.Interval := FInterval; FTimer.Enabled := True; FTimer.OnTimer := OnBreadTimer; end;
destructor TBread.Destroy; begin
inherited; end;
procedure TBread.Free; begin FText.DisposeOf; FTimer.DisposeOf; Self.DisposeOf; end;
procedure TBread.OnBreadTimer(Sender: TObject); begin FTimer.Enabled := False; Free; end;
end.
³¡...
blog.naver.com/seejune66
|