Search results for 'Delphi/C++Builder'

  1. 2017.03.29 -- ">[10.2 도쿄] 델파이로 리눅스 기반 웹서비스 제작하기(WebBroker 이용)
  2. 2017.02.15 -- [10.2 도쿄] 델파이/C++빌더 리눅스 개발환경 설정하기
  3. 2016.11.21 -- Out of memory 오류 해소 방안
  4. 2016.09.28 -- 마우스 이벤트 캡쳐 - SetCapture, ReleaseCapture
  5. 2016.08.31 -- TWICImage를 이용해 다양한 이미지 포맷의 파일을 불러오고 저장하기.
  6. 2016.08.01 -- 퀵레포트(Quick Report)에 사진 출력하기
  7. 2016.08.01 -- 퀵레포트 보고서 엑셀로 내보내기(저장하기) (1)
  8. 2016.05.27 -- VCL 스타일이 적용된 앱을 다른 프로세스에 넣을때 메인메뉴가 클릭되지 않는 이슈 해결방법
  9. 2016.04.28 -- [라이브바인딩] 콤보박스에 목록표시, 선택 값 반영하기
  10. 2016.04.21 -- delphi-markdown(델파이 마크다운 라이브러리) 소개
  11. 2016.03.07 -- [VCL] 다른 프로세스의 폼을 패널등에 넣기 (1)
  12. 2016.02.29 -- RAD Studio IDE에서 SVN 사용하기 + TortoiseSVN 사용하기
  13. 2016.02.29 -- SVN 서버 설치하기 - Visual SVN 이용
  14. 2016.02.25 -- 런타임 오브젝트 인스펙터(ObjectDebugger) 오픈소스 소개
  15. 2015.09.07 -- [시애틀] 비콘펜스(BeaconFence)등 새로운 오픈 소스와 컴포넌트 패키지를 IDE에서 직접 확보할 수 있습니다.
  16. 2015.06.26 -- [XE8] 코딩 중 이유없이 델파이 IDE가 응답없음 되는 경우 참고사항
  17. 2015.06.25 -- 델파이 프레임워크(VCL/FMX) 소스코드를 직접 수정하는 방법
  18. 2015.05.28 -- [XE8] RAD Studio XE8을 지원하는 외부 컴포넌트와 도구
  19. 2015.05.27 -- JVCL(JCL) 써드파티 컴포넌트 최신버전을 받기
  20. 2015.03.24 -- 델파이/C++빌더에 TServerSocket, TClientSocket 등록하기

[10.2 도쿄] 델파이로 리눅스 기반 웹서비스 제작하기(WebBroker 이용)

2017.03.29 15:19



이 글에서는 델파이를 이용해 리눅스 서버에서 구동되는 아파치 모듈을 웹브로커 기술을 이용해 만드는 방법을 소개합니다.

(이 글에서는 리눅스 서버 설정과 MySQL 설정 등에 대해서는 자세히 다루지 않습니다.)


델파이로 리눅스 기반 웹서비스 제작하기(WebBroker 이용)


RAD 스튜디오 10.2 도쿄버전에서 리눅스 개발을 지원합니다. 이제 델파이로 리눅스 서버용 프로그램을 개발 및 배포, 디버깅 할 수 있습니다. 

이 글은 RAD 스튜디오 10.2 도쿄 버전 기준으로 작성되었습니다.


이 글에서 아래의 내용을 진행합니다.

  • 콘솔 기반 WebBroker 프로젝트 제작 및 리눅스에서 실행
  • 아파치 모듈 기반 WebBroker 프로젝트 제작 및 리눅스에 배포, 테스트
  • 리눅스의 MySQL(FireDAC 이용) 데이터 연동해 JSON 데이터 응답하기

다음 순서로 진행합니다.

  • 개발준비
  • 콘솔 기반 웹브로커 프로젝트 만들기
  • 리눅스에서 실행
  • 아파치 모듈 기반 웹브로커 프로젝트 만들기
  • 리눅스에 배포
  • MySQL 연결(FireDAC 이용)

개발 준비

리눅스가 설치된 별도의 컴퓨터 또는 가상머신을 준비합니다.

개발환경 설정은 다음 링크를 통해서 진행할 수 있습니다.


콘솔 기반 WebBroker 프로젝트 만들기

WebBroker 프로젝트 생성(Stand-alone console application)

델파이 실행 후 File > New > Other 메뉴를 선택합니다.

Delphi Projects > WebBroker 메뉴 선택 후 Web Server Application 항목 선택 후 [OK] 버튼을 클릭합니다.


마법사 창에서 Linux 플랫폼을 추가로 선택 후 [Next >>] 버튼을 클릭합니다.


프로젝트 타입으로 Stand-alone console application 항목을 선택합니다.

  • Apache dynamic link module : 아파치 모듈을 만들어 아파치 웹서버를 이용해 구동합니다.
  • Stand-alone console application : 독립형 콘솔 어플리케이션을 제작합니다.


독립형 콘솔 애플리케이션이 사용할 HTTP 포트번호를 입력 후 [Finish] 버튼을 누릅니다.

포트번호는 소스코드 상에서 변경 가능합니다.


생성한 프로젝트를 저장합니다.(Ctrl + Shift + S) 프로젝트 명은 LinuxSAConsole로 지정합니다.(이름을 다르게 지정해도 됩니다.)


윈도우에서 실행

테스트를 위해 윈도우에서 실행하면 아래와 같이 콘솔모드로 실행됩니다."start" 키워드 입력해 서버를 시작할 수 있습니다.


웹브라우저에서 "http://localhost:8080" 주소를 열면 아래와 같이 WebModuleUnit1에 정의된 응답데이터가 표시됩니다.


(콘솔 프로그램을 종료하고) 구동 시 서버가 자동으로 시작되도록 프로젝트 파일(LinuxSAConsole)의 RunServer 함수에 아래 그림을 참고해 "StartServer(LServer);"를 추가합니다.


리눅스에서 실행(콘솔 기반 WebBroker 프로젝트)

PAServer 실행

리눅스 터미널에서 PAServer가 설치된 경로로 이동 후 PAServer를 실행합니다.


연결에 사용할 비밀번호 입력 후 엔터, "i" 명령어로 PAServer의 IP주소를 확인합니다.


타겟 플랫폼을 리눅스로 지정

델파이 IDE의 프로젝트 매니저에서 Target Platforms을 "64-bit Linux" 항목을 선택합니다.

만약, "64-bit Linux" 항목이 없다면, Target Platforms 항목의 팝업메뉴에서 "Add Platform..." 메뉴를 선택 후 "64-bit Linux"를 추가합니다. 

(64-bit Linux 플랫폼은 RAD 스튜디오 10.2 도쿄 이후 버전,  엔터프라이즈 에디션 이상에서 사용할 수 있습니다.)


PAServer 연결

