Search results for 'Delphi/C++Builder'

  1. 2016.05.27 -- VCL 스타일이 적용된 앱을 다른 프로세스에 넣을때 메인메뉴가 클릭되지 않는 이슈 해결방법
  2. 2016.04.28 -- [라이브바인딩] 콤보박스에 목록표시, 선택 값 반영하기
  3. 2016.04.21 -- delphi-markdown(델파이 마크다운 라이브러리) 소개
  4. 2016.03.07 -- [VCL] 다른 프로세스의 폼을 패널등에 넣기 (1)
  5. 2016.02.29 -- RAD Studio IDE에서 SVN 사용하기 + TortoiseSVN 사용하기
  6. 2016.02.29 -- SVN 서버 설치하기 - Visual SVN 이용
  7. 2016.02.25 -- 런타임 오브젝트 인스펙터(ObjectDebugger) 오픈소스 소개
  8. 2015.09.07 -- [시애틀] 비콘펜스(BeaconFence)등 새로운 오픈 소스와 컴포넌트 패키지를 IDE에서 직접 확보할 수 있습니다.
  9. 2015.06.26 -- [XE8] 코딩 중 이유없이 델파이 IDE가 응답없음 되는 경우 참고사항
  10. 2015.06.25 -- 델파이 프레임워크(VCL/FMX) 소스코드를 직접 수정하는 방법
  11. 2015.05.28 -- [XE8] RAD Studio XE8을 지원하는 외부 컴포넌트와 도구
  12. 2015.05.27 -- JVCL(JCL) 써드파티 컴포넌트 최신버전을 받기
  13. 2015.03.24 -- 델파이/C++빌더에 TServerSocket, TClientSocket 등록하기
  14. 2015.03.06 -- 웹사이트의 인증서 오류를 무시하고 http 결과 조회하기(WinInet 이용)
  15. 2015.03.02 -- [VCL] 에디트에 숫자만 입력, 콤마찍기
  16. 2015.02.13 -- [VCL] 에디트/버튼의 다양한 속성 소개
  17. 2015.02.09 -- FieldByName 사용팁 - 사악신님의 글
  18. 2015.02.03 -- [VCL] TaskDialog 컴포넌트 소개
  19. 2015.01.21 -- [컴포넌트 소개] TWebUpdate - 업데이트 프로그램 제작 컴포넌트/지원 툴(TMS Software)
  20. 2015.01.13 -- (문서)프로그래밍 언어 기초 - 델파이와 C++

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

2016.05.27 13:30

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

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


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


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

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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로 변경하면 실시간으로 반영됩니다.


참고링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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


저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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;


참고링크



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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 사용법은 아래 링크들에서 자세히 확인해보시기 바랍니다.


관련자료

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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 탭에서 접근 권한을 사용자 별로 조정합니다.

기타 참고사항

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

관련자료



저작자 표시 비영리 동일 조건 변경 허락
신고

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

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

2016.02.25 11:23

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

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






저작자 표시 비영리 동일 조건 변경 허락
신고

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

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

2015.09.07 10:27

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

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


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


저작자 표시 비영리 동일 조건 변경 허락
신고

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

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

2015.06.26 14:54

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

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


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

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



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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)과 같은 경로의 소스코드를 제일먼저 참조하기 때문에 위에서 수정한 소스파일이 컴파일 되어 실행됩니다.(당연히 디버깅도 가능합니다.)



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

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

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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(패키지 관리자)


저작자 표시 비영리 동일 조건 변경 허락
신고

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

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

2015.05.27 16:13


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

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

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 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이 등록됩니다.


저작자 표시 비영리 동일 조건 변경 허락
신고

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

웹사이트의 인증서 오류를 무시하고 http 결과 조회하기(WinInet 이용)

2015.03.06 13:37

고객사에서 웹서비스 연동 시 아래와 같이 인증서가 잘못된 경우 무시할 수 있는 방법을 요청해 공유합니다.


1, 서버 인증서 오류 내용 

한글 : 이 웹 사이트의 보안 인증서에 문제가 있습니다 

영문 : There is a problem with this website's security certificate - http://support.microsoft.com/kb/931850/ 


2, 영문으로 검색 시 아래와 같은 키워드를 찾았습니다. 

WINHTTP_OPTION_SECURITY_FLAGS 

SECURITY_FLAG_IGNORE_UNKNOWN_CA 

SECURITY_FLAG_IGNORE_CERT_CN_INVALID 

SECURITY_FLAG_IGNORE_CERT_DATE_INVALID 

