본문 바로가기

Program

[Delphi-FireMonkey] 안드로이드(Android) 뒤로가기 버튼 두번 눌러서 종료 안드로이드에서 뒤로가기 버튼을 두번 눌렀을 경우 종료되는 것을 델파이로 만들어 보았다. 자바로 구현된 소스처럼 시간을 체크하여 동작을 처리한다. 구조 역시 비슷하게 만들었다. 뒤로가기 버튼을 두번 눌렀을 경우 종료가 되는 동작을 처리하는 uBackPressCloseHandler.pas 파일 생성. unit uBackPressCloseHandler; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText, Androidapi.. 더보기
[Android] 안드로이드 뒤로가기 버튼 두번 눌러서 종료 안드로이드 앱을 종료할 때 뒤로가기 버튼을 두번 눌러서 종료하는 경우가 많다. 시간 체크하면 될 것 같았는데, 역시나 안드로이드에서는 이미 많이 사용하고 있는지 검색하면 아래(BackPressCloseHandler 클래스)와 같은 소스코드로 만들어진 자료들이 바로 나온다.(동일한 소스코드 자료들이 많아서 어디에 출처를 둬야 할지 모르겠다...) 뒤로가기 버튼 눌렀을 때 작업을 처리하는 클래스import android.app.Activity;import android.widget.Toast; public class BackPressCloseHandler {private long backKeyPressedTime = 0;private Toast toast; private Activity activity; p.. 더보기
[Delphi-FireMonkey] 안드로이드(Android) 리소스(Resource) 접근 및 이미지 적용 이클립스에서 작업하는 안드로이드 프로젝트와는 달리 델파이-파이어몽키에서는 안드로이드 프로젝트의 리소스(Resource) 접근이 좀 번거롭다고 할 수 있을 것 같다. 이클립스에서 안드로이드 프로젝트로 작업을 할 경우 이미지 등의 파일들을 프로젝트의 정해진 폴더에 저장하면 안드로이드 프로젝트는 R.java 파일을 통해 리소스를 관리하고, 이 파일들에게 쉽게 접근하여 사용할 수 있게 해 준다. 문제는 델파이-파이어몽키에서는 이클립스에서처럼 쉽게 작업할 수가 없다는 것인데... 분명 방법이 있을 것도 같은데... 델파이 메뉴 Project-Deployment 를 열어 이미지를 올려놓고 Remote Path를 설정한다. 안드로이드에서는 기본적으로 이미지는 'res\drawable\' 경로를 기준으로 하고 있다. .. 더보기
[Delphi-FireMonkey] 안드로이드(Android) Toast API 적용 델파이에서 안드로이드의 Toast가 왜 안되나 했다..안드로이드에서 Toast는 android.widget.Toast 클래스에서 정의되어 API로 지원하고 있다. 그래서 델파이에서 uses절에 'Androidapi.JNI.Widget'를 입력하고 안드로이드의 Toast 기능을 사용하려고 했는데... Toast가 없었다;; 이상해서 'Androidapi.JNI.Widget'에 들어가 봤는데... 없다... Toast가 없다. 알아보니 파이어몽키에서 안드로이드의 모든 API를 지원하는 것이 아니란다. 때문에 이런 경우에는 직접 안드로이드 API에 접근하여 사용할 수 있도록 해야 한다... (... 이런 점은 정말 불편하다...) 직접 불러오는 소스를 구현해도 상관 없지만...구글 검색을 하면 Toast AP.. 더보기
[Delphi] class 상속, interface 위임 Delphi에서는 기본적으로 다중 상속을 지원하지 않는다. 다중 상속의 위험성은 너무나도 뻔하기에... 뻔하면서도 중요한 부분이기 때문에 많은 사람들이 그렇게 자세히 설명을 하고 있는 것이다.이는 객체지향을 지향하는 프로그램에서는 공통된 사항이다. 때문에 C#, JAVA도 다중 상속을 허락하지 않는다. 대신 인터페이스를 이용하여 다중 상속(더 분명하게 표현하자면 기능의 위임이라고 하는 것이 좋을 수도 있다)을 지원하고 있다. 그렇다면 다중 상속은 아예 필요하지 않는 것일까? 사람마다 다르겠지만... 난 필요하다고 본다. 다중 상속이 안된다면 논리적으로 불편한 일이 생길 것이다. 실제로 다중 상속을 피해 프로그램을 개발하려고 하다 보면 논리적 구조가 괜히 복잡해지는 경우가 생긴다... 그리고 필요가 없었다.. 더보기
[Delphi] Excel 경로 및 Office 버전 찾기. uses절에 Registry 추가.uses Registry; procedure TForm1.FormCreate(Sender: TObject);begin ShowMessage(GetOfficeVersion(GetExcelPath));end; function TForm1.GetExcelPath: string;var tempRegistry: TRegistry;begin tempRegistry := TRegistry.Create; try tempRegistry.RootKey := HKEY_LOCAL_MACHINE; if tempRegistry.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe', False) then Result := .. 더보기
[Delphi] Excel 변환 FireMonkey Desktop Application으로 프로젝트 생성(VCL Forms Application 생성시에도 동일) uses절에 ComObj, VCL.OleCtrls 추가.Form에 Button, SaveDialog 생성. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, ComObj, VCL.OleCtrls; const xlBottom = -4107; xlLeft = -4131; xlRight = -4152; xl.. 더보기
[Delphi] Clipboard의 이미지 불러오기 uses절에 Cliipbrd를 추가.uses Clipbrd; procedure TForm1.ClipboardTest;var tempBitmap : TBitmap;begin // 클립보드 이미지의 사이즈 측정 tempBitmap := TBitmap.Create; try tempBitmap.LoadFromClipBoardFormat(CF_BITMAP, Clipboard.GetAsHandle(CF_BITMAP), 0); ShowMessage('Clipboard Image Width : ' + IntToStr(tempBitmap.Width) + #13 + 'Clipboard Image Height : ' + IntToStr(tempBitmap.Height)); finally tempBitmap.free; end.. 더보기