PAServer 연결 설정하기 위해 "64-bit Linux" 항목의 팝업 메뉴에서 "Edit Connection..." 메뉴를 선택합니다.


리눅스에서 실행한 PAServer 연결설정을 선택(또는 추가 후 선택) 후 [OK] 버튼을 누릅니다.


리눅스에서 실행

프로젝트를 실행(Run, F9)합니다.


웹브라우저에서 리눅스 서버 IP와 8080포트로 웹페이지를 열면 아래와 같이 표시됩니다.


프로젝트 파일 저장 경로 하위 "\Linux64\Debug\" 경로에 리눅스 실행파일이 생성됩니다.


PAServer를 통해 리눅스에도 실행파일이 배포됩니다.

홈디렉토리 하위 "/PAServer/scratch-dir/(PAServer 연결문자)/(프로젝트명)" 하위에 LinuxSAConsole 파일이 복사됩니다. 리눅스에서 콘솔 프로그램을 직접 실행할 수 있습니다.


아파치 모듈 기반 WebBroker 프로젝트 만들기

WebBroker 프로젝트 생성(Apache dynamic link module)

WebBroker 프로젝트를 생성(File > New > Other > Delphi > WebBroker > Web Server Application)하고, "Apache dynamic link module" 프로젝트 타입을 선택합니다.


Apache module을 수정(서비스명_module 등으로)하고 [Finish] 버튼을 누릅니다.


생성한 프로젝트를 저장합니다.(Ctrl + Shift + S)


WebBroker 프로젝트 빌드

WebModule 유닛에 필요한 기능을 구현합니다.


리눅스 타겟으로 빌드합니다.


아래와 같이 프로젝트 저장 경로 하위 ".\Linux64\Debug\" 디렉토리에 so 확장자의 아파치 모듈이 생성됩니다.

리눅스에 배포(아파치 모듈 기반 WebBroker 프로젝트)

아파치 모듈 리눅스로 복사

위에서 생성한 아파치 모듈(libmod_webbroker.so)을 리눅스로 복사합니다.(USB 메모리, FTP 클라이언트 프로그램 등을 이용합니다.) 

저는 제 작업디렉토리(/home/humphrey/WorkData/)에 복사했습니다.


아파치 모듈 디렉토리로 복사

아파치 모듈 디렉토리(/usr/lib/apache2/modules)로 아파치 모듈을 복사합니다.

su : root 권한을 가져옵니다.(/usr/lib 하위 경로에 복사하기 위해 root 권한이 필요합니다.)

cp : 파일을 복사합니다.

cd : 디렉토리를 변경합니다.

ls : 현재 디렉토리의 파일목록을 표시합니다.


apache2 모듈 활성화에 등록

/etc/apache2/mods-enabled/ 디렉토리로 이동 합니다.

nano 에디터를 이용(vi 등 다른 에디터를 이용해도 됩니다.) libmod_webbroker.load 파일을 편집(생성) 합니다.(root 권한 필요)

nano libmod_webbroker.load


nano 에디터에서 아래와 같이 입력하고 저장(Ctrl + X > Y > 엔터)합니다.(root 권한 필요)

LoadModule webbroker_module /usr/lib/apache2/modules/libmod_webbroker.so


아파치를 다시 시작합니다.(root 권한 필요)

/etc/init.d/apache2 restart


apache2 사이트 활성화에 등록

/etc/apache2/sites-enabled/ 디렉토리로 이동합니다.

nano 에디터를 이용해 000-default.conf 파일을 편집합니다.(root 권한 필요)

nano 000-default.conf


DocumentRoot 아래에 아래 코드를 입력합니다.


<Location /webbroker>

  SetHandler libmod_webbroker-handler

</Location>


현재서버의 /webbroker 경로로 웹서버 호출 시 libmod_webbroker.load 로드하도록 설정

저장하고 빠져나옵니다.(Ctrl + X > Y > 엔터)


배포가 완료되었습니다. 리눅스 서버의 아이피(또는 도메인)과 webbroker 경로를 웹브라우저에서 입력해 열면 아래와 같은 결과를 볼 수 있습니다.

MySQL 연결(FireDAC 이용)

위에서 만든 WebBroker 아파치 모듈에서 리눅스에 설치된 MySQL과 연동하는 기능을 구현합니다. FireDAC을 이용해 MySQL에 접속합니다.

MySQL 준비

리눅스 서버에 설치된 MySQL과 연결하기 위해 리눅스 서버에 MySQL이 설치되어 있어야 합니다.


델파이가 설치된 원격환경에서 MySQL과 연결하기 위해 MySQL 외부 접속을 허용합니다.
스키마와 계정, 테이블을 생성합니다. 스키마 명과 계정명, 비밀번호는 모두 'test'로 합니다.

스키마 생성
create schema test;

계정 생성
create user 'test'@'%' identified by 'test';

테이블 생성
CREATE TABLE USER(
  USER_ID int, 
  NAME VARCHAR(255) character set utf8, 
  ADDRESS VARCHAR(255) character set utf8, 
  CITY VARCHAR(255) character set utf8);

샘플 데이터 입력
INSERT INTO USER VALUES(1, '김현수', '내가 사는 우리집', '인천');

INSERT INTO USER VALUES(2, '홍길동', '네가 사는 너희집', '강릉');

MySQL 연결

FireDAC을 이용해 리눅스 서버의 MySQL과 연결합니다.


DB 연결 컴포넌트 추가

WebModuleUnit1을 열고, TFDConnection, TFDQuery 컴포넌트를 추가합니다.


데이터베이스 연결 설정

TFDConnection 컴포넌트의 연결설정 화면을 열고(컴포넌트 더블클릭) 아래와 같이 입력합니다.

  • Driver ID : MySQL

  • Database : test

  • User_Name : test

  • Password : test

  • Server : 리눅스 서버의 IP 주소(또는 도메인)

  • CharacterSet : UTF8(한글을 표현하기 위해)

[Test] 버튼을 눌러 연결을 확인합니다.(만약 연결되지 않는 경우 서버 IP주소 또는 MySQL 외부연결 설정을 확인합니다.)

LoginPrompt 속성을 False로 변경합니다.


쿼리 설정

쿼리 컴포넌트(TFDQuery)의 Query Editor를 열고(컴포넌트 더블클릭) 쿼리문을 작성합니다.

[Execute] 버튼을 눌러 결과를 확인합니다. 

[OK] 버튼을 눌러 적용합니다.



(작성 중)








저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

험프리.김현수 험프리.김현수 Delphi/C++Builder 10.2 도쿄, 델파이, 리눅스, 웹브로커

[10.2 도쿄] 델파이/C++빌더 리눅스 개발환경 설정하기

2017.02.15 18:08

RAD 스튜디오 10.2 도쿄버전이 출시되어 해당 내용을 아래 글에서 업데이트 하였습니다.



곧 출시 예정인 RAD 스튜디오 10.2 도쿄 버전에서는 리눅스 개발 지원을 대기하고 있습니다.