(https://msdn.microsoft.com/en-us/library/windows/desktop/aa384066(v=vs.85).aspx


위의 플래그들이 잘못된 인증서를 무시하라는 옵션설정으로 보입니다. 


3, 위 보안 플래그를 설정하는 데모 

http://www.nldelphi.com/showthread.php?39901-Bad-cipher-melding 

http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_26824117.html

위 링크를 참고해 첨부파일의 샘플을 만들어 보았습니다. 

주요 코드는 아래와 같으며 WinInet을 이용하기 위해 uses 절에 "Winapi.WinInet"를 추가해야 합니다.

ReqFlags := ReqFlags
              or SECURITY_FLAG_IGNORE_UNKNOWN_CA
              or SECURITY_FLAG_IGNORE_CERT_CN_INVALID
              or SECURITY_FLAG_IGNORE_CERT_DATE_INVALID
              or SECURITY_FLAG_IGNORE_REVOCATION;
  // Set new flags
  if not(InternetSetOption(hReq, INTERNET_OPTION_SECURITY_FLAGS, @ReqFlags, dwSize)) then begin
    // Get error code
    dwError := GetLastError;
    // Failure
    MessageBox(0, PChar(IntToStr(dwError)), PChar('Confirm'), MB_OK or MB_ICONINFORMATION);
  end;


4, 테스트 & 결과

DelphiIgnoreUnknownCA.zip


첫번째 버튼은 TIdHttp 컴포넌트로 https를 호출하고 

두번째 버튼은 WinInet을 이용했습니다. 


아쉽게도 인증서 오류가 발생한 환경이 없어 고객에게 테스트 요청했습니다. 결과가 오거나 테스트 환경을 찾게되면 테스트 후 결과를 추가하겠습니다.(기본 동작만 https를 제공하는 facebook에서 확인한 상태입니다.)

===============================

[테스트 결과 추가]

고객사에서는 Release 모드인 경우 통과 Debug 모드인 경우 3회의 통신 오류 후 응답 수신되었다는 결과를 받았습니다.

(하지만, 고객사의 내부보안이 강력해 보안 이슈도 고려해야하는 결과였습니다.)

저작자 표시 비영리 동일 조건 변경 허락
신고

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

[VCL] 에디트에 숫자만 입력, 콤마찍기

2015.03.02 16:05

VCL 에디트(TEdit)의 NumbersOnly 속성을 이용하면 컨트롤에 숫자만 입력받도록 구현할 수 있다는 것 잘 아실텐데요.이번 글에서는 숫자 입력 시 콤마를 자동추가할 수 있도록 구현한 내용 공유합니다.


기능은 2가지입니다.

  • 키입력 시 3자리마다 콤마 추가(e.g. 123,456,789,012)
  • 에디트에서 순수 숫자만 읽고 쓰기(PlainText 속성 추가)

구현은 여러폼에서 uses에 추가하기만 하면 동작하도록 별도의 유닛으로 만들었습니다.

unit Vcl.EditExtends;

interface

uses
  Vcl.StdCtrls, Vcl.Controls, System.Classes;

type
  TEdit = class(Vcl.StdCtrls.TEdit)
  private
    function GetPlainText: string;
    procedure SetPlainText(const Value: string);
  protected
    procedure KeyUp(var Key: Word; Shift: TShiftState); override;
  public
    property PlainText: string read GetPlainText write SetPlainText;
  end;

implementation

uses
  SysUtils;

{ TEditEx }

procedure TEdit.KeyUp(var Key: Word; Shift: TShiftState);
var
  S: string;
begin

  inherited;

  S := Text;
  S := S.Replace(',', '').Replace('.', '');
  Text := FormatFloat('#.###,##', StrToFloatDef(S, 0));
  selStart := Length(Text) + 1;
end;

function TEdit.GetPlainText: string;
var
  S: string;
begin
  S := Text;
  Result := S.Replace(',', '').Replace('.', '');
end;

procedure TEdit.SetPlainText(const Value: string);
var
  Key: Word;
begin
  Text := Value;
  KeyUp(Key, []);
end;

end.

NumbersOnly.zip


사용법은 

  1. 폼에 Edit 컴포넌트를 추가하고 Vcl.EditExtends를 상단(interface) uses 절에 추가합니다.(Vcl.StdCtrls 뒤에 Vcl.EditExtends가 추가되야 합니다.)
  2. 키입력시 콤마 추가는 자동으로 동작합니다.
  3. 순수 숫자 넣고 읽기는 PlainText 메소드를 이용할 수 있습니다.
기타 필요한 기능 추가해서 사용하시기 바랍니다.(알려주시면 기능을 추가해서 올리겠습니다.)


저작자 표시 비영리 동일 조건 변경 허락
신고

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

[VCL] 에디트/버튼의 다양한 속성 소개

2015.02.13 10:27

VCL 기본 컴포넌트 중 가장 많이 사용하는 에디트(TEdit), 버튼(TButton)의 다양한 속성을 소개합니다. 

대부분 아는 속성일테지만 항상 사용하는 기본 속성만 사용하는 분들은 이 기회에 다양한 속성 사용해 보세요.


❑ 에디트 텍스트 정렬

Alignment 속성 선택(taCenter, taLeftJustify, taRightJustify)으로 텍스트의 위치를 지정할 수 있습니다.

❑ 에디트 텍스트 힌트(콤보박스도 가능)

TextHint 속성을 이용해 Text가 비어있으면 입력항목의 설명을 배경으로 표시할 수 있습니다.


콤보박스도 항목(Items)와 무관하게 설명을 표시합니다.

❑ 에디트 숫자만 입력 / 비밀번호 문자

NumbersOnly 속성으로 숫자만 입력하도록 강요합니다.

PasswordChar에 '■'를 입력하면 해당 문자로 비밀번호가 표시됩니다.

❑ 에디트 대소문자 변경(메모 포함)

CharCase 속성(ecLowerCase, ecNormal, ecUpperCase)을 변경해 대소문자로 입력 받을 수 있습니다.(아이디나 이메일 등의 필드에서 유용할 것 같네요.)

❑ 버튼 속성

권한상승 아이콘 표시

ElevationRequired 속성을 True로 지정 시 권한 상승 아이콘이 표시됩니다.(권한상승 동작은 별도 구현해야 합니다.)


버튼 스타일

Style 속성을 변경(bsCommandLink, bsPushButton, bsSpliteButton)해 커맨드 링크 방식과 분할 버튼 방식으로 표시할 수 있습니다.

분할버튼은 TPopupMenu 컴포넌트를 추가하고 버튼의 DropDownMenu에 연결해 사용할 수 있습니다.

❑ 데모 프로젝트 소스코드


관련 글



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Delphi/C++Builder TButton, TEdit, vcl

FieldByName 사용팁 - 사악신님의 글

2015.02.09 17:44

FieldByName('fieldName').AsString과 같이 많이 사용하시죠? 웹서핑 중 사악신님 블로그에서 FieldByName 사용 팁을 발견해 공유합니다.


FieldByName 호출 시 수행되는 과정을 파해치고 대안을 제시해 줍니다. 짧으면서 좋은 팁이네요.


저작자 표시 비영리 동일 조건 변경 허락
신고

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

[VCL] TaskDialog 컴포넌트 소개

2015.02.03 14:04

TTaskDialog 컴포넌트

작업에 대한 소개와 다양한 옵션으로 다중작업 중 선택할 수 있는 TTaskDialog 컴포넌트를 소개합니다.

아래와 같이 다양한 정보와 선택지(RadioButton, CommandLink, 버튼)를 제공하고 입력 받을 수 있습니다.

선택한 버튼에 대한 정보는 ModalResult 속성으로 버튼번호를 알아 옵니다.

❑ 기본 정보

Caption, Text, Title 속성으로 작업에 대한 기본 정보를 설정할 수 있습니다.

❑ 자세한 정보

ExpandedText, ExpandButtonCaption 속성으로 추가정보를 제공합니다. 추가정보는 기본으로 감추고 자세한 정보 보기 버튼을 누르면 자세한 내용이 작업설명 하단에 표시됩니다.

❑ 버튼

CommonButtons 속성을 통해 확인, 예, 아니오, 다시시도, 취소, 닫기 버튼을 표시합니다.

Buttons 속성에 사용자 정보를 추가해 표시할 수 있습니다.

❑ 메인 아이콘

MainIcon 속성으로 메인 아이콘을 설정합니다.





❑ 하단(Footer) 정보

FooterText, FotterIcon 속성으로 하단의 추가 설명과 아이콘을 설정합니다.

❑ 확인 체크박스

VerificationText 속성을 입력하면 체크박스가 추가되고 OnVerificationClicked 이벤트를 발생시킵니다.

체크박스 선택여부는 Flags 속성의 tfVerificationFlagChecked 항목 선택 여부로 알 수 있습니다.

procedure TForm5.TaskDialog1VerificationClicked(Sender: TObject);
begin
  if tfVerificationFlagChecked in TaskDialog1.Flags then
    CheckBox9.Font.Style := [fsBold]
  else
    CheckBox9.Font.Style := [];
end;

❑ 라디오버튼

RadioButtons 속성에 항목을 추가해 하나를 선택할 수 있는 라디오버튼을 제공합니다.

❑ CommandLink

Flags 속성의 tfUseComandLinks 항목을 선택하면 Buttons 속성에 추가한 항목을 아래와 같은 Link 형식으로 표시합니다.

❑ ProgressBar 표시

Flags 속성의 tfShowProgressBar 항목을 선택하면 상태바를 표시할 수 있습니다.


관련 글



저작자 표시 비영리 동일 조건 변경 허락
신고

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

[컴포넌트 소개] TWebUpdate - 업데이트 프로그램 제작 컴포넌트/지원 툴(TMS Software)

2015.01.21 16:20

자동 업데이트 프로그램은 주요 기능은 아니지만 빠져서는 안되는 프로그램 중 하나입니다. 이번 글에서는 자동 업데이트 프로그램 제작 시 도움이 되는 TWebUpdate 컴포넌트를 소개합니다.


자동 업데이트 프로세스는 시스템 환경에 맞게 각자 정해야 하지만 자동 업데이트에 필요한 기술은 TWebUpdate 컴포넌트를 활용해 빠르게 개발해 여러분의 시간을 절약할 수 있습니다.


자동 업데이트 프로세스에 대해 익숙하지 않은 분들을 위해 HTTP를 이용한 자동 업데이트 프로세스 예를 한가지 들어 보겠습니다.

  1. 업데이트할 파일을 웹 서버에 업로드 하고, 업데이트 정보를 담고 있는 업데이트 정보파일도 웹서버에 업로드 합니다.
  2. 프로그램이 실행 시 메인 프로그램 전에 업데이트 프로그램을 실행하도록 구성하고, 업데이트 프로그램은 HTTP를 이용해 업데이트 정보를 받아와 업데이트 여부를 확인합니다. 
  3. 업데이트가 필요하면 웹서버의 업데이트할 파일을 다운로드 하고 메인 실행파일(또는 데이터)을 교체합니다.
  4. 업데이트 프로그램은 메인 프로그램을 실행하고 자신은 종료합니다.
위 프로세스에서 TWebUpdate 컴포넌트는 아래의 기능을 제공하기 때문에 여러분들이 실제 개발할 부분은 업데이트 프로세스를 정하고 제공되는 기능으로 프로세스대로 실행되도록 구현하는 부분을 진행하면 됩니다.
  • 업데이트 파일을 준비(압축 등)하고 업데이트 정보파일을 생성
  • 업데이트 정보를 받아와 업데이트 여부를 확인
  • 업데이트 파일을 다운로드 하고 실행파일(또는 데이터)을 교체

❑ TWebUpdate 컴포넌트

TWebUpdate 컴포넌트는 HTTP, HTTPS, FTP, 파일 네트워크 상의 업데이트 정보파일을 읽어 업데이트를 판단하고 업데이트를 수행하는 기능을 제공하는 컴포넌트입니다. 업데이트 판단하는 방식은 파일의 버전, 파일생성 일자, 체크섬, 파일크기, 사용자 버전을 제공합니다. 배포할 파일을 압축해 배포하고 업데이트 목록 중 일부만 업데이트하는 기능, 업데이트 과정을 쓰레드로 진행하는 기능 등의 부가적인 기능도 제공합니다.

TWebUpdate의 특징은 업데이트에 필요한 정보(배포파일 목록, 업데이트 버전, 파일크기 등)를 기록한 업데이트 정보파일을 생성할 수 있는 자동화 도구인 Update Builder를 제공합니다. 

❑ Update Builder

반복되는 업데이트 과정에서 수작업으로 업데이트 정보파일을 만드는 작업은 실수도 잦고, 번거로울 수 있는데요. Update Builder는 한번 설정한 정책을 파일로 저장하고, 다음 업데이트 시 다시 불러와 빌드 과정만 진행하면 업데이트 정보파일을 새로 생성해 주기 때문에 실수도 적어지고, 작업자의 노력과 시간을 줄여줍니다.

업데이트 파일 추가

UpdateBuilder의 기본 탭인 Files에서는 업데이트할 파일을 추가하고, 개별파일마다 배포위치(Target directory), 업데이트 판단 기준(File Update), 압축여부(File Compression) 등을 설정합니다.

업데이트 설정

프로젝트 빌드(업데이트 정보파일 생성)


업데이트 정보파일은 아래와 같은 구조를 갖습니다.



저작자 표시 비영리 동일 조건 변경 허락
신고

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

(문서)프로그래밍 언어 기초 - 델파이와 C++

2015.01.13 09:31

델파이와 C++ 프로그래밍 언어 기초를 다질 수 있는 문서입니다.


다들 아는 내용이겠지만 가볍게 읽어보며 다시한번 정리해보시기 바랍니다.

초급 개발자 분들은 이번 기회를 통해 언어의 기초를 다져 보기 바랍니다.



구입 및 다운로드


관련 글

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Delphi/C++Builder C++, 델파이, 문법