이 글에서는 RAD 스튜디오로 리눅스 개발하기 위한 환경설정 및 개발 절차를 설명합니다.

(이 글은 베타버전 기준으로 작성되며, 정식 출시 이후 업데이트하도록 하겠습니다.)

리눅스 개발환경 설정

리눅스 개발환경 설정은 아래 절차 순으로 진행합니다.

  1. 리눅스 OS 설치
  2. RAD 스튜디오 설치
  3. 리눅스 머신에 PAServer 설치 및 실행
  4. RAD 스튜디오에서 PAServer 연결 설정
  5. RAD 스튜디오에서 리눅스 SDK 설정
  6. 코드 작성 및 실행

리눅스 OS 설치

공식 지원 리눅스 버전

RAD 스튜디오가 공식 지원하는 리눅스 버전은 아래와 같습니다.

  • Ubuntu Server(Ubuntu LTS version 16.04) - 우분투 서버
  • RedHat enterprise Linux (version 7) - 레드햇/페도라 계열 리눅스

리눅스 설치

(이미 위 버전의 리눅스가 설치되있다면 이 단계를 넘어갑니다.)


별도의 컴퓨터 또는 가상머신에 리눅스 OS를 설치합니다.

  • 우분투 서버 다운로드 : https://www.ubuntu.com/download/server
  • 레드햇/페도라 리눅스 다운로드 : https://getfedora.org/en/server/download/


다음 링크에서 무료 가상머신(Virtual Box)과 리눅스 OS 설치 과정을 소개합니다.

리눅스 소프트웨어 업데이트 - 우분투

설치가 완료되면 시스템 업데이트를 해야합니다. 

다음 명령어를 실행합니다.(참고: sudo 명령어를 사용하는 경우 관리자 비밀번호를 1회 입력해야 합니다.)

설치파일 용량이 큰 경우 설치 여부를 묻습니다. 'Y' 입력 후 엔터키를 누릅니다.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

개발에 필요한 몇가지 패키지를 설치합니다.

sudo apt-get install joe wget p7zip-full curl
sudo apt-get install openssh-server
sudo apt-get install build-essential
sudo apt-get install zlib1g-dev
sudo apt-get install libcurl4-gnutls-dev

마지막으로 약간의 정리를 합니다.

sudo apt-get autoremove
sudo apt-get autoclean

리눅스 소프트웨어 업데이트 - 레드햇/페도라

시스템 소프트웨어를 .업데이트 합니다.

sudo yum update

RAD 스튜디오 설치

설치파일 다운로드

현재(2017년 2월 16일)  RAD 스튜디오 10.2 도쿄 버전 출시 준비 중입니다.

RAD 스튜디오 업데이트 서브스크립트를 등록한 경우 베타버전인 고질라 프로젝트를 통해 미리 만나보실 수 있습니다.

 - 베타버전(고질라) 다운로드 : http://digsig.embarcadero.com/ft/GodzillaSub


(정식버전 출시 후)

리눅스 지원 기술검토가 필요한 경우 트라이얼 버전을 다운로드 받아 설치하시기 바랍니다.

 - RAD 스튜디오 트라이얼 다운로드 : http://devgear.co.kr/products/rad-studio/ (하단 무료 평가판 참조)


RAD 스튜디오 설치

설치 안내에 따라 설치합니다. 플랫폼 선택 시 Delphi Linux 64-bit Enterprise 항목을 선택합니다.


만약, 이미 설치했고 Delphi Linux 64-bit Enterprise 항목을 선택하지 않았다면, 

RAD 스튜디오 IDE 메인메뉴에서 "Tools > Manage Platforms..." 항목을 선택 해 항목을 추가선택 후 설치할 수 있습니다.


리눅스 머신에 PAServer 설치 및 실행

PAServer(Platform Assistant Server)는 RAD 스튜디오가 생성한 리눅스 실행파일을 리눅스 플랫폼에서 실행하고, 디버깅할 수 있도록 지원하는 소프트웨어입니다. RAD 스튜디오와 PAServer는 원격으로 연결되어 실행파일 전달 및 디버깅 정보를 주고 받아 윈도우 환경의 IDE에서 리눅스 실행파일을 구동하고 디버깅할 수 있도록 지원합니다.

리눅스에 PAServer 설치

1) PAServer 설치파일 복사

리눅스 PAServer 설치파일은 RAD 스튜디오 설치경로 하위의 PAServer 디렉토리에 제공합니다.


LinuxPAServer19.0.tar 파일을 리눅스 시스템으로 복사합니다.


2) 압축해제

터미널을 열고, LinuxPAServer19.0.tar파일이 복사된 경로로 이동합니다.

다음 명령어로 압축을 해제합니다.

tar –xvf LinuxPAServer19.0.tar

아래와 같이 압축해제 됩니다.



3) PAServer 실행

PAServer 설치 경로로 이동 후 paserver를 실행합니다.


비밀번호를 묻습니다. 임의의 비밀번호를 입력 후 엔터를 누릅니다.(RAD 스튜디오에서 연결 시 해당 비밀번호가 필요합니다.)

RAD 스튜디오에서 PAServer 연결 설정

PAServer IP/포트번호 확인

RAD 스튜디오와 PAServer 연결하기 위해서는 PAServer의 IP와 포트번호, 비밀번호가 필요합니다.

위에서 실행한 PAServer 대화창에서 "i" 입력 후 엔터키를 눌러 IP 주소를 확인합니다.

포트번호는 아래 그림과 같이 표시됩니다. 기본포트번호는 "64211"입니다.


RAD 스튜디오에서 PAServer 연결

RAD 서버에서 Connection Profile Manager 옵션을 실행합니다.(Tools > Options > Connection Profile Manager)

Add 버튼을 누르고, "Profile name" 항목에 접속정보의 명칭을 입력하고 Next >> 버튼을 누릅니다.


Remote machine 항목에 PAServer의 IP를 입력합니다.

Port number 항목에 PAServer 포트번호를 입력합니다.

Password 항목에 PAServer 실행 시 입력한 비밀번호를 입력합니다.

"Test Connection" 버튼을 눌러 연결을 확인하고, Finish 버튼을 눌러 완료합니다.


만약, 연결되지 않은 경우, PAServer가 설치된 리눅스 시스템과의 네트워크 환경을 검토하기 바랍니다.


RAD 스튜디오에서 리눅스 SDK 설정

RAD 스튜디오에서 SDK Manager(Tools > Options > SDK Manager)를 실행합니다.

Add 버튼을 누릅니다.

Select a platform 항목에서 "64-bit Linux"를 선택합니다.

Select a profile to connect 항목에서 위에서 추가한 연결을 선택합니다.

Select an SDK version 항목 확인 후 "OK" 버튼을 누릅니다.


아래와 같이 리눅스의 SDK를 로컬로 복사하는 작업이 진행됩니다.(몇분 정도 소요)

완료되면 Close 버튼을 눌러 완료합니다.

코드 작성 및 실행

프로젝트 생성

콘솔 애플리케이션 프로젝트를 생성합니다.(File > New > Other > Delphi Projects > Console Application)


샘플 코드 작성

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }

    WriteLn('Hello Linux');
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

타겟 플랫폼 선택

프로젝트 매니저에서 64-bit Linux 플랫폼을 추가합니다.(프로젝트 매니저 > Target Platforms > 오른쪽 클릭 > Add Platform > 64-bit Linux > OK)


빌드 및 실행

Run 버튼을 눌러 실행하면, Event Log에 아래와 같이 "Hello Linux" 메시지가 표시됩니다.

참고 링크



저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

험프리.김현수 험프리.김현수 Delphi/C++Builder

Out of memory 오류 해소 방안

2016.11.21 10:42

메모리 부족(Out of memory) 오류 해소 방안을 델파이 기준으로 설명합니다.

증상

윈도우즈 기반 애플리케이션 시작 또는 실행 중 Out of memory 예외(Exception)이 발생



원인

  • 데스크탑 힙 제한에 의한 메모리 부족
  • 메모리 누수(Leak)에 의한 메모리 부족
  • 과도한 메모리 사용에 의한 메모리 부족


    조치방법

    데스크탑 힙 제한에 의한 메모리 부족

    데스크탑 힙 제한에 의한 메모리 부족 오류가 발생할 수 있습니다.

    마이크로소프트 지원 페이지에서 레지스트리를 수정하는 해결 방법을 안내합니다.


    메모리 누수(Leak)에 의한 메모리 부족

    프로그램내에서 할당된 메모리를 사용 후 반환하지 않는 메모리 누수가 반복될 경우 메모리 부족이 발생합니다.


    델파이에서는 FastMM 메모리 관리자(2006 이후 기본 제공)의 정지 시 메모리 누수 보고 기능을 이용해 애플리케이션 종료 시 메모리 누수 보고를 받을 수 있습니다.


    종료 시 메모리 누수 보고 기능을 활성화 하려면

    • System.ReportMemoryLeaksOnShutdown 전역 변수를 True로 설정합니다.

    기타 자세한 내용은 아래 엠바카데로 기술문서를 참고하시기 바랍니다.


    과도한 메모리 사용에 의한 메모리 부족

    시스템 상의 메모리보다 과도한 메모리를 사용한 경우 메모리 부족 오류가 발생할 수 있습니다.


    이경우 작은 범위의 테스트에서 문제가 발생하지 않다가, 실사용 시 문제가 발생할 수 있습니다.

    보통 다수의 UI 컨트롤들을 갖는 화면 여러개를 동시에 표시하거나, 다수의 응용 프로그램을 동시에 실행하는 경우 발생할 수 있습니다.


    이 경우 구현상의 이슈보다는 운영상의 이슈이므로, 운영 중 사용자의 메모리 상태를 모니터링 하고, 동시에 표시할 수 있는 화면을 제한하는 등의 과도한 메모리 사용 방어 장치가 필요합니다.


    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    마우스 이벤트 캡쳐 - SetCapture, ReleaseCapture

    2016.09.28 17:10

    마우스 이벤트를 캡쳐해야 하는 경우 SetCapture(Win32 API)를 이용하면 됩니다.

    다 사용한 경우 ReleaseCapture로 해제합니다.



    아래 예제는

    1) 폼위에 패널 위치

    2) 폼과 패널은 각각 MouseMove 이벤트에서 로그 기록

    3) 패널에서 MouseDown 시 폼으로 SetCapture 시도 > 이후 패널 및 메모 위의 마우스 이벤트가 폼에서 발생

    4) MouseUp 시(폼에서 마우스 이벤트를 가져가 폼의 MouseUp이벤트에서 구현필요) ReleaseCapture로 캡쳐 해제

    procedure TForm2.FormCreate(Sender: TObject);
    begin
      FIsCaptured := False;
    end;
    
    procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Memo1.Lines.Add(Format('F> X: %d, Y: %d', [X, Y]))
    end;
    
    procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if FIsCaptured then
      begin
        Memo1.Lines.Add('Form> ReleaseCapture');
        ReleaseCapture;
      end;
    end;
    
    procedure TForm2.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      SetCaptureControl(Self);
    //  SetCapture(Self.Handle);
      Memo1.Lines.Add('Panel> Capture');
    
      FIsCaptured := True;
    end;
    
    procedure TForm2.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Memo1.Lines.Add(Format('P> X: %d, Y: %d', [X, Y]))
    end;
    
    procedure TForm2.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
      Memo1.Lines.Add('Panel> ReleaseCapture');
    end;



    샘플 : 

    SetCaptureReleaseCapture.zip


    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    TWICImage를 이용해 다양한 이미지 포맷의 파일을 불러오고 저장하기.

    2016.08.31 10:23


    TWICImage는 Microsoft Windows Imaging Component를 캡슐화 한 클래스로 다양한 이미지 포맷을 조작할 수 있습니다.


    사용법은 아래 샘플코드와 같이 TImage 컨트롤에서 파일을 로드하기 전에 TWICImage로 먼저 로드한 후 TImage에 할당하면 다양한 이미지 포맷을 TWICImage가 처리해 줍니다.

    (TWICImage는 RAD Studio 2010 부터 지원합니다.)


    procedure TForm2.btnImageLoadClick(Sender: TObject);
    var
      wic: TWICImage;
    begin
      if OpenDialog1.Execute then
      begin
        wic := TWICImage.Create;
        try
          wic.LoadFromFile(OpenDialog1.FileName);
          Image1.Picture.Assign(wic);
        finally
          wic.Free;
        end;
      end;
    end;
    
    procedure TForm2.btnImageSaveClick(Sender: TObject);
    var
      wic: TWICImage;
      filter: string;
      filename: string;
    begin
      wic := TWICImage.Create;
      try
        wic.Assign(Image1.Picture);
    
        case wic.ImageFormat of
        wifBmp:
          begin
            filter := '비트맵(*.bmp)|*.bmp';
            Filename := 'image.bmp';
          end;
        wifPng:
          begin
            filter := 'PNG(*.png)|*.png';
            Filename := 'image.png';
          end;
        wifJpeg:
          begin
            filter := 'JPEG(*.jpg)|*.jpg';
            Filename := 'image.jpg';
          end;
        wifGif:
          begin
            filter := 'GIF(*.gif)|*.gif';
            Filename := 'image.gif';
          end;
        else
          begin
            ShowMessage('지원하지 않는 이미지 포맷입니다');
            Exit;
          end;
        end;
    
        SaveDialog1.FileName := filename;
        SaveDialog1.Filter := filter;
        if SaveDialog1.Execute then
        begin
          wic.SaveToFile(SaveDialog1.FileName);
        end;
      finally
        wic.Free;
      end;
    end;

    다운로드

    WICImageSample.zip


    문단제목



    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    퀵레포트(Quick Report)에 사진 출력하기

    2016.08.01 17:34

    DBMS의 Blob 컬럼의 이미지 데이터를 퀵레포트 보고서에 출력하는 내용입니다.


    (추가)

     2016.09.02 : 미리보기에서 사진이 나오는데, 실제 인쇄 시 사진이 출력되지 않는 이슈해결 방안을 추가했습니다.



    쿽레포트에 사진을 출력하려면 TQRImage, TQRDBImage 2개의 컴포넌트를 이용할 수 있습니다.

    (TQRDBImage는 비트맵 데이터만 출력할 수 있습니다.)


    저는 JPEG, GIF, PNG 등을 지원하기 위해 TQRImage를 이용합니다.


    아래 델파이 샘플은 BOOK_THUMB(Blob 컬럼)의 데이터를 읽어 TQRImage에 표시하는 내용입니다.

    Blob 컬럼을 읽기 위해 TBlobField를 사용하고, TWICImage를 이용해 다양한 포맷을 지원합니다.

    (BLOB 컬럼에서 (이미지 등의)데이터 읽고 쓰기: http://blog.hjf.pe.kr/437)


    레코드 별로 이미지를 표시하기 위해 TFDQuery의 AfterScroll 이벤트에 이미지 불러오는 코드를 작성합니다.

      private
        { Private declarations }
        FWicImage: TWICImage;
        FMemoryStream: TMemoryStream;
      public
        { Public declarations }
      end;
    ... 중략 ...
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      FWicImage := TWICImage.Create;
      FMemoryStream := TMemoryStream.Create;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FWicImage.Free;
      FMemoryStream.Free;
    end;
    
    procedure TForm1.FDQuery1AfterScroll(DataSet: TDataSet);
    begin
      FMemoryStream.Clear;
      (FDQuery1.FieldByName('BOOK_THUMB') as TBlobField).SaveToStream(FMemoryStream);
      if FMemoryStream.Size = 0 then
        Exit;
      FWicImage.LoadFromStream(FMemoryStream);
      QRImage1.Picture.Assign(FWicImage);
    end;

    아래와 같이 보고서에 이미지를 출력할 수 있습니다.


    == 내용 추가 ==

     2016.09.02 : 미리보기에서 사진이 나오는데, 실제 인쇄 시 사진이 출력되지 않는 이슈해결 방안


    일부 프린터에서 고해상도 또는 크기가 큰 사진이 포함된 보고서가 출력되지 않아, 

    아래와 같이 AfterScroll 이벤트 핸들러의 코드를 수정해 해결했습니다.

    procedure TForm1.FDQuery1AfterScroll(DataSet: TDataSet);
    var
      bmp: TBitmap;
    begin
      FMemoryStream.Clear;
      (FDQuery1.FieldByName('BOOK_THUMB') as TBlobField).SaveToStream(FMemoryStream);
      if FMemoryStream.Size = 0 then
        Exit;
    
      FWicImage.LoadFromStream(FMemoryStream);
    
       // wic 이미지를 16비트 비트맵으로 변경
      bmp := TBitmap.Create;
      try
        bmp.PixelFormat := pf16bit; // pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit
        bmp.Assign(FWicImage);
    
        // QRImage에 크기를 줄여 그리기
        QRImage1.Picture.Bitmap.Width := QRImage1.Width;
        QRImage1.Picture.Bitmap.Height := QRImage1.Height;
        QRImage1.Picture.Bitmap.Canvas.StretchDraw(Rect(0, 0, QRImage1.Width, QRImage1.Height), bmp);
      finally
        bmp.Free;
      end;
    end;


    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    퀵레포트 보고서 엑셀로 내보내기(저장하기)

    2016.08.01 16:08

    (Quick Report 5.0.6 버전으로 작성된 내용입니다.)

    퀵레포트(QuickReport)로 작성한 보고서를 저장해야 하는 경우 퀵레포트 필터를 통해 다양한 포맷을 추가할 수 있습니다.



    위 필터 중 TQRXLSXFilter를 통해 엑셀로 보고서를 내보내기(저장)할 수 있습니다.



    하지만 엑셀로 내보내기 기능을 제공하려면 XLColumn 속성을 설정해야 합니다.

    XLColumn 속성은 엑셀에 표시되는 컬럼 순서로, 인쇄가능한 퀵레포트 컴포넌트들(TQRLabel, TQRDBText 등의 TQRPrintable 클래스를 상속받는 컴포넌트 들)은 모두 XLColumn 속성을 갖고 있습니다.(다시 말해 대부분의 컨트롤의 XLColumn 속성을 설정해야 합니다.)


    XLColumn 속성은 다음 특징을 참고해 신중히 설정해야 합니다.

    1. 동일한 밴드(TQRBand)에서 Top 속성의 값이 같은 경우 엑셀의 같은 행에 표시된다.
    2. 만약, Top 속성이 같은 컨트롤이 있을 경우 중복 에러를 발생해 엑셀 내보내기 기능이 동작하지 않는다.


    다음과 같이 XLColumn을 설정해야 합니다.



    보고서 미리보기 후 저장 시 XLSX spreadsheet 파일 형식이 추가되고, 


    저장하면 아래와 같이 엑셀로 저장됩니다.



    주의!!!

    Top 속성이 같은 컨트롤이 있을 경우 아래와 같은 오류를 발생하고, 엑셀 내보내기 기능을 동작하지 않습니다.

    아래와 같은 오류가 발생한다면 레포트 화면의 컨트롤의 XLColumn 속성을 검토하시기 바랍니다.

    (Duplicate cell reference detected - please check 'XLColumn' properties)



    관련링크



    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    1. Blog Icon
      이현국

      혹시 delphi 안드로이드 구글 지도 맵 은 강의 안하시나요..?

      소스코딩을 찾아보아도 어떻게 해야 할지 모르겠어요!

    VCL 스타일이 적용된 앱을 다른 프로세스에 넣을때 메인메뉴가 클릭되지 않는 이슈 해결방법

    2016.05.27 13:30

    다음 글을 참고하면 다른 프로세스의 화면을 특정 영역(패널 등)에 넣을 수 있습니다.

    [Delphi/C++Builder] - [VCL] 다른 프로세스의 폼을 패널등에 넣기


    그런데, VCL 스타일이 적용된 프로세스를 위 방법으로 진행할 경우 메인메뉴가 클릭되지 않는 증상이 발생합니다.


    이 경우 VCL 스타일이 적용된 프로젝트에서, 메인폼의 StyleElements 속성의 seBorder 항목을 False로 변경 후 다시 컴파일 하면 메인메뉴 클릭이 정상 동작합니다.

    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    [라이브바인딩] 콤보박스에 목록표시, 선택 값 반영하기

    2016.04.28 15:03

    콤보박스에 목록을 표시하고, 선택한 항목의 키값을 다른 데이터셋에 적용하는 방법입니다.

    DB Controls의 DBLookupComboBox의 기능을 라이브바인딩으로 구현하는 내용입니다.


    아래 라이브바인딩 내용은 사원 테이블(qryMember)의 팀정보(MEM_TEAM_SEQ)를 콤보박스에서 선택하도록 구현한 것입니다.


    1. 콤보박스 목록 표시할 내용 - 팀명(DPT_TEAM)을 목록으로 표시
    2. 콤보박스 선택한 값을 반영 - 선택한 항목을 MEM_TEAM_SEQ에 반영(Item.LookupData와 연결된 필드의 값)
    3. 목록의 키값(LookupData) - 목록의 키값으로 사용할 필드를 Item.LooupData와 연결)

    위와 같이 적용 시 콤보박스에 팀정보가 표시되고, 콤보박스를 선택하면 사원정보의 팀정보가 변경됩니다.

    하지만, 콤보박스 변경 시 실시간으로 사원정보가 갱신(Refresh)되지 않고, 다른 레코드를 선택할 때 변경됩니다.

    만약, 실시간으로 변경(콤보박스 변경 시 바로 사원정보의 소속팀 변경)이 필요하면 위의 그림과 같이 2번 링크를 선택 후 Track 속성을 True로 변경하면 실시간으로 반영됩니다.


    참고링크



    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder 라이브바인딩

    delphi-markdown(델파이 마크다운 라이브러리) 소개

    2016.04.21 17:10
    마크다운 문법을 해석해 html로 반환하는 라이브러리를 발견해 공유합니다.

    마크다운은? (위키백과 참고)

    delphi-markdown

    delphi-markdown은 마크다운(평문)을 html로 변환해 반환해주는 델파이 라이브러리로 그래함 그리브(Grahame Grieve)가 공개한 오픈소스입니다.(그래함 그리브는 세계적인 의료정보 표준화 전문가라고 합니다. FHIR 관련 프로젝트도 함께 오픈되어 있으니 의료계 관련자 분들은 참고하면 좋겠습니다.)


    VCL 프로젝트에서는 해당 라이브러리를 다운로드 후 바로 (uses 절에)추가해 사용할 수 있습니다.


    이 라이브러리는 RTL위주로 작성되어 약간 수정하면 모바일(파이어몽키) 프로젝트에서도 동작합니다.(아래는 아이폰6 플러스에서 실행한 모습입니다.)

    파이어몽키 프로젝트에서 사용하려면 아래의 링크를 참고해 1-based 문자열 기반으로 작성된 코드를 0-bassed 문자열도 지원하도록 수정해야 합니다.


    제가 테스트한 코드와 모바일에서 동작하도록 수정한 코드(기능확인을 위해 테스트 없이 문제되는 부분만 테스트 했습니다.)는 참고(만)하시기 바랍니다.^^


    delphi-markdown-master.zip


    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    [VCL] 다른 프로세스의 폼을 패널등에 넣기

    2016.03.07 15:52

    프로세스를 생성하고 프로세스의 폼을 내 애플리케이션의 특정 영역(패널 등)에 넣도록 하는 코드입니다.


    1, 아래 그림과 같이 메모장(notepad.exe)을 실행해 Panel에 넣어봤습니다. 

    2, 프로세스의 폼(메모장)의 테두리를 없앴습니다.

    3, 창 크기가 변경될때 프로세스의 폼 크기를 변경하도록 했습니다.(비동기)


    EmbedFormSource.zip


    uses
      Winapi.ShellAPI;
    
    // 메모장 실행 / Embed  시키기
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ExecuteFile : string;
      SEInfo: TShellExecuteInfo;
      RetryCount: Integer;
    begin
      ExecuteFile:='c:\Windows\notepad.exe';
    
      FillChar(SEInfo, SizeOf(SEInfo), 0) ;
      SEInfo.cbSize := SizeOf(TShellExecuteInfo) ;
      with SEInfo do
      begin
        fMask := SEE_MASK_NOCLOSEPROCESS;
        Wnd := Panel1.Handle;
        lpFile := PChar(ExecuteFile) ;
        nShow := SW_HIDE;
      end;
      if ShellExecuteEx(@SEInfo) then
      begin
        // 실행 후 바로 찾을 수 없어 윈도우 핸들 찾기 재시도
        RetryCount := 0;
        repeat
          FAppWnd := FindWindow(PChar('notepad'), PChar('제목 없음 - 메모장'));
          Sleep(100);
          Inc(RetryCount);
        until (FAppWnd <> 0) or (RetryCount > 10);
    
        // 부모설정, 테두리제거, 최대화
        if FAppWnd <> 0 then
        begin
          WinAPI.Windows.SetParent(FAppWnd, SEInfo.Wnd);
          SetWindowLong(FAppWnd, GWL_STYLE,
                  GetWindowLong(Handle, GWL_STYLE)  // 기존 스타일에서
              and not WS_BORDER                     // 크기조정 테두리 - 제거
              and not WS_THICKFRAME                 // 두꺼운 프레임 - 제거
              and not WS_DLGFRAME                   // 이중 테두리 - 제거
          );
          ShowWindow(FAppWnd, SW_SHOWMAXIMIZED);
        end;
      end;
    end;
    
    // 메모장 닫기(프로세스 종료)
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      if FAppWnd <> 0 then
      begin
        PostMessage(FAppWnd, WM_Close, 0, 0);
        FAppWnd := 0;
      end;
    end;
    
    // 메모장 크기 조절
    procedure TForm1.Panel1Resize(Sender: TObject);
    begin
      if IsWindow(FAppWnd) then
        SetWindowPos(FAppWnd, 0, 0, 0, Panel1.Width, Panel1.Height, SWP_ASYNCWINDOWPOS);
    end;


    참고링크



    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    1. 정말 감사합니다. 올바른 사용법을 찾았네요

      ActionList가 dll폼에서 제대로 작동하지 않아 exe를 패널안에 만들어 넣어보려고 하던중이었습니다.

    RAD Studio IDE에서 SVN 사용하기 + TortoiseSVN 사용하기

    2016.02.29 16:26

    소스코드 버전관리 시스템으로 SVN을 사용하기 위해 SVN 서버 소프트트웨어를 서버에, 사용자 PC에 SVN 클라이언트 소프트웨어를 설치해야 합니다. 


    이 글에서는 RAD Studio IDE에 내장된 SVN 클라이언트 플러그인을 이용해 SVN 서버 저장소에 파일을 등록(Import)하고 변경내역을 가져오고(Update), 작업내용을 저장(Commit)하는 내용을 설명합니다.

    (RAD Studio에는 SVN, Git, Mercurial 3가지 버전관리 클라이언트 기능을 제공합니다.)


    RAD Studio에 내장된 SVN 클라이언트 플러그인

    SVN 저장소를 준비합니다.(만약, SVN 저장소가 없다면 다음 글을 참고해 SVN 서버 설치 후 저장소를 추가합니다. - http://blog.hjf.pe.kr/417)


    SVN 저장소에 추가하기 - Add to Version Control(SVN: Import)

    작성중인  소스코드를 SVN 서버의 중앙 저장소에 저장합니다. 이후 프로젝트 파일을 열고 소스코드를 변경 하구 중앙저장소에 반영(Commit)할 수 있습니다.
    1. 새로운 프로젝트를 추가(또는 작업 중인 프로젝트 열기) 합니다.
    2. 프로젝트 매니저에서 프로젝트를 우측 마우스 클릭 후 "Add to Version Control" 메뉴를 선택합니다.
    3. 버전관리 시스템 중 Subversion을 선택 합니다.
    4. Import 팬이 표시됩니다.
    5. URL of repository: 우측의 [...] 버튼을 누릅니다.
    6. SVN 저장소 주소를 입력 후 [Load] 버튼을 눌러 저장소와 연결합니다.
    7. 좌측 트리에서 저장할 디렉토리를 선택 후 [OK] 버튼을 누릅니다.
    8. [Import] 버튼을 눌러 서버 저장소에 저장합니다.

    RAD Studio 10 시애틀에서 테스트 중 중앙저장소에 연결된 프로젝트에 프로젝트를 추가한 경우 [Import] 버튼이 비활성화 되는 현상이 발생했습니다.

    이 경우 별도의 TortoiseSVN 등의 클라이언트 프로그램을 이용해 Import 작업을 진행하면 Commit / Upate 등의 작업을 IDE에서 이어서 진행할 수 있습니다.

    SVN 저장소의 소스코드 가져오기 - Open From Version Control(SVN: Check out)

    SVN 서버의 중앙저장소에 저장된  소스코드를 가져와 편집 후 작업내용을 중앙저장소에 저장할 수 있습니다.

    1. RAD Studio IDE에서 모든 파일을 닫습니다.
    2. File > Open From Version Control... 메뉴를 선택합니다.
    3. 버전관리 시스템 중 Subversion을 선택합니다.
    4. 저장소 경로(URL of Repository)와 저장할 로컬 경로(Destination)를 입력 후 [OK] 버튼을 클릭합니다.
    5. 다운로드 작업이 진행되며 완료 후 프로젝트를 선택해 열수 있습니다.

    저장소에 작업내용 적용하기 / 중앙저장소 변경내역 가져오기 - Commit / Update

    SVN 서버의 중앙저장소와 연결된 프로젝트는 작업내용(변경된 내용)을 중앙저장소에 적용하는 커밋(Commit)과 다른 사용자가 변경한 변경내역을 가져오는 Update 작업을 수행할 수 있습니다.

    1. SVN 서버의 저장소와 연결된 프로젝트를 엽니다.
    2. 프로젝트 매니저에서 우측 마우스 클릭 후 Subversion > Commit 메뉴를 선택합니다.
    3. Commit 팬이 표시됩니다.
    4. 중앙저장소에 저장할 파일을 선택(체크박스 선택)합니다.
    5. 변경한 작업에 대한 설명을 다른 사용자가 알아볼 수 있도록 작성합니다.
    6. [Commit] 버튼을 눌러 중앙저장소에 반영합니다.
    7. 프로젝트 매니저에서 우측 마우스 클릭 후 Subversion > Update 메뉴를 선택해 중앙저장소의 변경된 내역을 받아옵니다.

    기타 더 많은 기능을 엠바카데로 기술문서를 참고해서 익힐 수 있습니다.

    SVN 클라이언트 프로그램 이용

    RAD Studio IDE에서 SVN을 제공하지 않는 버전을 사용한다면 별도로 SVN 클라이언트 프로그램을 설치해서 RAD Studio 소스코드를 버전관리 할 수 있습니다.

    아래 링크를 참고해 원하는 플랫폼과 원하는 SVN 소프트웨어를 설치할 수 있습니다.

    그 중 TortoiseSVN의 경우 윈도우의 기본 탐색기 팝업메뉴를 이용해 SVN 클라이언트 기능을 활용할 수 있습니다.



    Tortoise SVN 사용법은 아래 링크들에서 자세히 확인해보시기 바랍니다.


    관련자료

    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    SVN 서버 설치하기 - Visual SVN 이용

    2016.02.29 14:40

    소스코드 버전관리 시스템으로 SVN을 사용하기 위해 SVN 서버 소프트트웨어를 서버에, 사용자 PC에 SVN 클라이언트 소프트웨어를 설치해야 합니다.


    이 글에서는 SVN 서버 소프트웨어를 서버에 설치하는 내용을 설명합니다.


    SVN 서버 소프트웨어는 소스코드 버전관리 해야하는 작업자들이 접속할 수 있는 서버 머신에 설치해야 합니다.

    예를들어, 팀내에서 소스코드를 버전관리 해야하는 경우 팀내에서 운영 중인 사내의 팀서버에 설치하는 것이 좋습니다.

    만약, 외부와 협업이 필요한 경우 IDC 등에 SVN 서버 소프트웨어를 설치하면 외부 인원과도 소스코드 버전관리 할 수 있습니다.


    SVN 서버 소프트웨어

    SVN 서버 소프트웨어는 오픈 소프트웨어 부터 상용 소프트웨어까지 다양하게 선택할 수 있습니다.

    아래 링크를 참고해 원하는 플랫폼과 원하는 SVN 서버 소프트웨어를 설치할 수 있습니다.

    ❑ Visual SVN 설치

    저는 윈도우에서 손쉽게 설치 및 사용할 수 있는 Visual SVN Server을 설치했습니다.

    라이선스

    Visual SVN Server는 기능에 따라 Standard와 Enterprise로 구분되며 Standard는 회사에서도 무료로 설치(Avaliable for commercial use)할 수 있습니다.

    설치

    본인의 환경에 따라 32 bit 또는 64 bit 설치 파일을 받아 설치 파일 실행 후 안내에 따라 설치 합니다.

    설치가 완료되면 시작 메뉴에서 "VisualSVN Server Mnager"를 찾아 실행하면 아래 화면이 표시됩니다.

    ❑ 저장소 및 사용자 생성

    SVN  서버로 사용하기 위해서는 소스코드 저장소  생성과 사용자를 추가해야 합니다.(이 작업은 지정된 관리자가 하게 됩니다.)

    저장소 생성

    소스코드 버전관리가 필요한 프로젝트 또는 서비스 별로 저장소를 생성합니다.

    왼편 트리메뉴에서 Repositories 항목  선택 후 오른쪽 팬에서 우측 마우스 버튼을 이용해 저장소를 생성(Create New Repository...)합니다.


    저장소 유형, 저장소 이름, 저장소 구조를 선택합니다.

    접근권한(접근 권한은 사용자 추가 후 다시 조정합니다.) 확인 후 저장소 생성을 마칩니다.


    사용자 추가

    왼쪽 트리메뉴에서 Users 메뉴 선택 후 오른쪽 팬에서 사용자를 추가(Create user)합니다.


    저장소의 속성(Properties) 창의 Security 탭에서 접근 권한을 사용자 별로 조정합니다.

    기타 참고사항

    기타 추가적인 내용은 아래 링크를 참고해 확인하시기 바랍니다.

    관련자료



    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    런타임 오브젝트 인스펙터(ObjectDebugger) 오픈소스 소개

    2016.02.25 11:23

    실행 시점에 폼, 컴포넌트의 속성과 이벤트, 데이터를 확인하고, 일부 속성을 변경할 수 있는 런타임 오브젝트 인스펙터(ObjectDebugger) 컴포넌트와 소스코드가 공개되었습니다. 해당 컴포넌트는 VCL 용입니다.

    해당 컴포넌트의 소스코드는 런타임에서 동적으로 속성을 변경하는 기능 구현이 필요한 경우, RTTI 학습이 필요한 경우 참고하면 좋을 것 같습니다.






    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    [시애틀] 비콘펜스(BeaconFence)등 새로운 오픈 소스와 컴포넌트 패키지를 IDE에서 직접 확보할 수 있습니다.

    2015.09.07 10:27

    비콘펜스(BeaconFence)등 새로운 오픈 소스와 컴포넌트 패키지를 IDE에서 직접 확보할 수 있습니다.

    겟잇(GetIt) 라이브러리 확장


    Tools > Getit Package Manager... 메뉴로 이용할 수 있습니다.


    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    [XE8] 코딩 중 이유없이 델파이 IDE가 응답없음 되는 경우 참고사항

    2015.06.26 14:54

    코딩 중 특별한 이유없이 IDE가 응답없음 되면 카스탈리아 기능을 끄고 진행해 보세요.

    (저도 안드로이드 타겟으로 개발 시 특정 라인에서 꺽쇠주석({})을 추가할 때 델파이 IDE가 응답없음이 발생했고, 카스탈리아 기능을 끄니 재현되지 않네요.)


    아래 그림과 같이 바로가기 뒤에 /NOCASTALIA 옵션을 추가하면 카스텔리아 기능이 동작하지 않습니다.

    (파이어몽키 카페에서 오실장님 글을 참고했습니다. - http://cafe.naver.com/delphifmx/983)



    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    델파이 프레임워크(VCL/FMX) 소스코드를 직접 수정하는 방법

    2015.06.25 18:23

    개발을 하다보면 프레임워크가 제공하는 기능을 약간 수정하고 싶거나, 버그를 수정하고 싶은 경우가 있습니다. 아래 내용을 참고해 델파이 프레임워크 소스코드를 수정해서 사용하기 바랍니다.(VCL과 파이어몽키 모두 사용가능합니다.)

    (주의 : 잘못 수정했을 경우 많은 영역에서 사이드 이펙트가 발생 할 수 있으므로, 정확히 이해한 경우에 한해 프레임워크 소스를 수정하기 바랍니다.)


    만약, VCL 또는 파이어몽키 버그를 발견했다면 혼자만 수정해서 사용하지 말고 제품에 반영될 수 있도록, 엠바카데로에 레포팅해주시기 바랍니다.^^

    (엠바카데로 퀄리티 포털 이용방법 안내)

    델파이 프레임워크 소스 수정방법

    1, 프로젝트 경로로 소스파일 복사

    수정하고 싶은 소스파일(*.pas)을 프로젝트 파일(*.dproj)과 동일한 경로에 복사합니다.

    소스파일은 델파이 설치경로 하위 Source 디렉토리에 있습니다.

    (XE8의 경우 : C:\Program Files (x86)\Embarcadero\Studio\16.0\source)    

    2, 소스코드 수정

    1번에서 복사한 소스파일을 File > Open 메뉴로 열어, 수정합니다.(프로젝트에 파일을 추가해도 됩니다.)

    3, 컴파일

    컴파일 시 델파이는 프로젝트 파일(*.dproj)과 같은 경로의 소스코드를 제일먼저 참조하기 때문에 위에서 수정한 소스파일이 컴파일 되어 실행됩니다.(당연히 디버깅도 가능합니다.)



    위의 내용으로 수정 시 해당 프로젝트에만 적용됩니다.

    너무 많은 부분을 수정하면 델파이 버전 업데이트 시 고생할 수 있습니다.

    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    [XE8] RAD Studio XE8을 지원하는 외부 컴포넌트와 도구

    2015.05.28 11:41

    델파이 XE8과 C++빌더 XE8을 지원하는 오픈소스 컴포넌트와 도구, 플러그인입니다.

    ❑ JCL / JVCL

    다양한 기능을 제공하는 델파이, C++빌더 개발자들에게 익숙한 JCL/JVCL 컴포넌트

    • JCL - https://github.com/project-jedi/jcl
    • JVCL - https://github.com/project-jedi/jvcl

    ❑ IDE Fix Pack

    IDE를 최적화해주는 플러그인

    ❑ GExperts

    IDE에 유용한 기능을 추가 해주는 플러그인

    ❑ DDevExtensions

    IDE 기능을 확장해주는 플러그인

    ❑ CnPack

    IDE 기능을 확장해 주는 플러그인


    RAD Studio XE8 추가기능인 Getit..(패키지 관리자)에서 엠바카데로가 호스팅하는 컴포넌트를 찾아 설치할 수 있습니다.

    ❑ Getit(패키지 관리자)


    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    JVCL(JCL) 써드파티 컴포넌트 최신버전을 받기

    2015.05.27 16:13


    JVCL/JCL 컴포넌트는 오픈소스로 진행되는 써드파티 컴포넌트로, 델파이 6 부터 XE8(2015.5월 기준)까지 지원합니다.

    (기존 소스포지에서 깃허브로 둥지를 옮긴듯해요.)

    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder

    델파이/C++빌더에 TServerSocket, TClientSocket 등록하기

    2015.03.24 10:40

    TServerSocket과 TClientSocket은 기본적으로 감춰져 있어 패키지 등록 후 사용할 수 있습니다.

    1. RAD Studio > Component > Install Packages
    2. [Add] 버튼 클릭
    3. (RAD Studio 설치 경로)\bin 으로 이동 후 dclsockets(버전숫자).bpl 선택
      • XE7 기준 경로 : C:\Program Files (x86)\Embarcadero\Studio\15.0\bin
      • XE7 기준 파일명 : dclsockets210.bpl
    4. [OK] 버튼 클릭

    컴포넌트 팔랫트의 Internet 카테고리에 TServerSocket, TClientSocket이 등록됩니다.


    저작자 표시 비영리 동일 조건 변경 허락
    신고
    크리에이티브 커먼즈 라이선스
    Creative Commons License

    험프리.김현수 험프리.김현수 Delphi/C++Builder