Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

이 사이트 검색

검색 태그: '버전 신기능'.

  • 태그로 검색

    태그 사이를 쉼표(,)로 구분하세요.
  • 작성자로 검색

콘텐츠 유형


게시판

  • 엠바카데로 (Embarcadero) 개발도구: 델파이 (Delphi), C++빌더 (C++Builder), RAD 스튜디오 (RAD Studio)
    • [기술 Q&A 게시판] 델파이, C++빌더, RAD 스튜디오
    • [설치/등록 Q&A 게시판] 델파이, C++빌더, RAD 스튜디오
    • [기술 기고 게시판] 델파이, C++빌더, RAD 스튜디오
    • [포트폴리오 게시판] 내가 참여한 프로젝트/프로그램 소개
    • [구인 게시판] 개발자 채용/프로젝트 의뢰
  • 엠바카데로 (Embarcadero) DBMS: 인터베이스 (InterBase)
    • [기술 Q&A 게시판] 인터베이스
    • [설치/등록 Q&A 게시판] 인터베이스
    • [기술 기고 게시판] 인터베이스
  • 비주얼 스튜디오 (Visual Studio) 관련 도구
    • [기술 Q&A 게시판] 비주얼 어시스트
    • [설치/등록 Q&A 게시판] 비주얼 어시스트
    • [기술 기고 게시판] 비주얼 어시스트
  • 구록 (Gurock) 테스트도구: 테스트레일 (TestRail)
    • [기술 Q&A 게시판] 테스트레일
    • [설치/등록 Q&A 게시판] 테스트레일
    • [기술 기고 게시판] 테스트레일
  • 아이데라 (Idera) 데이터 도구: 아쿠아 데이터 스튜디오 (Aqua Data Studio), ER/Studio 등
    • ER스튜디오 (ER/Studio)
    • 아쿠아 데이터 스튜디오 (Aqua Data Studio)
  • API레이어 (Apilayer) 개발 도구: API레이어 (Apilayer)
    • [Q&A 게시판] API레이어 (Apilayer)
  • 이 사이트 이용 관련
    • [게시판] 이 사이트 관련 이용 팁과 Q&A

Categories

  • 이달의 기술자료: 엠바카데로
  • 비디오 세미나
    • UX Summit
    • DelphiCon
    • CodeRage
    • 데브기어 세미나
  • 기술백서(PDF)

Categories

  • 시작하기
  • 설치/등록/라이선스
  • 튜토리얼
  • 도서

Categories

  • RAD 스튜디오 역사관
  • 11.0 알렉산드리아
  • 10.4 시드니
  • 10.3 리오
  • 10.2 도쿄
  • 10.1 베를린
  • 10.0 시애틀
  • XE8~XE
  • 2010~6.0

...에서 결과 찾기

검색어 일치 조건


최초 작성일

  • Start

    End


최종 변경일

  • Start

    End


개수로 필터링...

가입

  • Start

    End


Group


자주 쓰는 도구

  1. 온라인 세미나-What's NEW! RAD스튜디오11의 중간 및 라이브 Q&A 목록입니다. Q.RAD 서버 라이트 배포 방법을 설명해 주세요. A.아직 RAD 서버 라이트 관련 기술자료가 배포되지 않았습니다. 향후 자료 등록 시 포럼 기고 및 이메일로 안내하겠습니다. Q. RAD 서버에서 요청 시 인증 관련 오류가 발생합니다. A. RAD 서버 엔진 인증을 사용한 것으로 보입니다. RAD 서버는 사용자 관리, 인증 등의 기본 기능들이 내장되어 있습니다. RAD 서버의 사용자 로그인 후 토큰을 받아, 요청 시 토큰을 HTTP 해더에 포함해 전송하도록 구현이 필요합니다. 마침, 다음 질문/답변에 해당 내용이 포함되있으니 참고하시기 바랍니다. Q. HighDPI 적용된 앱은 저해상도 모니터에서도 잘 표시되나요? A. 저해상도 모니터를 포함한 환경에서는 기본 DPI(96 dpi)가 적용되고, 고해상도 모니터 등에서 배율을 설정한 경우 해당 배율에 맞게 확대되어 표시됩니다. Q. VCL스타일에서 HighDPI을 적용해야 하는가? 그리고 방법은? A. VCL스타일에서 사용하는 이미지에도 HighDPI를 적용해야 합니다. 높은 배율의 이미지를 등록하고, 높은 배율의 객체 생성 후 높은 배율의 이미지를 사용하도록 설정해야 합니다. Getit Package Manager에서 제공하는 스타일에도 HighDPI가 적용된 스타일을 제공합니다. 다음 글에서 자세한 내용을 살펴보실 수 있습니다. Q. 스타일 편집 시 이미지 영역 선택을 키보드로 세밀히 조정 가능한가요? A. 이미지 영역 선택의 아래 그림과 같이 배율을 400(4배) 또는 800(8배)로 증가해 세밀하게 조정할 수 있습니다. 스타일 디자이너에서 이미지 영역 선택 시 알아 두면 좋은 팁 Q. VCL 스타일 써드파티 컴포넌트 적용 방법을 알려주세요. A. 대부분의 메이저 컴포넌트의 경우 VCL 스타일을 지원합니다. 다음 링크에서 VCL 스타일을 지원하는 일부 컴포넌트 목록을 살펴볼 수 있습니다. https://delphistyles.com/vcl/tlist.html 써드파티 컴포넌트에 VCL 스타일을 적용하려면, 컴포넌트 자체적으로 스타일 지원 관련 코드를 추가해야 합니다. 해당 내용은 좀 더 파악 후 포럼 기고 또는 이메일로 공유하도록 하겠습니다. Q. 컴포넌트가 많아지면 논비주얼 컴포넌트가 많아져 비주얼 컴포넌트를 가림, 논비주얼 컴포넌트를 한쪽으로 자동으로 모으는 방법은 없나요? A. "Hide Non-Visual Components" 기능을 이용해 논비주얼 컴포넌트를 감추고/표시할 수 있습니다. Q. 블록 복사(Shift+Alt로 다중선택 후 복사) 후 붙여넣기 시 제일앞의 글자가 사라집니다. A. (실시간으로 현상확인) 엠바카데로 퀄리티 포털에 레포팅 후 공유(관리)하도록 하겠습니다. Q. VSCode와 같은 에디터에서 창 나누기(splitter) 가능한가요? 에디터의 행 높이(여백)를 현재 1.5배로 지정 가능한가요? A. 기본 Tools > Options에서 관련된 옵션을 찾을 수 없습니다. CnPack과 같은 써드파티 플러그인의 기능을 검토해 보시기 바랍니다. Q. RAD 스튜디오에서 추가된 숫자 밑줄 기호를 사용후 코드 포맷팅(Format source)하면 첫글자 다음에 공백이 발생합니다. A. 엠바카데로 퀄리티 포털에 레포팅 후 공유(관리)하도록 하겠습니다. Q. 모바일 개발에 관련된 특히나 iOS 부분에 대한 자세한 자료를 부탁드립니다. A. 이번 세미나의 경우 RAD 스튜디오 11.0 알렉산드리아에 대한 새로운 기능과 활용에 관한 세미나 입니다. 다음 세미나 계획 시 참고하도록 하겠습니다. 의견 감사합니다. Q. OpenCV, 파이썬 연동, 웹캠등 장치 연동, SVG 관련 세미나 요청합니다. A. 향후 세미나 계획에 참고하겠습니다. 의견 감사합니다. Q. (사전 질문)기존의 tech 게시판이 좋은 내용이 많은데 보안설정이 오래되어 접속이 원활하지 않습니다 welcome 게시판으로 모두 옮겨주시거나, 보안설정을 Update해서 접속을 원활하게 해 주시면 감사하겠습니다. A. 현재 주요 기술자료들을 포럼 게시판으로 옮기는 중입니다. 필요한 자료가 있다면 저희에게 요청해주시면 우선순위를 높이도록 하겠습니다. 그 동안은 테크게시판 접속 후 수동으로 [이 웹 사이트 방문] 기능을 통해 입장 부탁드립니다. Q. (사전 질문)Delphi 를 이용한 Web 으로 생산 모니터링 제작에 관심이 많습니다. 이를테면 MS-SQL 을 읽어 Web 모니터링 구성등에 대해 알고 싶습니다. A. 세션2-1. 데이터 서비스를 HTTP 기반의 REST 표준 API로 서비스하기 항목이 도움이 되셨을 것 같습니다. 추가적으로 필요한 내용이 있다면, 포럼 게시판을 통해 의견 주시면, 기술자료 주제 선정 및 세미나 주제 선정에 큰 도움이 됩니다.
  2. 온라인 세미나-What's NEW! RAD스튜디오11 의 중 1번째 세션의 다시보기, 자료, Q&A입니다. RAD 스튜디오 11 알렉산드리아 새 기능 요약 정리 "다시보기" RAD 스튜디오 11 알렉산드리아 새 기능 요약 정리 "자료" https://drive.google.com/file/d/1IOHiGnyDafo_waEqOscehAkSZwJl4ZrR/view?usp=sharing 기타 Q&A는 아래 답글을 참고/이용 하세요. 버전 별 주요 업데이트 문서에서 보기: RAD 스튜디오 11 알렉산드리아 이 세션이 포함된 세미나의 모든 세션 보기: 온라인 세미나-What's NEW! RAD스튜디오11
  3. 온라인 세미나-What's NEW! RAD스튜디오11 의 중 4번째 세션의 다시보기, 자료, Q&A입니다. 여러분의 애플리케이션에 VCL 스타일 적용하기 "다시보기" 여러분의 애플리케이션에 VCL 스타일 적용하기 "자료" https://drive.google.com/file/d/1jBbT6ezPiWdaQTX6PSIT9yVg8hj8_rMu/view?usp=sharing 기타 Q&A: 아래 답글을 참고/이용 하세요. 버전 별 주요 업데이트 문서에서 보기: RAD 스튜디오 11 알렉산드리아 이 세션이 포함된 세미나의 모든 세션 보기: 온라인 세미나-What's NEW! RAD스튜디오11
  4. 온라인 세미나-What's NEW! RAD스튜디오11 의 중 3번째 세션의 다시보기, 자료, Q&A입니다. 여러분의 애플리케이션에 HighDPI 적용하기 "다시보기" 여러분의 애플리케이션에 HighDPI 적용하기 "자료" https://drive.google.com/file/d/1ZN4ft15ZwGUJ4zXaK0SaRi1oibcE1LBT/view?usp=sharing 기타 Q&A: 아래 답글을 참고/이용 하세요. 버전 별 주요 업데이트 문서에서 보기: RAD 스튜디오 11 알렉산드리아 이 세션이 포함된 세미나의 모든 세션 보기: 온라인 세미나-What's NEW! RAD스튜디오11
  5. 온라인 세미나-WHAT’S NEW! RAD스튜디오 11 중 세션 2-2의 다시보기, 자료, 따라하기입니다. 표준 REST API로 서비스를 델파이 클라이언트에서 활용하기 "다시보기" 표준 REST API로 서비스를 델파이 클라이언트에서 활용하기 "자료" https://drive.google.com/file/d/1A9OmIQZbjhZkaYGuvgPQpSdtMwaiaHJH/view?usp=sharing 기타 Q&A: 아래 답글을 참고/이용 하세요. 버전 별 주요 업데이트 문서에서 보기: RAD 스튜디오 11 알렉산드리아 이 세션이 포함된 세미나의 모든 세션 보기: 온라인 세미나-What's NEW! RAD스튜디오11 표준 REST API로 서비스를 델파이 클라이언트에서 활용하기 "따라하기" REST API 서비스에도 연결하여 읽기/쓰기를 하는 네이티브 클라이언트 개발과정을 따라하며 기능을 익혀봅니다. C/S 기반의 샘플 프로젝트(FishFacts C/S)를 REST API와 연동하는 클라이언트로 마이그레이션하는 과정을 설명합니다. 완성된 결과는 다음 링크에서 확인할 수 있습니다. https://github.com/devgear/FishFactsRSX/tree/main/APIClient 목차(따라하기 순서) 1. 준비하기 REST API 서비스 준비 Fish Facts C/S 다운로드 2. REST API 분석하기 3. REST 클라이언트 컴포넌트 설정하기 4. REST API 저장(수정, 삭제) 메소드 생성하기 5. UI 컨트롤과 데이터셋 연결하기 6. 이미지 조회 기능 추가하기 7. 결과확인 1. 준비하기 REST API 서비스 준비 이 글에서는 FishFacts(어류도감) 데이터 제공 REST API 서비스와 연동합니다. 다음 글의 따라하기를 통해 REST API 서비스를 준비하세요. 클라이언트 개발 시 REST API와 연동이 필요합니다. 위 RAD 서버 패키지 프로젝트를 디버깅 없이 실행(Run > Run Without Debugging)합니다. Fish Facts C/S 다운로드 다음 링크를 방문해 전체 소스코드를 다운로드 받습니다. https://github.com/devgear/FishFactsRSX FishFactsCS 폴더를 복사해 ClientTest 폴더 생성 후 붙여넣기 합니다. IDE에서 해당 폴더의 프로젝트(FishFactsCS.dproj)를 엽니다. (프로젝트 및 소스파일 이름변경은 각자의 취향에 따라 진행하세요.) 2. REST API 분석하기 REST Debugger를 통해 REST API를 분석하고, 분석한 결과를 복사해 REST 클라이언트 컴포넌트를 생성할 수 있습니다. REST 디버거 실행 IDE를 열고, Tools > REST Debugger 메뉴 선택 Request 설정(서버 정보를 입력) Method: GET 선택 URL: "http://localhost:8080/fishfacts" 입력 Content-Type: "application/json" 선택 Parameters 설정(접근할 리소스 정보 입력) Parameters 탭으로 이동 Resource: "biolifes/" 입력 결과확인 우측의 [Send Request] 버튼 클릭 응답 결과(200 : OK) 확인 만약, 404 오류가 발생하는 경우 URL과 Resource 입력을 확인할 것 하단의 Headers > Body > Tabular Data 탭을 이동하면 데이터 확인 분석한 정보 클립보드로 복사 우측의 [Copy Components] 버튼 클릭 5개의 컴포넌트가 클립보드로 복사되었다는 메시지 출력 만약, 3개의 컴포넌트 정보가 복사되었다면, 하단 Response의 Tabular Data 탭을 선택 후 복사할 것 3. REST 클라이언트 컴포넌트 설정하기 REST 디버거에서 복사한 컴포넌트들을 데이터 모듈에 붙여넣어 조회 기능을 완성합니다. CSModule(데이터 모듈) 열고, 화면 크기를 적당히 키움 클립보드의 REST 클라이언트 CSModule에 붙여넣기 (Ctrl + V) 겹쳐진 컴포넌트를 적당한 간격으로 위치 조정 REST 클라이언트 Content-Type 설정 TRESTClient 컴포넌트 선택 ContentType 속성에 "application/json" 입력 응답 데이터 변환 타입모드 설정 TRESTResponseDataSetAdapter 컴포넌트 선택 StringFieldSize 속성을 1024로(적절한 값으로) 변경 TypesMode 속성을 StringOlny로 변경 (JSON 데이터 변환 시 문자열로 처리, 기본값 Rich의 경우 문자열을 다른 타입으로 변환 시도 등의 오류 발생) 디자인 시점에 연동 확인 TRESTRequest 컴포넌트 > 우측 마우스 클릭 > Execute... 메뉴 클릭 > "200 - OK" 확인 > [OK] 버튼 클릭 데이터셋의 데이터 확인 TFDMemTable 컴포넌트 > 우측 마우스 클릭 > Edit DataSet... 메뉴 클릭 > 확인 후 [OK] 버튼 클릭 데이터 모듈 생성 시 요청 실행 데이터 모듈의 OnCreate 이벤트 핸들러 생성 요청 실행 코드 작성(데이터 모듈 생성 즉 앱 실행 시 요청 실행) RESTRequest1.Execute; 4. REST API 저장(수정, 삭제) 메소드 생성하기 데이터 추가, 수정, 삭제 시 REST API를 호출하는 메소드를 준비합니다. 해당 메소드는 데이터 변경 시 UI에서 호출하게 됩니다. 저장 관련된 기능 구현하기 위한 컴포넌트 3종 추가 및 설정 TRESTResponse 추가(RESTResponse2) TRESTRequest 추가(RESTRequest2) Client: RESTClient1 선택 Response : RESTResponse2 선택 TRESTRequestDataSetAdapter 추가(RESTRequestDataSetAdapter1) Area : Current 선택(현재의 레코드에 대해서만 처리) Request : RESTRequest2 선택 DataSet : FDMemTable1 선택 데이터 모듈 선언부의 private, public 영역을 아래와 같이 변경 private procedure CreateData; procedure UpdateData; public procedure SaveData; procedure DeleteData; end; 커서의 클래스 완성 기능을 이용 구현부 메소드 자동 생성 (우측마우스 > Complete Class at Cursor 또는 Shift + Ctrl + C) 각 메소드를 다음을 참고해 변경합니다. SaveData 구현 Post 버튼 클릭 시 데이터 저장 메소드 호출, 데이터셋 상태에 따라 CreateData 또는 UpdateData 메소드 호출 procedure TdmDatabase.SaveData; begin if FDMemTable1.State = dsInsert then CreateData else if FDMemTable1.State = dsEdit then UpdateData else Exit; FDMemTable1.Post; end; CreateData 구현 POST 메소드로 Body에 JSON 데이터를 담아 요청 전송 (Body에 JSON 데이터를 담는 과정은 TRESTRequestDataSetAdapter에서 처리됨) procedure TdmDatabase.CreateData; var Item: string; begin Item := FDMemTable1.FieldByName('species_no').AsString; RESTRequest2.Method := rmPOST; RESTRequest2.Resource := 'biolifes/'; RESTRequest2.Params.Clear; RESTRequest2.Params.AddItem('species_no', Item); RESTRequestDataSetAdapter1.Request := RESTRequest2; // JSON 데이터 자동 생성 RESTRequest2.Execute; end; UpdateData 구현 PUT 메소드로 Body에 JSON 데이터를 담아 요청 전송 procedure TdmDatabase.UpdateData; var Item: string; begin Item := FDMemTable1.FieldByName('species_no').AsString; RESTRequest2.Method := rmPUT; RESTRequest2.Resource := 'biolifes/{item}'; RESTRequest2.Params.ParameterByName('item').Value := Item; RESTRequestDataSetAdapter1.Request := RESTRequest2; RESTRequest2.Execute; end; DeleteData 구현 Delete 메소드로 요청 전송(Body 데이터 불필요) procedure TdmDatabase.DeleteData; var Item: string; begin Item := FDMemTable1.FieldByName('species_no').AsString; RESTRequest2.Method := rmDelete; RESTRequest2.Resource := 'biolifes/{item}'; RESTRequest2.Params.ParameterByName('item').Value := Item; RESTRequestDataSetAdapter1.Request := nil; RESTRequest2.Execute; FDMemTable1.Delete; end; 5. UI 컨트롤과 데이터셋 연결하기 화면(폼)과 데이터 연결을 변경하고, 데이터 수정 시 위에서 작성한 메소드를 호출하도록 변경합니다. 화면(CSForm) 열고 폼디자이너 표시 데이터소스의 데이터셋을 FDMemTable1으로 변경(REST API 호출한 결과 데이터셋) DataSource1 선택 DataSet 속성을 "dmDatabase.FDMemTable1" 선택 (오류 발생은 무시) TDBImage를 TImage로 변경 DBImage1 컴포넌트 삭제 TImage 컴포넌트 추가 기존 DBImage1의 위치로 위치 및 크기 변경 Post 실행 시 SaveData 메소드 호출하도록 변경 ActionList1 더블클릭 DatasetPost1 선택 OnExecute 이벤트 핸들러 생성 후 데이터모듈의 SaveData 메소드 호출하도록 구현 procedure TForm4.DatasetPost1Execute(Sender: TObject); begin dmDatabase.SaveData; end; Delete 실행 시 DeleteData 메소드 호출하도록 변경 ActionList1 더블클릭 DatasetDelete1 선택 OnExecute 이벤트 핸들러 생성 후 데이터모듈의 DeleteData 메소드 호출하도록 구현 procedure TForm4.DatasetDelete1Execute(Sender: TObject); begin dmDatabase.DeleteData; end; 6. 이미지 조회 기능 추가하기 REST API에서 데이터와 이미지가 분리되어 구현되어 있는 경우, 데이터 변경 시 이미지를 로드하도록 구현해야 합니다. 이미지 가져오기 관련 컴포넌트 추가 TRESTResponse 추가(RESTResponse3) TRESTRequest 추가(RESTRequest3) Client: RESTClient1 선택 Response: RESTResponse3 선택 이미지 제공 REST API 연동 메소드 추가 데이터 모듈의 선언부 public 영역에 다음 메소드 추가 후 자동완성(Shift + Ctrl + C)해 구현부 추가 procedure LoadImage(LoadProc: TProc<TMemoryStream>); 구현부에 다음 코드 추가 procedure TdmDatabase.LoadImage(LoadProc: TProc<TMemoryStream>); var Item: string; Stream: TMemoryStream; begin Item := FDMemTable1.FieldByName('species_no').AsString; RESTRequest3.Method := rmGET; RESTRequest3.Resource := 'biolifes/{item}/photo/'; RESTRequest3.Params.ParameterByName('item').Value := Item; RESTRequest3.ExecuteAsync(procedure begin if RESTResponse3.StatusCode = 404 then begin LoadProc(nil); Exit; end; Stream := TMemoryStream.Create; try Stream.WriteData(RESTResponse3.RawBytes, RESTResponse3.ContentLength); LoadProc(Stream); finally Stream.Free; end; end); end; 함수 파라메터로 LoadProc(익명메소드) 사용 biolifes/(id)/photo/ 리소스에 GET 요청 비동기로 실행(ExecuteAsync) - 큰 용량의 데이터 처리 시 비동기로 처리해 병렬로 실행 가능 응답을 TMemoryStream에 기록 후 LoadProc 실행 폼(CSForm)에서 데이터 변경 시 이미지 로드 함수 호출하도록 변경 DataSource1의 OnDataChange 이벤트 핸들러 생성 데이터 모듈의 이미지 로드 함수 호출 procedure TForm4.DataSource1DataChange(Sender: TObject; Field: TField); begin dmDatabase.LoadImage(procedure(AStream: TMemoryStream) begin if Assigned(AStream) then begin var WIC := TWICImage.Create; WIC.LoadFromStream(AStream); Image1.Picture.Assign(WIC); WIC.Free; end else Image1.Picture.Assign(nil); end); end; LoadImage 메소드 호출 시 익명메소드를 전달 스트림을 TWICImage로 로드 후 TImage에 할당 7. 결과확인 프로젝트를 실행(F9) 후 레코드 이동, 데이터 추가([Insert] 버튼 클릭 > 데이터 입력 > [Post] 버튼 클릭), 수정, 삭제 등을 수행해 봅니다. 위 과정의 내용을 여러분의 서비스에도 적용해 보시기 바랍니다.
  6. 온라인 세미나-WHAT’S NEW! RAD스튜디오 11 중 세션 2-1의 다시보기, 자료, 따라하기입니다. 데이터 서비스를 HTTP 기반 REST 표준 API로 서비스하기 "다시보기" 데이터 서비스를 HTTP 기반 REST 표준 API로 서비스하기 "자료" https://drive.google.com/file/d/19JuXURhwfjSVZ6eibiiDmU5F-Ug95qrv/view?usp=sharing 기타 Q&A: 아래 답글을 참고/이용 하세요. 버전 별 주요 업데이트 문서에서 보기: RAD 스튜디오 11 알렉산드리아 이 세션이 포함된 세미나의 모든 세션 보기: 온라인 세미나-What's NEW! RAD스튜디오11 데이터 서비스를 HTTP 기반 REST 표준 API로 서비스 작성 "따라하기" 데이터베이스 데이터를 REST API로 서비스하는 과정을 따라하며 기능을 익히고, 여러분의 데이터를 REST API로 서비스하도록 적용해 보세요. 다음 내용을 집중적으로 보시기 바랍니다. TEMSDataSetResource 컴포넌트(몇가지 속성 설정만으로): 데이터베이스 데이터를 REST API로 서비스하는 리소스 추가 커스텀 엔드포인트 작성: 이미지 제공과 같은 로직이 포함된 엔드포인트 목차(따라하기 순서) 1. 준비하기 RAD 서버 환경설정(최초 사용 시) 샘플 데이터 파일 다운로드 2. RAD 서버 패키지 프로젝트 생성하기 3. 데이터베이스 연결하기 4. 데이터를 REST API 리소스로 제공하도록 설정하기 데이터 제공 용 TEMSDataSetResource 컴포넌트 설정 이미지 제공 커스텀 엔드포인트 추가 5. RAD 서버 실행 및 결과 확인 RAD 서버 실행 웹브라우저에서 결과확인 1. 준비하기 RAD 서버 환경설정(최초 사용 시) 이 따라하기는 RAD 서버를 이용해 REST API를 제공합니다. RAD 서버를 처음 사용하는 경우 "RAD 서버 개발환경 설정하기(준비 중)"를 참고해 설정합니다. 샘플 데이터 파일 다운로드 이 따라하기는 인터베이스 용 "Fish facts(어류도감) 데이터"를 샘플 데이터로 사용합니다. 다음 링크에서 [Download] 버튼을 눌러 적절한 경로에 다운로드 합니다. https://github.com/devgear/FishFactsRSX/blob/main/Data/BIOLIFE.IB 2. RAD 서버 패키지 프로젝트 생성하기 IDE를 열고, File > New > Other 메뉴 클릭 Delphi > RAD Server > RAD Server Package 선택 > [OK] 버튼 클릭 리소스를 포함한 패키지 생성 "Create package with resource" 선택 > [Next >>] 버튼 클릭 리소스 이름 입력 및 파일 타입을 데이터 모듈로 선택(논비주얼 컴포넌트 사용에 필요) Resource name "fishfacts" 입력 > File type "Data Module" 선택 > [Next >>] 버튼 클릭 샘플 엔드포인트에서 이미지 제공에 사용할 GetItem만 선택 GetItem만 선택 > [Finish] 버튼 클릭 Sample Endpoints: 프로젝트 생성 시 선택한 커스텀 엔드포인트 메소드 코드 자동 생성 Database Endpoints: 사전 정의된 데이터베이스 연결의 테이블을 선택 해 데이터를 제공하는 리소스 자동 생성 (이 따라하기에서는 이 과정을 수작업으로 진행) API Documentation: 코드를 이용해 Swagger API 문서 제공 프로젝트 생성 완료 (선택사항) 프로젝트 저장 프로젝트 파일: FishfactsPackage.dproj 유닛 파일: BiolifeResource.pas (다른이름(및 형식)의 파일명으로 저장해도 문제 없음) 3. 데이터베이스 연결하기 "1, 사전 준비하기" 단계에서 다운로드 받은 인터베이스 데이터베이스와 연결합니다. 참고> 이 따라하기에서는 인터베이스 데이터베이스와 연결하지만, 다른 DBMS와 연결해도 됩니다. 참고> 이 따라하기에서는 FireDAC을 이용해 데이터베이스와 연결하지만, 다른 데이터 엑세스 컴포넌트를 사용해도 됩니다. 데이터베이스 연결 TFDConnection 컴포넌트를 데이터 모듈에 추가 추가된 TFDConnection 컴포넌트를 더블클릭해 "FireDAC Connection Editor" 표시 데이터 연결 속성 설정 Driver ID: IB 선택 Database: 다운로드 받은 "BIOLIFE.IB" 파일 선택 User_Name: sysdba 입력 Password: masterkey 입력 [Test] 버튼 클릭해 연결 확인 [OK]버튼 클릭 Object Inspector에서 TFDConnection의 LoginPrompt 속성을 "False"로 변경 쿼리 설정 TFDQuery 컴포넌트를 데이터 모듈에 추가 추가된 TFDQuery 컴포넌트를 더블클릭해 "FireDAC Query Editor" 표시 SQL 조회 문구 입력 SELECT * FROM BIOLIFE [Execute] 버튼 클릭 후 데이터 확인 [OK] 버튼 클릭 4. 데이터를 REST API 리소스로 제공하도록 설정하기 앞에서 추가한 데이터셋의 데이터를 HTTP 기반 REST API로 제공하도록 설정하고, 이미지 제공을 위한 커스텀 엔드포인트를 설정합니다. 데이터 제공 용 TEMSDataSetResource 컴포넌트 설정 TEMSDataSetResource 컴포넌트(10.3 리오에서 추가)를 이용해 리소스를 추가합니다. TEMSDataSetResource 컴포넌트는 DataSet 속성에 설정된 데이터셋의 데이터를 REST API로 제공합니다. 리소스에 HTTP 메소드(Get, Post, Put, Delete) 요청 시 데이터 제공(조회) 및 처리(등록, 수정, 삭제)를 자동화 해줍니다. TEMSDataSetResource 컴포넌트를 데이터 모듈에 추가 (Object Inspector에서)AllowAcctions 속성 모두 선택 List: 데이터셋 목록 제공 Get: 특정 항목 제공 Post: 신규 항목 생성 Put: 특정 항목 수정 Delete: 특정 항목 제거 데이터셋 설정 DataSet 속성에 앞에서 추가한 TFDQuery 컴포넌트 선택 키필드 설정 KeyFIelds 속성 더블클릭 SPECIES_NO 선택 후 [>] 버튼을 클릭해 "Included fields:"로 이동 [OK] 버튼 클릭 API로 제공할 필드 선택 ValueFIelds 속성 더블클릭 용량이 큰 GRAPHIC(Blob Field) 제외한 모든 항목을 "Included fields:"로 이동 [OK] 버튼 클릭 리소스 이름 지정 코드 에디터로 변경(F12) TEMSDataSetResource 선언부 위에 리소스 이름 특성 추가 [ResourceName('biolifes')] EMSDataSetResource1: TEMSDataSetResource; 이미지 제공 커스텀 엔드포인트 추가 이미지 제공 등 큰 용량의 데이터 제공은 별도의 엔드포인트로 제공해야 합니다. 샘플 엔드포인트로 생성한 GetItem에 Blob 필드에 저장된 이미지를 제공하도록 구현합니다. 그래픽 조회 용 쿼리 컴포넌트 추가 TFDQuery 컴포넌트를 데이터 모듈에 추가(FDQuery2) 추가된 TFDQuery 컴포넌트를 더블클릭해 "FireDAC Query Editor" 표시 SQL 조회 문구 입력 SELECT GRAPHIC FROM BIOLIFE WHERE SPECIES_NO = :ITEM [OK] 버튼 추가 커스텀 엔드포인트 수정 GetItem 선언부 위에 리소스 접미사 변경 [ResourceSuffix('bio/lifes/{item}/photo/')] procedure GetItem(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse); 엔드포인트 호출 시 이미지 제공하도록 구현부 변경 procedure TFishfactsResource1.GetItem(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse); var item: string; Stream: TMemoryStream; begin item := ARequest.Params.Values['item']; Stream := TMemoryStream.Create; try FDQuery2.Close; FDQuery2.ParamByName('item').AsString := item; FDQuery2.Open; if FDQuery2.RecordCount = 0 then AResponse.RaiseNotFound('Not found', '''' + item + ''' is not found'); TBlobField(FDQuery2.FieldByName('GRAPHIC')).SaveToStream(Stream); if Stream.Size = 0 then AResponse.RaiseNotFound('Not found', '''' + item + ''' is not found'); Stream.Position := 0; AResponse.Body.SetStream(Stream, 'image/jpeg', True); except Stream.Free; raise; end; end; 5. RAD 서버 실행 및 결과 확인 RAD 서버 실행 RAD 서버는 패키지를 개발해 RAD 서버 엔진을 이용해 패키지를 로드하는 방식입니다. (개발한 프로젝트의 확장자는 *.bpl(Boload Package Library)) 개발 시점에는 RAD Development Server를 실행해 결과 확인과 테스트를 진행합니다. 운영서버에서는 "Microsoft IIS" 및 "Apache Server" 엔진을 이용하는 것이 좋습니다.(운영환경에서 RAD 서버 엔진 설치(영문) 참조) 프로젝트 실행(F9) (최초 1회) 필요 패키지 추가 아래와 같은 대화상자 표시된 경우 [OK] 버튼 클릭 FireDAC에서 사용하는 패키지 추가 RAD Development Server 실행 및 로그 확인 빨간색 로그 {"Thread":1812,"Loading":{"Filename":"C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\FishfactsPackage.bpl"}} 우리가 생성한 RAD 서버 패키지가 로드 된 것을 확인 주황색 로그 {"Thread":1812,"RegResource":{"name":"fishfacts","endpoints":[ {"name":"GetItem","method":"Get","path":"fishfacts/bio/lifes/{item}/photo/"}, {"name":"biolifes.List","method":"Get","path":"fishfacts/biolifes/","produce":"application/json, *;q=0.9"}, {"name":"biolifes.Get","method":"Get","path":"fishfacts/biolifes/{id}","produce":"application/json, *;q=0.9"}, {"name":"biolifes.Put","method":"Put","path":"fishfacts/biolifes/{id}","consume":"application/json, *;q=0.9"}, {"name":"biolifes.Post","method":"Post","path":"fishfacts/biolifes/","consume":"application/json, *;q=0.9"}, {"name":"biolifes.Delete","method":"Delete","path":"fishfacts/biolifes/{id}"} ]}} GetItem: 이미지 제공을 위한 커스텀 엔드포인트 제공한 것을 확인 biolifes.{Actions}: TEMSDataSetResource에서 제공하는 액션 제공한 것을 확인 웹브라우저에서 결과확인 웹브라우저에서 List 액션 결과 확인 웹브라우저 실행 후 주소에 다음 URL 입력 후 실행 http://localhost:8080/fishfacts/biolifes/ 결과 확인(FireFox에서 확인 결과) 웹브라우저에서 이미지 제공 결과 확인 웹브라우저 실행 후 주소에 다음 URL 입력 후 실행 http://localhost:8080/fishfacts/biolifes/90020/photo/ 결과 확인(FireFox에서 확인 결과)
  7. RAD스튜디오 11 알렉산드리아는 개발자에게 필요했고 기다렸던 기능이 많이 추가되었습니다. 무엇보다 개발자가 더 쾌적한 환경에서 작업할 수 있습니다. 이 세미나에서는 RAD 스튜디오11 알렉산드리아의 주요 새 기능 중 실무에 바로 적용 가능한 활용 중심으로 한번에 정리합니다. 일시: 2021년 10월 15일(금), 오후 2시~오후 4시 순서 RAD스튜디오 11 새 기능 요약 정리 [활용] RAD서버를 이용해 “빠르게” 표준 REST API 구축하기 데모 [활용] 애플리케이션에 HighDPI 적용하기 [활용] 여러분의 애플리케이션에 VCL 스타일 적용하기 라이브 Q&A RAD스튜디오 11 새 기능 요약 정리 HighDPI 모니터와 같은 훨씬 쾌적한 환경에서 개발 윈도우, 맥, 안드로이드의 향상된 기능 반영 VCL 스타일을 개발 환경에서 보면서 개발 현대화된 VCL: TRichEdit, TTreeView, TLabelDBEdit (M 시리즈 애플 실리콘) 맥OS용으로 컴파일 안드로이드 API 30, 구글 플레이 V3, 안드로이드 X, “멀티덱스(multidex)” 지원과 라이브러리 업데이트 RAD서버 라이트 새 레코드 헬퍼, TZipFile 향상, 블루투스 LE 개선 등등 >>자료 및 다시보기: RAD 스튜디오 11 새기능 요약 [활용] RAD서버를 이용해 “빠르게” 표준 REST API 구축하기 데모 목표: 데이터베이스 서버와 그 데이터를 사용하는 클라이언트 사이에 “표준 REST API 층”을 넣어서 확장성과 유연성을 확보하는 과정 시연 1단계: 데이터 서비스를 HTTP 기반의 REST 표준 API로 서비스 하기 (RAD 서버 활용) 효과: 모바일, 웹, 데스크탑 등 어떤 클라이언트에서도 읽기/쓰기를 할 수 있는 “표준 REST API 서비스를 제공” 2단계: 표준 REST API로 서비스를 델파이 클라이언트에서 활용하기 (REST Client 활용) 효과: 표준을 준수하는 어떤 REST API 서비스에도 연결하여 읽기/쓰기를 하는 “네이티브 클라이언트 개발” >>자료 및 다시보기: 데이터를 HTTP 기반의 REST 표준 API로 서비스 하기 (RAD 서버 활용) >>자료 및 다시보기: 표준 REST API로 제공되는 서비스를 델파이 클라이언트에서 활용하기 (REST 클라이언트 활용) [활용] 애플리케이션에 HighDPI 적용하기 목표: High DPI를 완전하게 지원하는 애플리케이션을 만드는 과정 시연 효과: RAD 스튜디오 11 알렉산드리아는 High DPI 화면을 사용하는 개발자에게 훨씬 쾌적한 사용 경험을 제공한다. 이와 같은 효과를 사용자에게 제공 >>자료 및 다시보기: 애플리리케이션에 HighDPI 적용하기 [활용] 여러분의 애플리케이션에 VCL 스타일 적용하기 목표: 스타일을 완전하게 반영하기 위한 과정을 시연 내용: 스타일 파일 확보/반영, 개별 컨트롤 별 스타일 적용, 스타일 파일 사용자 편집 등 효과: RAD 스튜디오 11 에서는 개발 환경에서 스타일이 반영될 결과화면을 직접 보면서 개발할 수 있어서 더 빠르고 편하게 개발 >>자료 및 다시보기: 애플리케이션에 VCL 스타일 적용하기 라이브 Q&A 궁금한 점을 실시간으로 직접 묻고 답하고 토의할 수 있습니다. >>정리 및 다시보기: 라이브 Q&A
  8. RAD스튜디오 11 알렉산드리아는 개발자에게 필요했고 기다렸던 기능이 많이 추가되었습니다. 무엇보다 개발자가 더 쾌적한 환경에서 작업할 수 있습니다. 이 세미나에서는 RAD 스튜디오11 알렉산드리아의 주요 새 기능 중 실무에 바로 적용 가능한 활용 중심으로 한번에 정리합니다. 일시: 2021년 10월 15일(금), 오후 2시~오후 4시 순서 RAD스튜디오 11 새 기능 요약 정리 [활용] RAD서버를 이용해 “빠르게” 표준 REST API 구축하기 데모 [활용] 애플리케이션에 HighDPI 적용하기 [활용] 여러분의 애플리케이션에 VCL 스타일 적용하기 라이브 Q&A RAD스튜디오 11 새 기능 요약 정리 HighDPI 모니터와 같은 훨씬 쾌적한 환경에서 개발 윈도우, 맥, 안드로이드의 향상된 기능 반영 VCL 스타일을 개발 환경에서 보면서 개발 현대화된 VCL: TRichEdit, TTreeView, TLabelDBEdit (M 시리즈 애플 실리콘) 맥OS용으로 컴파일 안드로이드 API 30, 구글 플레이 V3, 안드로이드 X, “멀티덱스(multidex)” 지원과 라이브러리 업데이트 RAD서버 라이트 새 레코드 헬퍼, TZipFile 향상, 블루투스 LE 개선 등등 >>자료 및 다시보기: RAD 스튜디오 11 새기능 요약 [활용] RAD서버를 이용해 “빠르게” 표준 REST API 구축하기 데모 목표: 데이터베이스 서버와 그 데이터를 사용하는 클라이언트 사이에 “표준 REST API 층”을 넣어서 확장성과 유연성을 확보하는 과정 시연 1단계: 데이터 서비스를 HTTP 기반의 REST 표준 API로 서비스 하기 (RAD 서버 활용) 효과: 모바일, 웹, 데스크탑 등 어떤 클라이언트에서도 읽기/쓰기를 할 수 있는 “표준 REST API 서비스를 제공” 2단계: 표준 REST API로 서비스를 델파이 클라이언트에서 활용하기 (REST Client 활용) 효과: 표준을 준수하는 어떤 REST API 서비스에도 연결하여 읽기/쓰기를 하는 “네이티브 클라이언트 개발” >>자료 및 다시보기: 데이터를 HTTP 기반의 REST 표준 API로 서비스 하기 (RAD 서버 활용) >>자료 및 다시보기: 표준 REST API로 제공되는 서비스를 델파이 클라이언트에서 활용하기 (REST 클라이언트 활용) [활용] 애플리케이션에 HighDPI 적용하기 목표: High DPI를 완전하게 지원하는 애플리케이션을 만드는 과정 시연 효과: RAD 스튜디오 11 알렉산드리아는 High DPI 화면을 사용하는 개발자에게 훨씬 쾌적한 사용 경험을 제공한다. 이와 같은 효과를 사용자에게 제공 >>자료 및 다시보기: 애플리리케이션에 HighDPI 적용하기 [활용] 여러분의 애플리케이션에 VCL 스타일 적용하기 목표: 스타일을 완전하게 반영하기 위한 과정을 시연 내용: 스타일 파일 확보/반영, 개별 컨트롤 별 스타일 적용, 스타일 파일 사용자 편집 등 효과: RAD 스튜디오 11 에서는 개발 환경에서 스타일이 반영될 결과화면을 직접 보면서 개발할 수 있어서 더 빠르고 편하게 개발 >>자료 및 다시보기: 애플리케이션에 VCL 스타일 적용하기 라이브 Q&A 궁금한 점을 실시간으로 직접 묻고 답하고 토의할 수 있습니다. >>정리 및 다시보기: 라이브 Q&A View full 엠바카데로 기술자료
  9. 데이비드 밀링턴 (David Millington) 의 Windows 10 and Modern High DPI Display Support in Delphi and C++Builder 를 번역했습니다. (원문 작성 시기: 2019년 9월) 요즘 화면은 크기와 해상도가 몇년 전에 비해 크게 높아졌다. 지금 이 글을 작성하고 있는 맥북에는 1920x1080 24인치 외부 모니터가 연결되어 있고 이 맥북 프로의 화면은 2880x1800 15인치 레티나이다. 세로를 기준으로 비교하면, 외부 모니터 화면은 맥북의 레티나 화면에 비해 한줄에 들어있는 픽셀수는 3분의 2밖에 되지 않지만, 길이는 1.25배 더 크다. 따라서 인치당 픽셀의 수는 크게 차이난다. 외부 모니터는 인치당 90 픽셀이고, 맥푹 프로는 인치당 227픽셀이다. 거의 2.5배 정도(정확히는 2.44배) 차이가 난다. 이런 차이와 관련하여 High DPI라는 용어가 널리 사용된다. DPI는 'Dots per inch' 즉 '인치 당 점의 갯수'이다. 이 용어는 인쇄 분야에서 사용되던 점(Dot)과 모니터에서 사용되던 픽셀(Pixel)간에 다소 혼란스러운 바가 있긴하다. 고해상도 열풍은 애플이 주도했다. 2010년 아이폰4에서 처음으로 '레티나' 디스플레이를 적용하기 시작했고 이어서, 2012년에 맥북 프로 라인에 적용했다. 그러나 더 높은 해상도 즉 물리적으로 크기가 같은 영역에 더 많은 픽셀이 들어가는 화면으로 인해 문제가 생겼다. 특히 윈도우의 경우, 전통적으로 UI 레이아웃은 실제 물리적인 화면의 길이가 아니라 픽셀 단위로 계산한다. 툴바에 있는 아이콘은 항상 16 x 16 픽셀이 기본 크기이고, 버튼의 표준 크기는 너비가 75 픽셀이고 높이가 25 픽셀이었다 (델파이가 아닌 일부 다른 개발 도구로 만든 UI 애플리케이션에서는 24 픽셀). 하지만 화면 해상도가 높아짐에 따라, 픽셀 하나의 크기가 현격하게 작아지게 된다. 툴바의 아이콘이 지금 내 외장 모니터에서는 실제로 0.44cm인데, 내 맥북 프로에서는 0.17cm 이다. 이 문제를 해결하기 위해 윈도우 7에서 High DPI 지원을 시작했지만, 완전하고 견고하게 이 문제를 해소한 것은 윈도우 10 크리에이터 업데이트에서 도입된 'perMonitorV2' High DPI 지원이다. (버전2 라는 이름을 통해서 우리는 윈도우에서 High DPI를 지원하는 과정이 상당히 복잡하고, 선택지가 많고, 이슈 해소를 위해 반복을 통해 발전함을 알 수 있다.) 윈도우 10에서 perMonitorV2 고해상도를 지원하는 애플리케이션은 각 화면이 표현되는 화면의 해상도에 따라 동적으로 창의 크기를 맞출 수 있다. 즉 내 외장 모니터에 있던 앱을 드래그하여 맥북의 모니터로 옮기면 (비 클라이언트 영역, 테마 렌더링 등등을 포함하여) 창의 배율이 모니터에 맞게 조정어서 물리적인 크기를 잘 유지한다. 앱의 여러 창들이 각각 다른 모니터에서 표현될 때도 마찬가지이다. 2018년 11월부터 델파이와 C++빌더는 10.3 버전을 통해에서 (윈도우 UI 프레임워크인) VCL에 High DPI 지원을 시작했다. 그 이후로도 지속적인업데이트들을 통해 실제로 많은 개발자들이 VCL 고해상도 지원 기능을 잘 활용하고 만족하고 있다. VCL 스타일 (테마)과 IDE 자체에 대한 High DPI 지원 계획도 로드맵에 있다. (2019년 9월) 현재는 VCL에서만 High DPI를 지원하고 있다. 이미지 VCL의 High DPI 지원은 자동 방식이다. Project > Options > Manifest page 에서 ‘DPI Awareness’ 옵션을 지정하기만 하면 모든 UI 컨트롤의 크기와 위치가 알맞게 반영된다. 컨트롤이 화면에 표현되는 방식은 (선이나 테두리 등) 모양을 직접 그리기 또는 윈도우 테마 (윈도우 10에서는 High DPI도 지원)를 통해서 그리기 중 하나이기 때문에 앱과 해당 컨트롤들은 정확히 동일하게 표현된다. 단지 선명도가 모니터에 따라 살짝 차이가 날 뿐이다. 단 한 가지 예외가 있는데... 바로 이미지이다. 대표적으로 툴 바의 아이콘을 들 수 있다. 윈도우는 이미지를 이미지 리스트에 저장하는데, 이미지 리스트는 크기가 하나인 이미지들이 모여있는 곳이다. 이제 문제가 무엇인지 눈치챘을 수도 있겠지만, High DPI 화면에서 툴바 버튼 컨트롤은 기본 픽셀 크기의 2.5 배까지 커지지만, 이미지 리스트에 있는 버튼의 이미지는 알맞게 대응할 수 없으므로 16x16 이미지가 40x40으로 늘어가기 때문에 뿌옇게 표현된다. 16x16 픽셀 아이콘 동일한 16x16 아이콘이 2.5 배(40x40)로 늘어나서 표현된 모습 대부분의 High DPI 애플리케이션들이 이렇게 표시한다. 선명하게 40x40으로 표현된 모습 델파이와 C++빌더가 사용하는 방식 델파이와 C++빌더 기술이 놀라운 기술이 여기에 들어 있다. High DPI VCL 지원을 RAD스튜디오 10.3에 담아 출시할 때, 엠바카데로는 윈도우 자체의 High DPI perMonitorv2만 지원한 것이 아니라 더 나아가 이미지 확대/축소 문제를 해소했다. 이 문제는 윈도우 이미지 리스트와 관련되어 있으며 윈도우 스스로 아직까지 해결하지 못한 문제이다. 우리는 가상의 이미지 리스트를 도입하여 High DPI를 담고, 어떤 DPI 또는 화면 배율에도 선명한 이미지를 표현하도록 했다. 가상 이미지 리스트는 (HIMAGELIST 핸들이 있는) 윈도우 이미지 리스트 등 기존의 TImageList와의 하위 호환성을 완벽하게 지키면서도 확대/축소를 반영한다. 우리 개발 도구의 가치를 알 수 있는 좋은 사례이다. 우리 프레임워크를 사용하지 않고 이렇게 구현하려면 개발자가 엄청난 수작업을 해야할 것이다. VCL의 High DPI 이미지 리스트 컴포넌트에 대한 자세한 내용을 확인해보자.
  10. 마르코 칸투 (Marco Cantu)가 작성한 VCL Per-Control Styles – New in RAD Studio 10.4 를 번역했습니다. 10.4부터 VCL 라이브러리는 하나의 애플리케이션 안에서 여러 가지 스타일을 적용할 수 있다. 다시 말해서, 폼 마다 다른 스타일을 적용할 수도 있고, 폼 안에서 각 컨트롤마다 또 다른 스타일을 적용할 수도 있다. 또한 (폼, 컨트롤 등) 화면 요소가 스타일을 사용하는 것이든 '윈도우 기본’ 테마를 사용하는 것이든, 관계없이 서로 섞어서 쓸 수도 있다. (예전에는 VCL 애플리케이션에서 스타일을 오직 하나만 지정할 수 있어서, 스타일을 애플리케이션 전체에 적용하거나 아니면 아예 적용하지 못했었다). 이것은 TControl 클래스에 StyleName 속성을 추가한 결과이다. 모든 컨트롤에는 StyleName 속성이 있다. 이 StyleName 속성에는 스타일명을 지정할 수 있는데, 지정할 수 있는 스타일이 목록으로 제공되므로 그 중 하나를 선택할 수도 있다. 이 목록에 표시되는 스타일들은 프로젝트 옵션에서 애플리케이션이 로드하도록 선택한 스타일들이다. 컨트롤의 StyleName 속성의 값이 공백이면 부모 컨트롤(컨테이너)의 스타일이 적용된다. 이것을 활용하여, 폼의 StyleName에 스타일을 지정하면, 기본적으로는 그 폼 안의 모든 컨트롤들에도 부모인 폼에 지정된 스타일이 적용된다. 간단한 데모 컨트롤 개별 스타일(Per-Control Style)이라는 제목에서 알 수 있듯이, 하나의 애플리케이션 안에서 컨트롤과 폼 별로 여러가지 스타일을 따로 적용할 수 있다. 그러려면 우선 애플리케이션에 여러가지 스타일들이 로드되어야 하고, 반드시 그중 하나가 애플리케이션의 기본 스타일로 지정되어야만 한다. 가장 먼저 메인 메뉴 > Project > Options 화면에서 Application > Appearance를 선택하고 Styles 상자에서 앱에 로드할 여러가지 스타일을 선택한다 (힌트: 10.4부터는 High DPI를 지원하는 스타일들이 추가되었다). 그리고 나서 Default style 항목에서 'Windows’가 아닌 스타일을 지정한다(그 이유는 아래에서 설명한다). 그림.프로젝트 옵션 화면에서 사용할 스타일 여러개를 활성화하고, 그 중 하나를 기본 스타일로 지정할 수 있다. 이제 폼에 있는 각 컨트롤의 StyleName 속성에 서로 다른 스타일 이름을 지정하자. (아래 DFM 파일의 예시는 연관된 주요 속성만 표시한다.) object Form2: TForm2 StyleName = 'Sky' object Panel1: TPanel StyleName = 'Light' object Button1: TButton... object Button3: TButton StyleName = 'Sky' end end object Button2: TButton StyleName = 'Windows' end object Button4: TButton StyleName = 'Luna' end object Button5: TButton StyleName = 'Aqua Graphite' end end 위 코드를 보면서 이해해보자. 컨트롤에 스타일이 지정되어 있지 않으면 부모(컨테이너)의 스타일이 적용되므로, Button1에는 Panel1의 스타일인 ‘Light’ 스타일이 적용된다. StyleName 속성 값 중 ‘Windows’는 스 타일 목록에 있기는 하지만 스타일이라기 보다는 스타일을 적용하지 말라는 특별한 값이므로(자세한 내용은 아래에서 설명한다), Button2에는 어떤 스타일도 적용되지 않기 때문에 ‘윈도우 기본’ 테마가 반영된다. 그림. 위 코드에 있는 버튼 5개가 표현된 결과 화면이다. 5개 버튼 모두 스타일이 다르다. 사용 규칙 VCL 애플리케이션에서 각 폼과 컨트롤 별로 스타일을 조정하는 방법은 여러 가지이지만 아래 규칙을 알아두면 좋다. 1. 프로젝트 옵션에서 스타일를 선택(또는 해제)하라. 그러면, StyleName 속성의 값을 지정할 때 표시되는 스타일 목록에 반영된다 (물론, 코드를 사용하여, 실행 중에도 스타일을 로드할 수도 있다). 2. TControl.StyleName 속성을 이용하여 각 컨트롤과 폼 별로 원하는 스타일을 지정하라. StyleName 값은 프로젝트 옵션에 표시되는 스타일 중 하나여야 한다. 부모 컨트롤에 지정된 스타일이 자식 컨트롤에 적용되게 할 수도 있다. 예를 들어 폼의 StyleName 속성에서 스타일을 지정하면 그 폼 안에 있는 모든 컨트롤에도 적용된다. TControl.StyleName의 기본값은 공백이다. 따라서 컨트롤 개별 스타일을 전혀 지정하지 않으면, 애플리케이션의 모든 컨트롤과 폼에는 애플리케이션의 기본 스타일이 적용된다. StyleName속성을 ‘Windows’로 지정하면 해당 (컨트롤, 폼 등) 해당 요소에는 스타일이 무시되므로 ‘윈도우 기본’ 테마가 반영된다. StyleName에 스타일을 지정했지만, 그 스타일이 애플리케이션이 로드하지 않는 (즉 프로젝트 옵션에서 선택되지 않은) 스타일인 경우 애플리케이션의 기본 스타일이 적용된다. 3. 윈도우 대화상자(Dialog)에도 스타일을 적용할 수 있다. TStyleManager.DialogsStyleName 속성을 이용하라. 기본값은 공백이다(애플리케이션의 기본 스타일이 적용). 4. 애플리케이션의 기본 스타일을 ‘Windows’ 값으로 지정할 수 있다. TControl.StyleName 속성의 기본값이 공백이기 때문에, 애플리케이션에서 지정한 ‘Windows’ 즉 ‘스타일 무시’가 애플리케이션의 모든 컨트롤과 폼의 StyleName 속성에 적용된다. 그 방법은 코드 TStyleManager.UseSystemStyleAsDefault := True 을 사용하는 것이다. (역자 주: 이 코드는 개별 유닛 등 어느 곳에서도 사용할 수 있지만, 프로젝트 소스에 이 코드를 넣으면 애플리케이션 전체에 반영된다) 그리고 나서, 스타일을 사용하고 싶은 폼이나 컨트롤에서만 StyleName 속성에 스타일을 지정하면 된다. 이 방식은 폼 몇개에서만 VCL 스타일을 활성화하고 싶을 때 활용하기 좋다. 애플리케이션 안에서 컨트롤이나 폼 하나라도 스타일을 사용하려면, 프로젝트 옵션에서 Default style 옵션에서 반드시 ’Windows’가 아닌 일반 스타일을 선택해야 한다. (역자 주: 프로젝트 옵션에서 Default style 옵션을 ’Windows’로 선택하면 이 애플리케이션에서는 ‘윈도우 기본’ 테마를 사용하고 스타일 기능을 전혀 사용하지 않도록 지정하는 것이기 때문이다) 위 4번에서 설명한 작동 원리는 매우 중요하다. 프로젝트 옵션을 통해 스타일을 사용도록 지정한 애플리케이션에서도 스타일을 지원하지 않는 써드 파티 컴포넌트를 사용할 수 있도록 하기 때문이다. 예전에는 이렇게 다루기가 상당히 힘들었지만 이제는 이 새로운 아키텍처를 통해 (컨트롤과 폼 등의) 요소들이 스타일을 지원하건 안하건 관계없이 섞어서 잘 사용할 수 있게 되었고 써드 파티 컨트롤 때문에 VCL 스타일 사용을 포기할 필요가 없어졌다. 써드 파티 컨트롤에는 컨트롤 개별 스타일링이 자동으로 적용되지 않는다는 점을 명심하자. 이와 같이 스타일 기반이 아닌 컨트롤에 개별 스타일을 적용하려면 TControl을 매개변수로 받는 Vcl.Themes.StyleServices 메소드를 코드에서 사용해야 한다. 예를 들면, StyleServices(Self).DrawElement; 결론 컨트롤 개별 VCL 스타일(Per-Control VCL Style)이 도입 됨에 따라, 스타일을 훨씬 더 유연하게 사용할 수 있게 되었다. 폼 몇개에만 스타일을 적용하는 것으로 시작해서, 점차 다른 폼으로 확대 적용해 나갈 수도 있다. 직접 만든 컨트롤이나 써드 파티 컨트롤 등 VCL 스타일을 지원하지 않는 컨트롤도 스타일을 사용하는 애플리케이션 안에서 사용할 수 있다. UI 스타일 여러 개를 섞어서 쓸 수 있으며 실행 중에 동적으로 스타일을 지정할 수 도 있다. 컨트롤 개별 스타일 적용 외에도 10.4에서 많은 VCL 기능과 VCL 스타일이 추가되었지만, 이 훌륭한 기능은 별도의 글을 작성할 가치가 있다고 느꼈다.
  11. 데이비드 밀링턴 (David Millington)이 작성한 New in RAD Studio 10.3: High DPI Image List for Windows를 번역했습니다. RAD 스튜디오 10.3에서는 High DPI 지원에도 많이 신경을 썼다. 마르코 칸투가 쓴 VCL에서 Per Monitor v2 지원에서 언급되었듯이, 10.3부터는 VCL 애플리케이션이 화면 배율에 알맞게 축소/확대 되며, High DPI 화면 또는 확장된 화면에서 잘 표현된다. 이때 중요한 점은 툴바, 메뉴, 버튼 등 글리프(Glyph)를 사용하는 모든 곳에서 해당 그래픽 자원을 얼마나 잘 High DPI에 맞추어 확대/축소하는가이다. 툴바에서 16×16 픽셀인 아이콘을 사용한다면, 이 애플리케이션이 200% 확대된 곳에서 작동할 때에는 32×32 픽셀로 선명하게 표현되기를 원한다. 비록 High DPI API가 윈도우에 추가되긴 했지만, 윈도우 자체의 이미지 리스트에는 확대/축소 기능이 없다. TImageList는 이것을 감싸고 있으므로 마찬가지 제약이 있다. 따라서 화면의 DPI에 맞게 배율이 변하는 폼 안에서, 툴바 등 TImageList를 통해 사용되는 이미지들이 배율에 맞춰 선명하게 표현되게 하려면, 복잡한 추가 코드를 작성하지 않고는 어렵다. 그리고 VCL 콘트롤 대부분은 실제로 네이티브 윈도우 콘트롤이므로 윈도우의 네이티브 이미지 리스트와 HIMAGELIST 그리기 핸들에 밀접하게 묶여있다. 10.3에서 델파이와 C++빌더에는 완전히 새로운 이미지 리스트 콘트롤이 추가되었다. 자동으로 High DPI에 맞게 확대/축소되기 때문에 모니터나 배율에 상관없이 언제나 선명한 고해상도 이미지가 표현된다. 그리고 기존의 VCL 콘트롤 또는 윈도우 이미지 리스트와 완전히 호환되며, WinAPI를 호출할 때 사용할 수 있도록 HIMAGELIST 윈도우 핸들도 제공된다. 마법같지 않은가? 계속 읽어보자! TImageCollection 과 TVirtualImageList 새 이미지 리스트는 예전과 달리 두개로 나누어 구성된다. 이미지 컬렉션(단지 고해상도 이미지를 모아두는 역할)과 가상 이미지 리스트(이미지 컬렉션에 연결되어 상황에 따라 특정 크기의 이미지를 꺼내어 표현하는 역할)이다. 이미지 컬렉션 (TImageCollection) TImageCollection은 단순명확하다. 어디에 두어도 된다. 폼이든 데이터 모듈이든 TImageCollection을 놓아두고 그 안에 이미지를 추가하면 된다. TImageCollection에는 같은 이미지를 해상도 별로 여려개 넣을 수 있다. 예를 들어, 하나의 이미지를 16×16, 32×32, 128×128 픽셀로 각각 파일을 올리면, 실제로는 크기가 다른 이미지이지만 논리적으로 하나의 이미지로 취급된다. 그림. TImageCollection에는 이미지 별로 다양한 해상도의 이미지를 추가/편집/삭제할 수 있다. 논리적인 이미지 별로 서로 다른 해상도 파일을 올릴 때 수작업으로 할 수도 있지만, 이 파일들을 모아둔 폴더에서 한번에 올려도 TImageCollection이 알아서 유사한 이름 별로 묶고 크기를 파악한다. 파일명을 가지고 이렇게 구분하도록 하려면 Size Separator (구분자)를 지정한다. 예를 들어, ‘foo-16.png’, ‘foo-32.png’, ‘bar-16.png’ 파일을 올리면, 논리적 이미지는 foo와 bar 두개가 생기고 foo는 16×16과 32×32 버전을 가진다. 여기에 사용되는 파일명 내의 구분자는 이미 시중의 아이콘 라이브러리에서 널리 사용되고 있는 것들이므로 아이콘을 사서 바로 임포트할 수도 있다. TImageCollection은 PNG 이미지와 32bpp 비트맵 (알파 채널을 가지는 BMP 파일)을 지원한다. 32bpp가 아닌 비트맵은 구.TImageList에서와 마찬가지로 전통적인 컬러키 비트맵으로 취급한다. TImageCollection 안에서는 이미지에 이름을 주거나 카테고리를 지정할 수 있어서 관리하기가 좋다. 그 결과 알파을 인식할 수 있고, 다중 해상도 이미지를 담을 수 있는 컬렉션이 생긴다. 가상 이미지 리스트 (TVirtualImageList) TVirtualImageList 컴포넌트는 화면의 DPI/배율에 따라 알맞는 이미지를 표현한다. TVirtualImageList는 TImageCollection에 연결하여 사용한다. TVirtualImageList에는 이미지를 추가하거나 목록을 편집할 수 있는데, 연결된 컬렉션에 있는 이미지를 가져와서 지정한다. 또한 AutoFill 속성을 사용하면 연결된 컬렉션에 있는 모든 이미지를 자동으로 채울 수도 있다. 또한 기타 유용한 설정이 있다. 예를 들어, 비활성화 이미지 표시를 구.TImageList 보다 잘 할 수 있다 (회색 처리 그리고/또는 반투명 처리 등). TVirtualImageList는 화면 크기에 맞는 이미지가 사용된다는 점이 핵심이다. 이미지 리스트에 높이와 너비를 지정한다는 점은 구.TImageList와 마찬가지이지만, 그 의미는 다르다. 구.TImageList에서 높이와 너비가 각각 16으로 지정되면 표현되는 화면과 상관없이 무조건 16x16으로 표현 되었지만, TVirtualImageList에서 높이와 너비가 각각 16으로 지정하면 배율이 100%일 때 16x16으로 표현하라는 의미이므로, 화면 배율 변하면, 크기도 변한다. High DPI 창별 배율 (High DPI scales per-window)이란 서로 다른 폼에 서로 다른 배율이 적용될 수 도 있다는 의미이다. 이때 (DPI 변화에 맞추어 이미지 리스트가 확대/축소 해야하는 경우) 그 배율은 폼에 적용된 배율을 기준으로 한다. 따라서 TVirtualImageList는 폼에서만 사용할 수 있다 (TImageCollection과 달리 데이터 모듈에서는 사용할 수 없다. 데이터 모듈은 비시각적 콘트롤이므로 배율과 관련이 없기 때문이다). TVirtualImageList는 폼에 적용된 현재 배율을 파악하고, 이미지컬렉션에 있는 이미지 중 그 배율에 맞는 이미지를 가져와서 표현한다. TVirtualImageList에 지정하는 높이와 너비가 배율 100%를 기준으로 하기 때문에 이것이 가능하다. 만약 TVirtualImageList가 들어있는 폼에 적용되는 배율이 200%라면, 높이와 너비가 모두 16으로 지정된 TVirtualImageList는 실제로 32×32 아이콘을 그린다. 16의 200%가 32이기 때문이다. TVirtualImageList는 고해상도 이미지를 그린다. 크기에 딱맞는 이미지가 있으면 그것이 사용된다. 만약 딱맞는 것이 없으면 해상도가 더 높은 이미지를 가져와서 수준높은 확대/축소 알고리즘을 거쳐서 표현한다. 이런 이미지 처리 결과 캐시되기 때문에 이미지 별도 단 한번만 수행된다. TVirtualImageList는 TCustomImageList를 상속받았으며 HIMAGELIST 핸들이 있다. 따라서 WinAPI 메소드를 호출할 수 있다. 새 이미지 리스트로 컨버전하기 TImageCollection에는 구.TImageList에 들어 있는 이미지를 가져올 수 있는 도구가 제공된다. TImageCollection에서 오른쪽 클릭을 하여 구.TImageList 여러개에서 이미지들을 한꺼번에 임포트할 수 있다. 도움말 Docwiki에는 TImageCollection과 TVirtualImageList에 대한 자세한 도움말(영문 보기, 한글 자동 번역 보기)이 있다. 아키텍처와 컴포넌트에 대해 이 글에서 소개한 내용보다 자세히 설명되어 있고, 새 High DPI 이미지 리스트로 마이그레이션하는 방법과 베스트 프렉티스가 있다. 최종 결과 이미지 리스트 데모 화면의 스크린 샷이다. 100% 배율 화면: 800% 배율 화면: 이미지가 더 선명하고 깨끗하다. 새 High DPI 이미지 리스트 (TImageCollection 과 TVirtualImageList)는 DPI를 인식하여 배율에 맞는 고품질 이미지를 자동으로 반영한다. 기존의 TImageLists와 완전히 호환되고 예전 방식의 비트맵과 이미지 리스트를 임포팅할 수 있다. VCL 전체를 아우르는 PerMonitor V2의 High DPI 지원과 함께 사용하면 RAD 스튜디오 10.3 부터는 배율을 인식하는 시각적으로 훌륭한 고품질 앱을 만들 수 있다.
  12. IAN BARKER가 2019년 9월 19일에 포스팅한 High-re DPI and Per Monitor v2 with Delphi and RAD Studio 를 한글로 요약 정리한 글입니다. (원문에는 해당 옵션 설정 화면 이미지 등 보다 자세한 내용이 있습니다) 목차 배경 및 트렌드 마이크로소프트의 대응 델파이에 “Per monitor v2” 가 반영되기 전 버전의 이슈 10.3 리오에서 “Per monitor v2” 반영 보너스: 델파이의 프로젝트 옵션의 Manifest와 관련된 알아둘 만한 옵션들 배경 및 트렌드 컴퓨터에 해상도가 다른 각 모니터를 연결하여 동시에 사용하는 경우가 흔해졌다. 노트북 뿐만 아니라 테블릿에도 외부 모니터를 연결하여 다중 모니터를 사용한다. 마이크로소프트의 대응 “Per monitor v2” 기술을 윈도우 10에서 도입했다. 기능: 사용자가 각 모니터 별로 DPI 확대/축소를 지정할 수 있다. 활용 사례: 노트북에 HighDPI 모니터를 연결하여 사용하는 사용자가 노트북 화면에는 일반 해상도를, 큰 외부 모니터에는 더 높은 해상도를 지정할 수 있다. 이것은 각 픽셀의 폭과 높이 뿐만 아니라 PPI (Pixels Per Inch) 즉 실제 픽셀 밀도와 관련이 있다 델파이에 “Per monitor v2” 가 반영되기 전 버전의 이슈 델파이 10.3 이전 버전에서 만든 앱을 드래그하여 다른 모니터로 옮기면 픽셀 밀도의 변화를 알 수 있다. 화면이 선명하지 않거나, 확대/축소가 이상하게 되거나, 심지어 텍스트가 잘못된 곳에 표시되기도 한다. 그 이유는 96 DPI에서 작동하는 화면에 앱의 좌표가 맞춰져있었는데, 다른 모니터 (120 DPI 등)에서 표현되기 때문이다. 10.3 리오에서 “Per monitor v2” 반영 프로젝트 별로 매니페스드(Manifest)에 반영함으로써, 델파이로 만든 앱이 Per Monitor v2를 다룰 수 있음을 윈도우에게 알려줄 수 있다. 델파이 10.3 리오에서는 메인 메뉴 > project > options 을 선택하여 프로젝트 옵션 설정 화면을 연다. Application | Manifest 를 선택하고, DPI Awareness 에서 Per Monitor v2 를 선택한다. (기본 설정이 Per Monitor v2 이지만 한번 더 확인하는 것이 좋다) 위와 같이, 매니페스트 설정 이외에도, 10.3 리오에서는 화면의 DPI가 변경되면 앱에서 감지할 수 있도록 OnAfterMonitorDpiChanged 라는 새 이벤트가 추가되었다. 보너스: 델파이의 프로젝트 옵션의 Manifest와 관련된 알아둘 만한 옵션들 “Enable Runtime Themes“ 체크 박스 (기본 설정으로 활성화되어 있다) 위치: DPI Awareness 옵션 위 기능: 이 옵션은 델파이 7 당시의 TXPManifest 컴포넌트와 실제로 비슷한 역할을 한다. 즉, 애플리케이션의 매니페스트에 추가 정보를 넣어서 네이티브 콘트롤을 렌더링할 때 특별한 방식으로 수행될 수 있도록 한다. Execution level 선택 박스 위치: DPI Awareness 옵션 아래에 있다. 기능: 앱을 실행하는 윈도우 권한 수준을 조절한다. 선택 옵션은, “as invoker” “as invoker”는 기본 설정이며, 대체로 "as invoker"를 선택하면 무난하다. 해당 앱을 구동한 쉘(Shell) 또는 앱의 권한을 상속한다. 예를 들어, 앱을 실행한 Shell의 권한이 매우 제한적이면, 앱의 권한도 매우 제한적이다. 반대로, 관리자(Administrator) 권한으로 프로세스를 시작했다면, 앱의 권한도 관리자 권한이 적용된다. Highest available*: 가장 높은 권한 Require Administrator*: 관리자 권한 * 일반 사용자가 이 옵션으로 설정된 앱을 실행하려면, 관리자 로그인 비밀번호를 넣어야 실행할 수 있다.
  13. Kori

    2010~6.0 디버거

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 2010~6.0 "새 기능 한글 요약본: 디버거" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 목록 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. 2010~6.0 - 디버거 관련 주요 업데이트 요약 Watch 창과 Local Variables 창 디버그 툴팁 쓰레드 디버깅 TDateTime, TStringList 변수의 값 파악 개발자가 설정하지 않은 중단점 무시 옵션 IDE에서 디버깅하지 않고 실행(Run Without Debugging) 프로세스에서 디버깅 해제/추가 쓰레드에서 데드락 정보 파악 (Wait Chain Traversal, WCT) 기타 추가된 디버그 기능 Watch 창과 Local Variables 창 오브젝트의 펼쳐서 하위 멤버의 값을 파악 Watch 창과 Local Variables 창에서 오브젝트 뿐만 아니라 그 하위 하위 멤버들의 값까지 펼쳐 볼 수 있다. (델파이 7까지는 Watch 창과 Local Variables 창에서 오브젝트의 값만 볼 수 있고, 하위 멤버의 값을 보려면 디버그 인스펙터가 필요했음) Watch 창에서 새 New Watch 창 열기와 값 변경/평가 하기 (컨텍스트 메뉴) Evaluate/Modify: 하위 오브젝트도 선택하여 값을 변경하거나 평가해 볼 수 있다. New Watch: 선택된 오브젝트가 Watch 창에 추가된다. 디버그 툴팁 오브젝트의 펼쳐서 하위 멤버의 값을 파악 디버그 툴팁에서 오브젝트 뿐만 아니라 그 하위 하위 멤버들의 값까지 펼쳐 볼 수 있다. 툴팁을 임시로 투명하게 전환하기 (가려진 코드 보기) Ctrl 키를 누르고 있는 동안은 툴팁이 투명해진다. 가려진 코드를 읽기 위해 툴팁을 없애지 않아도 된다. 쓰레드 디버깅 코드 작성 시, "NameThreadForDebugging" 메소드로 코드에서 쓰레드 이름 지정 procedure TSortThread.Execute; begin NameThreadForDebugging(AnsiString(ClassName)); Sort(Slice(FSortArrayˆ, FSize)); end; Thread View에서 현재 디버깅중인 각 쓰레드들의 이름을 볼 수 있도록 TThread 클래스에 NameThreadForDebugging 메소드가 추가되었다. Thread Status 창에 쓰레드에 임시 이름을 지정 중단점(BreakPoint) 지정 시, 특정 쓰레드만 지정 하기 Thread Status 창에 특정 쓰레드만 얼리기(Freeze)/녹이기(Thaw) TDateTime, TStringList 변수의 값 파악 기존에는 디버거에서 그 값을 추적할 수 없었던 TDateTime, TStringList 등 타입도 이제 값을 파악할 수 있다. 디버깅 중 예외(Exception)가 발생한 경우, 중단/지속 선택 중단(Break)과 지속(Continue) 중 선택할 수 있다. “Ignore this exception type” 옵션에 체크를 하면 해당 예외 타입은 중단 없기 디버깅을 지속한다. 개발자가 설정하지 않은 중단점 무시 옵션 Tools > Options > Debugger Options > Embarcadero Debuggers에서 “Ignore non-user breakpoints” 옵션을 선택하면 개발자가 설정하지 않은 중단점*은 반영되지 않는다. (델파이 XE 부터는 non-user breakpoint를 만날 경우 Event Log 윈도우에 표시된다) * Non-user breakpoint는 DbgBreakPoint() API 함수 호출에 의해 코딩으로 지정된 것으로, 흔히는 Windows OS커널의 버그로 발생한다. IDE에서 디버깅하지 않고 실행(Run Without Debugging) IDE에서 프로젝트를 실행할 때, 디버깅을 진행하는 일반 디버그 모드 실행(Run) 명령 이외에, 디버깅하지 않고 실행(Run Without Debugging)을 명령을 실행할 수 있다. (유용하게 사용하는 예) 프로젝트 그룹에 서버 프로젝트와 클라이언트 프로젝트가 모두 있을 경우, 서버 프로젝트를 먼저 디버깅하지 않고 실행(Run Without Debugging)으로 실행하고, 이어서 클라이언트 프로젝트를 디버깅을 진행하는 일반 실행(Run)을 할 수 있다. 반대로 클라이언트 프로젝트를 먼저 디버깅하지 않고 실행하고 서버를 디버깅 할 수도 있다. (주의! 일반 디버그 모드 실행(Run)을 시작한 상태에서는 다른 프로젝트를 디버깅하지 않고 실행(Run Without Debugging)로 추가 실행할 수 없다) 프로세스에서 디버깅 해제/추가 Detach from Program: 디버깅 모드로 실행 중인 프로그램에서 디버깅을 해제하여 일반 모드로 실행 Attach to Process: 명령은 실행 중인 프로그램에 디버거를 연결하여 디버깅 쓰레드에서 데드락 정보 파악 (Wait Chain Traversal, WCT) 데드락(Deadlock) 발생 시, Thread Status 창의 Wait Chain 열에 각 쓰레드 간의 상호 블로킹 정보를가 표시된다. 기타 추가된 디버그 기능 이벤트 로그 옵션 추가 ( Tools> Options>Debugger> Options> Event Log ) Prevent scrolling of the event log: 이벤트 로그가 새 이벤트를 잡아서 보여주는 것을 방지 Scroll new events into view CPU 창 Disassembly, CPU Stack, Registers 등 CPU 창의 각 화면이 도킹 타입이어서 떼어내어 독립된 창에서 볼 수 있고 IDE 어느 곳에든 붙일 수 있다. 디버깅이 종료되면 CPU 창도 닫히도록 하려면, “Automatically close files implicitly opened while debugging” 옵션에서 CPU 창을 포함하면 된다. Disassembly 창에 새 옵션으로 "Show Opcodes", "Show Addresses"이 추가되었다. Call Stack 창 특정 프레임에서 중단점(Breakpoint)을 지정할 수 있다. 해당 프레임이 디버그 정보를 포함하고 있는지 여부를 표시한다. 한 항목을 더블 클릭하면 자동으로 로컬 뷰를 동기화한다. 중단점(Breakpoint) 토글 핫키: 코드 에디터에서 Ctrl+F5 를 치면 현재 커서가 위치한 줄에 중단점(Breakpoint)을 활성/비활성화한다. 디버그 소스 경로 지정: Project > Options > Debugger 에서 이제 모든 프로젝트 타입에 대해 “Debug Source Path” 를 지정할 수 있다. (예전에는 Directories/Conditionals에서 Win32만 지정 가능 했다.) “Notify on language exceptions” 명령 View> Toolbars> Customize> Categories> Run 에서 “Notify on language exceptions” 아이콘을 끌어서 툴바에 놓고 편하게 사용할 수 있다. 이제 “Notify on Language Exceptions” 명령을 실행하기 위해 매번 Tools > Options > Debugger Options > Embarcadero Debuggers | Language Exceptions 을 열지 않아도 된다. 투명한 디버거 툴팁: Ctrl 키를 누르고 있으면 디버거 툴팁이 투명해져서 뒤에 가려졌던 코드가 보인다.
  14. Kori

    2010~6.0 언어와 컴파일러

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 2010~6.0 "새 기능 한글 요약본: 언어와 컴파일러" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 목록 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [2010] RTTI를 통해 애플리케이션 런타임 시 메소드, 필드, 속성 정보를 조회할 수 있습니다. RTTI 강화와 어트리뷰트 델파이 2010에서 델파이의 RTTI가 대폭 강화되었습니다. 이제 RTTI가 메소드, 필드, 속성을 지원하게 되어 동적 호출과 다른 메타 프로그래밍 방식들을 지원하게 되었습니다. 새로 추가된 RTTI.pas 유닛을 통해 강력한 RTTI 루틴들을 뒷받침합니다. 어트리뷰트(attribute)는 이 새로운 RTTI를 기반으로 한 문법으로서, 클래스/레코드나 클래스의 멤버에 추가로 지정되는 정보이며, 실행 중에 읽어질 수 있습니다. 어트리뷰트를 활용하면 일반화된 프레임워크를 개발할 때 아주 유용합니다. □ [2010] DLL 함수가 호출될 때 DLL을 로드하도록 구현할 수 있습니다. DLL 지연 로딩 Delphi 2010에서는 DLL의 로딩 방법으로서 정적(static) 로딩, 동적(dynamic) 로딩 외에 지연(delayed) 로딩이 추가되었습니다. 지연 로딩은 정적 로딩과 기본적으로 같은 구문을 사용하지만 extern 선언에서 delayed 지시어를 추가하는 것입니다. procedure ProcInDll; external 'DLL_name.dll' delayed; 정적 로딩 구문에 단지 delayed 지시어를 추가한 것 뿐이지만, 이것만으로도 해당 DLL 함수가 실제로 호출될 때까지 해당 DLL을 로드하지 않습니다. 이전의 정적 로딩을 사용하면 코딩이 단순하고 편리한 반면 해당 DLL이나 함수가 존재하지 않을 경우 프로그램 시작 자체가 실패하는 치명적인 문제가 있습니다. DLL이 이런 우려가 있을 경우에 지연 로딩을 사용하면 깔끔하게 문제가 해결됩니다. 특히 Windows 7이나 Windows Vista 등 최신 버전의 Win32에서 추가된 API들을 호출할 필요가 있으면서 동시에 Windows P, 2000 등 구버전과도 호환성이 필요한 경우 더욱 유용합니다. 또한 지연 로딩을 사용하면 실제 호출할 때까지 DLL을 로드하지 않으므로 메모리 소모도 줄어드는 효과도 있습니다. □ [2009] 명시적으로 타입을 지정하지 않고 실행 시점에 유연하게 타입을 지정하며 개발할 수 있습니다. 제너릭(Generics) 제너릭은 배열, 컬랙션, 목록 등에서 데이터타입을 명시적으로 지정하기 않고, 실행 시 필요한 데이터타입으로 사용할 수 있는 문법입니다. 다음 예제는 제너릭 타입을 이용해 목록(TList<T>) 클래스를 만들고 사용한 코드입니다. TList = class(TObject) public procedure Add(const Value: T); function Get(Index: Integer): T; end; var IntList: TList; StrList: TList; begin IntList := TList.Create; StrList := TList.Create; IntList.Add(100); StrList.Add('Hello'); IntList.Free; StrList.Free; 자세히보기 : http://tech.devgear.co.kr/406874 □ [2009] 메소드의 파라메터로 코드블록을 전달할 수 있어 유연한 코드를 작성할 수 있습니다. 익명메소드(Anonymouse Method) 이름에서 알 수 있듯이 익명메소드는 이름이 없는 프로시저나 함수입니다. 익명 메소드는 변수에 할당하거나 메소드의 파라메터로 코드 블록을 전달할 수 있습니다. type TProc = reference to procedure(Value: Integer); procedure Call(const AProc: TProc); begin AProc(10); end; procedure DoSimpleAnonymouseMethod; var Proc: TProc; begin proc := procedure(Value: Integer) begin ShowMessage(Value.ToString); end; Call(Proc); end; 익명메소드는 다른 언어의 클로저(closures)의 구조와 유사합니다. 익명메소드는 특히 쓰레드 개발 시 사용하면 유용합니다. 쓰레드 시작 코드 구현 시 쓰레드 완료 코드를 함께 구현하면 작업흐름을 한눈에 파악할 수 있어 코드의 유지보수가 편리해 집니다. 자세히보기 : http://tech.devgear.co.kr/406874 □ [2009] 유니코드 문자열 기반의 애플리케이션을 개발할 수 있습니다. 유니코드 지원 이제 델파이 언어 전체에서 유니코드가 지원됩니다. 기존 버전들에서는 String은 AnsiString을 의미했지만 이제는 유니코드를 완벽하게 지원하는 UnicodeString으로 바뀌었습니다. UnicodeString은 기존의 WideString과는 달리 AnsiString과 유사한 레퍼런스 카운팅(Reference Counting) 구조로 설계되어 훨씬 메모리 효율적이며 속도도 빠릅니다. 스트링을 버퍼로 사용해왔던 관행에 대한 대안으로 RawByteString 타입도 추가되었습니다. 자세히보기 : http://tech.devgear.co.kr/406874 □ [2006] 기존의 클래스를 수정하지도 상속받지도 않고 클래스 기능을 확장할 수 있습니다. 타입 헬퍼(Type Helper) 타입 헬퍼는 클래스, 레코드, 열거형 타입의 기능을 확장할 수 있는 문법입니다. 다음코드는 열거형에 타입헬퍼를 이용해 ToString 메소드를 확장하는 예제입니다. type TGeoDirection = (North, East, South, West); // 열거형을 문자열로 변환하는 기능 확장 TGeoDirectionHelper = record helper for TGeoDirection function ToString: string; inline; end; function TGeoDirection.ToString: string; begin case Self of TGeoDirection.North: Result := ‘북쪽 (N)’; TGeoDirection.East: Result := ‘동쪽 (E)’; TGeoDirection.South: Result := ‘남쪽 (S)’; TGeoDirection.West: Result := ‘서쪽 (W)’; else raise Exception.Create(‘Unknown “TGeoDirecton” value’); end; end; var Direction: TGeoDirection; begin Direction := South; ShowMessage(Direction.ToString); end; 자세히보기 : http://tech.devgear.co.kr/406874 □ [2006] 레코드에도 속성, 메소드, 클래스 메소드등 타입을 추가 할 수 있습니다. 메소드를 지원하는 레코드 record 선언에서 클래스처럼 필드 외에도 속성, 메소드(생성자도 포함됨), 클래스 속성, 클래스 메소드, 클래스 필드, 네스티드 타입을 가질 수 있게 되었습니다. type TMyRecord = record type TInnerColorType = Integer; var Red: Integer; class var Blue: Integer; procedure printRed(); constructor Create(val: Integer); property RedProperty: TInnerColorType read Red write Red; class property BlueProp: TInnerColorType read Blue write Blue; end; constructor TMyRecord.Create(val: Integer); begin Red := val; end; procedure TMyRecord.printRed; begin writeln('Red: ', Red); end; □ Exit; 문에 반환값을 넣을 수 있어 코드가 더 짧아 집니다. 반환값을 갖는 빠져나오는 Exit 함수 □ inline 지시자로 함수와 프로시저의 성능을 향상 시킬 수 있습니다. Inline 지시자 타입 헬퍼는 클래스, 레코드, 열거형 타입의 기능을 확장할 수 있는 문법입니다. 다음코드는 열거형에 타입헬퍼를 이용해 ToString 메소드를 확장하는 예제입니다. function Max(const X,Y,Z: Integer): Integer; inline; 델파이 컴파일러는 함수와 프로시저의 성능을 향상할 수 있는 Inline 지시자를 지정할 수 있습니다. 이 지시자는 해당 루틴을 실제로 호출하는 대신 호출하는 측에서 해당 루틴을 포함하는 코드를 생성하도록 합니다. □ 같은 유닛의 클래스에서도 변수와 메소드를 노출하지 않을 수 있습니다. srict private, strict protected 델파이에서 클래스의 속성에 대한 가시성을 결정하는 2가지 옵션이 있습니다. strict private: private는 같은 유닛에 있는 다른 클래스에서는 접근할 수 있습니다. strict private는 같은 유닛에 있는 다른 클래스에서도 접근할 수 없습니다. strict protected: strict private과 유사하며, strict protected로 선언된 변수와 메소드는 클래스 본인과 상속한 클래스에서만 접근할 수 있습니다. □ 메소드 뿐 아니라 클래스도 abstract로 선언해 추상 클래스로 만들 수 있습니다. 클래스 추상화(class abstract) 타입 헬퍼는 클래스, 레코드, 열거형 타입의 기능을 확장할 수 있는 문법입니다. 다음코드는 열거형에 타입헬퍼를 이용해 ToString 메소드를 확장하는 예제입니다. type TAbstractClass = class abstract procedure SomeProcedure; end; □ 클래스를 더이상 상속하지 못하도록 sealed로 지정할 수 있습니다. 클래스 봉인(class sealed) type TAbstractClass = class sealed procedure SomeProcedure; end; □ 클래스는 해당 클래스에서만 사용 가능한 타입 선언을 포함할 수 있습니다. 클래스 타입(class type) type TClassWithClassType = class private type TRecordWithinAClass = record SomeField: string; end; public class var RecordWithinAClass: TRecordWithinAClass; end; procedure TForm1.FormCreate(Sender: TObject); begin TClassWithClassType.RecordWithinAClass.SomeField := '이것은 클래스 타입으로 선언된 필드입니다.'; ShowMessage(TClassWithClassType.RecordWithinAClass.SomeField); end; □ 클래스는 클래스 변수를 가질 수 있습니다. 클래스 변수(class var) 이것은 클래스의 객체가 아닌 클래스 자체에 적용되는 변수입니다. 예제는 위의 “클래스 타입”을 참고하십시오. □ 클래스 선언부 에서 타입 선언을 포함시킬 수 있습니다. 중첩된 클래스 클래스 선언 내에서 타입 선언이 포함될 수 있습니다. 이 방법으로 개념적으로 관계가 있는 타입들을 같이 둘 수 있으며, 이름 충돌도 피할 수 있습니다. type TOuterClass = class strict private MyField: Integer; public type TInnerClass = class public MyInnerField: Integer; procedure InnerProc; end; procedure OuterProc; end; procedure TOuterClass.TInnerClass.InnerProc; begin ... end; □ 메소드를 더 이상 상속받지 못하도록 fianl 지시자로 막을 수 있습니다. final 지시자 오버라이드한 버추얼 메소드를 final로 표시하여 상속되는 클래스에서 해당 메소드를 더 이상 오버라이드하지 못하도록 막을 수 있습니다. TAbstractClass = class abstract public procedure Bar; virtual; end; TSealedClass = class sealed(TAbstractClass) public procedure Bar; override; end; TFinalMethodClass = class(TAbstractClass) public procedure Bar; override; final; end; □ 클래스에 스태틱 클래스 메소드를 추가할 수 있습니다. 클래스 스태틱 메소드(class static method) 클래스에 스태틱 클래스 메소드를 추가할 수 있는데, 이것은 클래스 타입으로부터 호출할 수 있는 메소드입니다. 클래스 스태틱 메소드는 객체에 대한 참조 없이도 사용이 가능합니다. 일반적인 클래스 메소드와는 달리, 클래스 스태틱 메소드는 Self 파라미터를 가지지 않습니다. 또한 객체의 멤버들을 액세스할 수도 없습니다. (클래스 필드, 클래스 속성, 클래스 메소드는 액세스할 수 있습니다) 또한 클래스 메소드와 달리 클래스 스태틱 메소드는 virtual로 선언될 수 없습니다. type TMyClass = class strict private class var FX: Integer; strict protected // 노트: 클래스 속성을 액세스하려면 클래스 스태틱으로 선언되어야 합니다. class function GetX: Integer; static; class procedure SetX(val: Integer); static; public class property X: Integer read GetX write SetX; class procedure StatProc(s: String); static; end; begin TMyClass.X := 17; TMyClass.StatProc('Hello'); end; □ 컬렉션의 요소만큼 반복하는 for-in 반복문을 사용할 수 있습니다. for-in 반복문 이제 델파이에서 컨테이너에 대해 for-요소-in-컬렉션 스타일의 반복자를 지원합니다. 컴파일러는 다음의 컨테이너 반복 패턴을 인식합니다. for Element in ArrayExpr do Stmt; for Element in StringExpr do Stmt; for Element in SetExpr do Stmt; for Element in CollectionExpr do Stmt;
  15. Kori

    2010~6.0 VCL과 RTL

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 2010~6.0 "새 기능 한글 요약본: VCL과 RTL" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 목록 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [2010] 경로, 파일, 디렉토리 관련된 함수 사용이 편리해 졌습니다. System.IOUtils 클래스 TDirectory, TPath, TFile 등의 클래스들을 지원하여 로컬 디스크상의 디렉토리, 파일들을 훨씬 간단하게 검색, 액세스 가능합니다. □ [2010] 키오스크나 태블릿 개발에 유용한 가상키보드를 개발할 수 있습니다. TTouchKeyboard 컴포넌트 가상 키보드 컴포넌트인 TTouchKeyboard가 추가되어, 터치나 마우스 클릭으로 키 입력을 할 수 있게 되었습니다. 키오스크나 태블릿 개발에 아주 유용합니다. 터치키보드는 상속하여 간단히 원하는 언어 키보드를 구현할 수 있으며, 숫자 키패드로 바꿀 수도 있습니다. □ [2010] TCanvas와 유사한 TDirect2DCanvas로 Direct2D 개발이 가능합니다. Direct2D 지원 이제 델파이에서도 손쉽게 Direct2D 개발을 할 수 있습니다. 더욱이, 델파이 개발자들이 익숙한 TCanvas와 유사하게 TDirect2DCanvas로 만들어져 기존의 TCanvas로 개발해본 개발자라면 누구나 쉽게 배워 활용할 수 있습니다. □ [2010] TIFF와 RAW 포맷을 이미지컴포넌트에서 사용할 수 있습니다. TIFF 및 RAW 이미지 지원 WIC(Windows Imaging Components)를 지원함으로써, 스캐너, 팩스 등 수많은 분야에서 사용되는 범용 이미지 포맷 중의 하나인 TIFF를 직접 지원하게 되었습니다. 또한 최근 디지털 카메라에서 고급 이미지를 위해 많이 사용되는 RAW 포맷들도 WIC를 통해 지원하게 되었습니다. □ [2009] MS 오피스와 같은 리본 인터페이스를 쉽게 개발할 수 있습니다. 리본 컨트롤 MS 오피스에서 도입된 리본컨트롤을 컴포넌트로 지원해, 다른 개발툴들처럼 복잡한 코딩 없이 폼 디자인만으로 간단히 리본 컨트롤을 추가하고 다룰 수 있습니다. □ [2009] 컴포넌트 속성 설정만으로 멀티터치와 제스처를 구현할 수 있습니다. 멀티터치 / 제스처 지원 이제 델파이의 모든 컨트롤에서 터치 인터페이스를 지원하게 되었으며, 특히 특별한 코딩 없이 컴포넌트 수준의 설정만으로도 터치와 제스츄어를 지원합니다. 이를 위해 델파이 2010에서는 대부분의 VCL 컨트롤에서 Touch 속성이 추가되었으며, 여기서 지정된 GestureManager 컴포넌트를 통해 제스처도 지원됩니다. 기존 애플리케이션에도 간단히 터치 인터페이스를 추가할 수 있습니다. 델파이에서는 기본적으로 30개의 표준 제스처를 지원하며, 개발 중에 Custom Gesture를 추가하거나 혹은 런타임에 GestureRecorder 컨트롤을 이용하여 쉽게 사용자 제스츄어를 기록할 수 있습니다. □ [2009] 비슷한 범주의 버튼을 그룹으로 묶어서 제공할 수 있습니다. TButtonGroup 컴포넌트 비슷한 범주의 버튼을 그룹으로 묶어서 사용할 수 있습니다. 델파이 IDE의 툴 팔레트 카테고리 선택 UI도 TButtonGroup으로 제작되었습니다. 자세히 보기: http://tech.devgear.co.kr/411088 □ [2009] 에디터 컴포넌트에 이미지 버튼을 쉽게 넣을 수 있습니다. TButtonEdit 컴포넌트 에디트 컴포넌트에 이미지 버튼을 가진 컴포넌트입니다. LeftButton, RightButton 속성에 이미지를 지정할 수 있으며 OnLeftClick, OnRightClick 이벤트로 클릭을 제어할 수 있습니다. 자세히 보기: http://tech.devgear.co.kr/411088 □ [2009] ListView의 그룹을 직접 설정하고, 그룹마다 이미지를 지정할 수 있습니다. ListView 그룹화 자세히 보기: http://tech.devgear.co.kr/411088 □ [2009] 사용자 알림에서 제목, 설명과 이미지를 추가할 수 있습니다. TBalloonHint 컴포넌트 자세히 보기: http://tech.devgear.co.kr/411088 □ [2009] 아웃룩의 사이드바와 같이 접었다 펴지는 UI를 구현할 수 있습니다. TCategoryPanelGroup 컴포넌트 아웃룩의 사이드바와 같은 작업을 합니다. 여러개의 다른 패널을 추가할 수 있고 각기다른 패널에 VCL 컴포넌트를 추가할 수 있습니다. 타이틀, 이미지, 정렬과 아이콘을 각기 다르게 구현할 수 있습니다. 자세히 보기: http://tech.devgear.co.kr/411088 □ [2009] 아웃룩 사이드바와 같은 카테고리 별 그룹과 버튼을 갖는 UI를 구현할 수 있습니다. TCategoryButtons 컴포넌트 자세히 보기: http://tech.devgear.co.kr/411088 □ [2009] 그리드 컴포넌트의 스타일을 지정할 수 있습니다. 그리드 컴포넌트의 DrawingStyle 속성 Themed, Gradient 스타일이 그리드 컴포넌트에 추가되었습니다.(기본값 = gdsThemed) 자세히 보기: http://tech.devgear.co.kr/411088 □ [2007] 최신 윈도우의 가이드라인에 맞는 애플리케이션을 만들 수 있습니다. 최신 윈도우 공식지원 델파이 XE3에서 Windows 8을 델파이 2010에서 Windows 7을 델파이 2007에서 Windows Vista를 공식 지원합니다. 따라서 델파이로 빌드한 애플리케이션은 마이크로소프트의 윈도우 가이드라인을 준수하게 되며, 해당 윈도우에서 아무 문제 없이 동작합니다. □ [2007] 프로젝트 옵션 설정으로 윈도우 테마 지원 적용을 간단하게 할 수 있게 되었습니다. 윈도우 테마 지원 개선 Delphi 7에서는 Windows XP의 테마 기능을 지원하기 위해 XPMan (TXPManifest 컴포넌트) 방식을 사용했습니다. Delphi 2007 이후로는 이런 테마 지원이 더 네이티브 해져서, 프로젝트 옵션에서 Runtime Theme 선택(또는 Enable runtime Themes 체크)하면 전체 프로젝트에 대해 간편하게 테마 지원을 추가할 수 있습니다. 이 옵션은 Delphi 2007 이상에서 새로 만든 프로젝트에서는 기본으로 적용되며, Delphi 2006 이하의 구버전에서 작성된 소스에 대해서는 호환성을 위해 체크가 안되어 있습니다. (XPMan 방식을 사용한 경우 이 체크를 하면 충돌하며, 그런 경우 이 개선된 테마 지원을 사용하려면 프로젝트의 모든 유닛들의 uses 리스트에서 XPMan 유닛을 제거해야 합니다) □ [2006] 메모리 매니저와 RTL 함수가 교체되어 성능이 향상된 애플리케이션을 만들 수 있습니다. FastMM 메모리 매니저 도입 FastMM은 전통적인 Delphi의 메모리 매니저인 borlndmm.dll을 대체하는 것으로서, 이전보다 훨씬 빠른 메모리 루틴들을 제공하여 Delphi로 개발된 애플리케이션의 속도를 비약적으로 끌어올려줍니다. 또한 FastMM으로 인해 Delphi의 RTL에 메모리 관리 관련의 새로운 기능들이 많이 추가되었습니다. 전역 변수인 ReportMemoryLeaksOnShutdown에 True 값을 설정해두면, 프로그램이 종료될 때 메모리 누수 상황에 대해 알려주며, 메인 exe와 dll 사이에 메모리를 간단히 공유할 수도 있습니다. □ [2006] 마우스 중앙 버튼을 누르면 스크롤링 하는 기능을 개발할 수 있습니다. 인텔리마우스 지원 VCL 인텔리마우스 API를 지원합니다. 예를 들어 왼쪽 그림처럼 TMemo 컴포넌트 위에서 마우스 중앙 버튼을 누르면 사용자로 하여금 메모 내에서 스크롤링 하기 위해 마우스를 사용할 수 있도록 해 줍니다. 델파이 코드 에디터도 이 기능을 지원합니다. □ 작업표시줄 영역에 트레이 아이콘을 추가하고 풍선 도움말과 팝업메뉴를 제공할 수 있습니다. TTrayIcon 컴포넌트 TTrayIcon 컴포넌트는 VCL 애플리케이션이 태스크 트레이에 아이콘을 넣을 수 있도록 해줍니다. 이 컨트롤은 풍선 도움말과 팝업 메뉴를 지원합니다. 자세히 보기: http://tech.devgear.co.kr/411088 □ PNG, GIF를 지원할 수 있습니다. PNG, GIF 지원 bmp, jpeg 이미지 지원에 이어, 이제 VCL에서 PNG 및 GIF이미지 포맷도 지원됩니다. 또한 이미지 리스트 컴포넌트에서 png 파일을 직접 읽어 들일 수 있어 전보다 더 편리하게 되었습니다. □ 컨트롤의 여백을 설정해 컨트롤 배치를 더 다양하게 할 수 있습니다. VCL – Margins와 Padding 모든 VCL 컨트롤에 Padding 및 Margin 프로퍼티가 추가되었습니다. 이 두 프로퍼티는 HTML에서와 비슷하게 동작하는데, Padding은 컨테이너 컨트롤이 내부의 컨트롤과 가지는 여유 공간의 픽셀 길이입니다. Margin 프로퍼티는 컨트롤의 바깥 여유 공간입니다. 컨트롤의 AlignWithMargins 프로퍼티가 True로 지정되고 Align 프로퍼티가 alNone이 아닌 값으로 지정되면 해당 컨트롤의 Margin 프로퍼티 값에 따라 배치됩니다. 예를 들어, 그림은 폼 위에 있는 TPanel을 보여줍니다. 이 패널은 Align이 alClient로, AlignWithMargins 속성이 True로 지정되었으며, Margin 속성은 20으로 지정된 상태입니다. 또한 폼의 Padding.Bottom 속성은 30으로 지정되었습니다. AlignWithMargins와 Margin 속성을 이용하면 기존의 Align 속성만 이용할 때보다 훨씬 쉽고 풍부하게 컨트롤들을 배치할 수 있습니다. 자세히 보기: http://tech.devgear.co.kr/411088 □ 표준 HTML 링크가 들어있는 라벨을 사용할 수 있습니다. TLinkLabel 컴포넌트 위의 사진은 Caption에 “ 데브기어 홈페이지를 클릭하세요.”을 입력하고 실행한 결과입니다. 링크를 클릭하면 OnLinkClick 이벤트가 발생합니다. 자세히 보기: http://tech.devgear.co.kr/411088 □ 사용자의 결정이 필요한 경우, 여러가지 선택지를 제공하여 사용자의 의견을 정교하게 받을 수 있습니다. TTaskDialog 컴포넌트 TTaskDialog 컴포넌트는 비스타에서 새로 도입된 태스크 다이얼로그 기능을 사용할 수 있게 해주는 컴포넌트입니다. 개발자는 오브젝트 인스펙터를 이용하여 TaskDialog의 모양을 커스터마이즈할 수 있습니다. 자세히 보기: http://tech.devgear.co.kr/411088
  16. Kori

    2010~6.0 IDE

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 2010~6.0 "새 기능 한글 요약본: IDE" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 목록 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [2010] IDE의 모든 기능을 편리하고 신속하게 바로 찾아서 사용할 수 있습니다. IDE 인사이트 단축키 F6(또는 Ctrl + .)을 누르면 IDE Insight 필터링 검색창으로 포커스가 옮겨집니다. 여기에 원하는 기능을 입력하면 입력한 글자가 포함된 “컴포넌트, 코드 템플릿, 프로젝트, 옵션” 등의 기능이 목록으로 표시됩니다. 원하는 기능을 선택하면 바로 실행되거나 IDE에서 관련 화면으로 이동합니다. □ [2010] 여러 디렉토리에서도 한번에 원하는 내용을 검색할 수 있습니다. 개선 Find in Files □ [2010] 규모가 큰 프로젝트를 컴파일 하면서, 동시에 IDE에서 계속 작업할 수 있습니다. 백그라운드 컴파일 컴파일 시간이 오래 걸리는 대형 프로젝트 컴파일 작업을 위해 백그라운드 컴파일 기능이 추가되었습니다. 이 기능을 이용하면 컴파일 하는 동안 코드 에디트, 리뷰 등 다른 작업들을 계속할 수 있습니다. 유닛들의 스냅샷을 컴파일 하기 직전에 메모리에 올려서 컴파일하므로 컴파일 도중에 코드를 수정하더라도 컴파일에 영향을 주지 않습니다. □ [2009] 유사한 프로젝트 옵션끼리 재분류되어 옵션을 더 빠르고, 쉽게 찾을 수 있습니다. 개선된 프로젝트 옵션 □ [2009] 개발용 프로젝트 옵션과 배포용 프로젝트 옵션을 다르게 설정할 수 있습니다. 파일로 저장해 두면 재사용 할 수 있습니다. 빌드 컨피그레이션 빌드 컨피그레이션은 디버그 또는 릴리즈 모드에 따라 프로젝트 옵션을 별도로 설정하는 기능입니다. 별도로 설정된 옵션 값은 프로젝트 매니저의 빌드 컨피그레이션의 선택에 따라 디버그 또는 릴리즈 설정 정보를 포함해 앱이 만들어 집니다. 빌드 설정은 별도 옵션셋 파일(*.optset)로 저장됩니다. 이 파일을 불러오면 다른 프로젝트에서 옵션 설정 정보를 재사용할 수 있습니다 □ [2009] 리소스 파일이 필요한 경우, 프로젝트에서 바로 추가해서 사용할 수 있습니다. 리소스 파일을 관리할 수 있는 리소스 매니저 델파이 7에서는 별도의 이미지나 폰트파일 등의 리소스를 프로젝트에 추가하려면 리소스 스크립트 파일(*.rc)을 직접 만들어 프로젝트에 추가해야 했습니다. 이제 리소스 매니저(Project > Resources and Images…)를 이용해 리소스 파일을 추가하고 프로젝트를 컴파일 하면 리소스 스크립트 파일이 자동으로 생성됩니다. □ [2009] 필터링 검색기능을 사용하면 강화로 uses절 추가가 훨씬 쉬워집니다. Use Unit File > Use Unit(Alt + F11)로 Use Unit 창을 호출하고 입력창에서 필터링 검색을 하면 유즈절에 추가할 파일을 손쉽게 찾을 수 있습니다. 등록 영역(Interface / Implementation)을 선택하기도 쉽습니다. □ [2007] 툴팔레트에서도 필터링 검색으로 컴포넌트를 빠르게 찾을 수 있습니다. 툴팔레트 검색 툴파레트 검색창에 입력된 내용이 포함된 컴포넌트만 목록에 표시됩니다. □ [2005] 자주 사용하는 코드를 템플릿에 미리 등록해두면, 코드를 빠르게 완성할 수 있습니다. 라이브 템플릿 라이브 템플릿은 템플릿(View > Templates)에 정의된 템블릿 코드를 이용해 코드의 뼈대를 자동으로 만들고 입력항목을 추가해주기 때문에, 코드를 빠르게 완성할 수 있습니다. 탭키로 입력항목을 넘나들고, 엔터키를 눌러 입력을 완료합니다. 템플릿 코드는 View > Templates 메뉴를 통해 관리할 수 있습니다. 여러분이 자주 사용하는 코드를 기존 템플릿 코드를 참고해 추가하면 코딩 생산성을 높일 수 있습니다. 자세히보기 : http://tech.devgear.co.kr/411080 □ [2005] 선택된 여러줄의 코드를 한번에 주척처리하고 해제할 수 있습니다. 블록 커맨드 코드 에디터에서 여러줄 선택 후 Ctrl + / 로 주석, 주석 해제 할 수 있습니다. 자세히보기 : http://tech.devgear.co.kr/411080 □ [2005] 코드에디터에서 선택된 블록에서 같은 문자열을 한번에 변경할 수 있습니다. Sync Edit 모드 코드 에디터에서 여러줄의 코드를 선택한 후 왼쪽에 표시된 연필두자루 아이콘을 클릭하면 Sync Edit 모드로 변경(선택한 코드 블록의 배경색 변경)됩니다. 문자열을 클릭하면 코드 블록내의 동일한 문자열에 모두 박스가 생기고 문자열 하나를 변경하면 박스 안의 같은 문자열이 모두 일괄적으로 함께 변경됩니다. 자세히보기 : http://tech.devgear.co.kr/411080 □ [2005] 코드 포맷이 맞지 않는 코드를 사전에 지정된 포맷으로 일괄 포맷적용 할 수 있습니다. 코드 포맷터 들여쓰기나 IF, FOR문의 begin…end, 줄바꿈 등의 코드 포맷을 지정된 포맷으로 일괄 적용할 수 있습니다. • 현재 열려진 소스에 코드 포맷 적용 : View > Format 메뉴(또는 Ctrl + D) • 프로젝트의 모든 소스코드에 코드 포맷을 한 번에 적용 : Project > Format project Sources…메뉴 환경설정(Tools > Options > Formatter)에서 원하는 소스포맷을 설정할 수 있습니다. (델파이 XE 부터는 프로젝트의 모든 소스 코드에 코드 포맷을 한번에 적용하는 기능과 포맷 변경 전 확인 다이얼로그가 추가되었습니다.) 자세히보기 : http://tech.devgear.co.kr/411080 □ [2005] 변경된 코드 라인을 한눈에 알아볼 수 있습니다. 체인지 바 변경된 코드 영역을 라인번호 옆에 색깔로 표시해 줍니다. 변경이 저장된 경우 녹색으로, 저장 후 변경된 경우 노란색으로 표시됩니다. 자세히보기 : http://tech.devgear.co.kr/411080 □ [2005] 주요 코드에 집중할 수 있도록 코드를 접고 펼 수 있습니다. 코드 폴딩 자세히보기 : http://tech.devgear.co.kr/411080 □ [2005] 파일 저장 시 히스토리 파일이 생성됩니다. 이전 작업 내용과 변경된 부분을 비교하고 잘못 변경된 내용을 되돌릴 수 있습니다. 히스토리 관리자 히스토리 매니저는 IDE에서 관리하는 파일버전을 표시하고 서로 비교할 수 있습니다. • IDE에서 저장하면 버전별로 히스토리 파일 생성 • 사용자의 로컬에 변경을 저장 • 작업 중인 파일에 대한 변경도 표시 코드에디터 하단의 History 탭에서 이용할 수 있습니다. □ 프로젝트 그룹에서 프로젝트를 정렬할 수 있습니다. 오른쪽 마우스를 클릭하면 더 다양한 기능을 바로 사용할 수 있습니다. 프로젝트 매니저 강화 • 프로젝트 정렬 : 프로젝트와 프로젝트의 파일을 “이름, 수정일, 경로, 타입”으로 정렬 • 빌드 그룹 : 빌드 그룹에서 선택(체크)된 프로젝트를 일괄 빌드/컴파일 • 컨텍스트 메뉴에 여러 항목 추가됨 : 버전관리 기능 메뉴, 실행(Run, Run Without Debugging) 메뉴, Show in Explorer(프로젝트 경로의 탐색기 열기) 메뉴 등이 추가 □ Reopen 메뉴에 나타나는 항목들의 갯수를 조정하고, 불필요한 항목을 정리 할 수 있습니다.Reopen 메뉴 설정하기 리소스 파일을 관리할 수 있는 리소스 매니저 열어본 프로젝트와 파일 표시 갯수와 불필요한 Reopen 항목을 정리 할 수 있습니다. □ 코드 에디터 상에서 검색 결과가 강조되므로 한눈에 알아볼 수 있습니다. 검색 결과 하이라이팅 □ 리팩토링을 사용하면, 원래의 코드 동작을 유지하면서도, 코드의 구조를 재구성하고 코드의 성능과 가독성이 높아지도록 코드를 재구성할 수 있습니다. 리팩토링 리팩토링은 원래의 코드의 동작을 바꾸지 않고 그 코드를 다시 구성하거나 변경하는데 사용할 수 있는 기술입니다. 리팩토링을 이용하면 애플리케이션 코드의 성능과 가독성을 높여주고, 코드가 간결하고 깔끔해지도록 개선할 수 있습니다. □ 프로젝트의 클래스 구조와 인터페이스를 한눈에 파악할 수 있습니다. 클래스 탐색기 View > Class Explorer 메뉴로 이용할 수 있습니다. □ 데이터 탐색기에서 데이터베이스 연결을 쉽게 만들고 관리할 수 있습니다. 또한 데이터 소스를 프로젝트로 드래그 앤 드롭하여 DB 애플리케이션을 신속하게 개발할 수 있습니다. 데이터 탐색기 데이터 탐색기에서 테이블, 필드, 저장프로시저, 트리거, 인덱스와 같은 DB 서버 고유의 스키마 객체를 참조할 수 있습니다. 데이터 탐색기는 FireDAC 또는 dbExpress로 연결할 수 있습니다. □ 컨트롤 위치 이동 시 정렬선이 표시되므로 배치와 정렬하기가 쉬워졌습니다. VCL 가이드 라인 □ 다국어를 지원하는 국제화된 애플리케이션을 만들 수 있습니다. 다국어지원 도구: 국제화된 다국어 애플리케이션 만들기 다국어 지원을 위한 3가지 작업 • 다국어 지원할 언어 추가: Project > Languages > Add 메뉴를 통해 추가 • 화면의 문자열 다국어 처리 : 프로젝트 매니저에서 언어 리소스 편집 • 코드의 문자열 다국어 처리 : ResourceString 기반으로 문자열 사용 변경 자세히보기 : http://tech.devgear.co.kr/408214
  17. Kori

    XE8~XE 언어와 컴파일러

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 XE8 ~XE "새 기능 한글 요약본: 언어와 컴파일러" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 목록 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [XE7] 동적배열을 문자열과 같이 쉽게 사용할 수 있습니다. 동적배열 개선 • 동적배열 초기화가 쉬워짐 • 문자열과 같이 + 기호로 배열을 연결 • Insert, Delete, Concat 함수 지원 var di: array of Integer; i: Integer; begin di := [1, 2, 3]; di := di + di; di := di + [4, 5]; di := [1, 2, 3, 4, 5, 6]; Insert ([8, 9], di, 4); Delete (di, 2, 1); // remove the third (0-based) for i in di do begin Memo1.Lines.Add (i.ToString); end □ [XE2] 64비트 애플리케이션을 개발할 수 있습니다. 64-비트 컴파일러 지원 델파이 XE2에서 64비트 윈도우 애플리케이션 개발을 지원합니다. 64비트 애플리케이션은 더 빠른 연산과 더 많은 메모리(4G 이상)를 사용해야 하는 경우 적합 합니다. 델파이에서는 프로젝트 매니저에서 타겟 플랫폼을 64-bit Windows로 선택 후 빌드해 64비트 애플리케이션을 개발할 수 있습니다. 만약, 여러분의 프로젝트가 VCL과 RTL만 사용한 경우 Win32와 Win64 플랫폼에서 동일한 소스코드를 사용할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/411111 □ [XE2] 유닛에 범위 이름을 포함해 더 명확한 유닛 이름으로 지정할 수 있습니다. 유닛 범위 이름(Unit Scope Names) 유닛 이름 앞에 범위 이름을 추가할 수 있어 유닛의 역할이 더 명확해 졌습니다. VCL과 RTL 유닛이 모두 범위이름을 포함하도록 변경되었고 여러분의 유닛에도 범위이름을 포함해 저장할 수 있습니다. 하지만 반드시 범위이름을 지정해야 하는 것은 아닙니다. 유즈절에 유닛을 추가할 때 System.SysUtils와 SysUtils는 동일한 유닛을 사용합니다.
  18. Kori

    XE8~XE VCL과 RTL

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 XE8 ~XE "새 기능 한글 요약본: VCL과 RTL" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 목록 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [XE8] 근거리 위치기반 사물인터넷 서비스를 개발할 수 있습니다. 비콘 이제 비콘 컴포넌트(TBeacon)을 이용해 근거리 위치기반 서비스를 개발할 수 있습니다. 비콘은 일정 주기로 비콘식별정보와 거리를 계산할 수 있는 작업 데이터를 주변으로 송출하는 장비입니다. 비콘은 iBeacon과 AltBeacon 2가지의 표준을 제공하며 델파이의 TBeacon 컴포넌트는 iBeacon과 AltBeacon을 모두 지원하며, 비콘 영역의 입출입, 근접한 비콘의 정보 등을 이벤트로 제공해 비콘을 이용한 사물인터넷 서비스를 개발할 수 있습니다 자세히 보기: https://tech.devgear.co.kr/delphi_news/410888 □ [XE7] 블루투스를 이용해 원격의 장치와 센서 등을 여러분의 앱과 연결할 수 있습니다. 클래식 블루투스, 블루투스LE 컴포넌트 블루투스를 이용해 원격의 장치와 연결하고 원격 애플리케이션과 데이터를 주고 받을 수 있습니다. 델파이는 클래식 블루투스 컴포넌트와 블루투스 LE(저전력) 컴포넌트를 각각 제공합니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/405916 □ [XE7] 윈도우 작업표시줄 아이콘의 팝업메뉴 안에 바로가기 메뉴를 추가할 수 있습니다. TJumpList 컴포넌트 자세히 보기: https://tech.devgear.co.kr/delphi_news/411088 □ [XE7] 멀티코어 CPU를 최대한 활용하여 성능이 높은 애플리케이션을 개발할 수 있습니다. 병렬 컴퓨팅 라이브러리 지원 델파이는 멀티코어 CPU 장비의 성능을 최대한 활용할 수 있도록 병렬 컴퓨팅 라이브러리를 이용할 수 있습니다. • 멀티코어 CPU를 최대한 활용할 수 있도록 다수의 CPU에서 병렬(페러럴)로 작업 • 비동기 연산작업에 사용되어 멀티코어 컴퓨터와 장비 최대한 활용 가능 • 기존 코드에 손쉽게 통합하도록 라이브러리 형태로 지원 자세히 보기: https://tech.devgear.co.kr/delphi_news/405868 □ [XE6] 윈도우 작업표시줄 아이콘에 애플리케이션 미리보기와 제어버튼, 진행률을 표시할 수 있습니다. TTaskBar 컴포넌트 자세히 보기: https://tech.devgear.co.kr/delphi_news/411088 □ [XE6] VCL 애플리케이션에 있는 데이터를 손쉽게 모바일 앱으로 확장할 수 있습니다. VCL 앱을 모바일앱으로 확장할 수 있는 앱테더링 컴포넌트 앱테더링은 VCL 애플리케이션과 모바일앱이 상호 커뮤니케이션 할 수 있도록 지원하는 컴포넌트입니다. 앱테더링을 이용하면, 기존의 윈도우 애플리케이션의 기능을 모바일 앱으로 확장할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/406984 □ [XE5] 새로운 양방향 데이터셋으로 멀티-디바이스 데이터 액세스 애플리케이션 개발이 더 쉽고 재미있어 집니다. FireDAC – 범용 데이터 액세스 컴포넌트 다양한 데이터베이스를 제어할 수 있는 통합 API를 제공합니다. 데이터베이스 별 고유 기능을 사용하고, 최적의 성능을 발휘할 수 있도록 DBMS 별 네이티브 데이터베이스 드라이버를 지원합니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/410454 □ [XE5] FireDAC으로 데이터 사용 내역을 추적하고 모니터링 할 수 있습니다. FireDAC 추적과 모니터링 FireDAC의 추적기능을 이용하면 애플리케이션과 데이터베이스 사이의 통신내용을 상세하게 보거나 기록할 수 있습니다. 이 추적 정보에는 이벤트 발생시간, API 호출내역, DB로 전송된 SQL, 파라메터와 필드 값, 오류와 경고 등이 기록되어 여러분의 DB 애플리케이션의 문제점을 디버깅하고 해결하는데 유용하게 사용할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/409890 □ [XE5] FireDAC에서는 데이터 변경 사항을 메모리에 캐쉬하여, DBMS에 일괄 업데이트, 취소할 수 있습니다. FireDAC – 캐쉬를 이용한 업데이트 캐쉬 업데이트는 애플리케이션의 메모리 영역(즉, 데이터셋)에 업데이트 내역을 기록하고, DBMS에 한번에 업데이트하거나 일괄취소할 수 있는 기능입니다. 캐쉬 업데이트를 사용 하면 작업내용을 로컬에서 관리하므로 DBMS와의 트래픽을 줄일 수 있고, 사용자는 인터넷 속도와 관계없이 빠르게 작업할 수 있습니다. 그리고 부가적으로 작업이력을 확인(변경된 레코드 조회, 변경된 값 확인 등)하고, 작업을 되돌리는 기능(최종작업 되돌리기, 선택 레코드 되돌리기 등)등이 메소드를 이용해 손쉽게 구현할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/409889 □ [XE5] 30배 빠르게 복수의 데이터를 입력할 수 있습니다. FireDAC – Array DML FireDAC의 Array DML은 쿼리 전송 시 매개변수(Parameters)를 배열을 이용해 한번에 DBMS로 전달해 데이터 입력, 수정, 삭제 명령의 실행속도를 빠르게 하는 기능입니다. 이 방법은 DBMS와 애플리케이션 사이의 통신비용을 줄이고 DBMS 명령 요청을 줄입니다. 그 결과 실행 속도가 향상됩니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/409950 □ [XE5] 쿼리의 결과가 많은 경우 일부 데이터만 가져오는 작업을 옵션 설정만으로 구현할 수 있습니다. FireDAC 캐스캐이딩 옵션 FireDAC은 FetchOptions(DBMS에서 데이터를 어떻게 취득할지 제어하는 검색옵션), FormatOptions(DBMS의 데이터형식을 FireDAC 데이터형식으로 또는 반대로 매핑하는 형식옵션), UpdateOptions(DBMS 업데이트 전송방법을 제어하는 업데이트 옵션), ResourceOptions(시스템 리소스 사용과 데이터셋의 지속성을 제어하는 자원 옵션), TxOptions(트랜젝션 실행방법을 제어하는 트랜젝션 옵션)을 이용해 다양한 방식으로 기능과 성능을 제어할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/409959 □ [XE5] 오라클과 SQL서버, MySQL에서 모두 돌아가는 유연한 쿼리를 만들 수 있습니다. FireDAC 커맨드 텍스트 전처리 커맨드 텍스트 전처리는 SQL 명령을 데이터베이스에 전달하기 전 파라메터를 치환하고, FireDAC 매크로 함수를 DBMS에 맞도록 치환할 수 있습니다. 대체변수(파라메터 확장을 위해 SQL 문의 일부를 치환), 이스케이프 시퀀스(한번 작성하면 서로 다른 DBMS에서 그대로 사용할 수 있는 DBMS에 의존적이지 않은 SQL문 생성), 조건부 대체(연결된 DBMS에 따라 조건부로 실행되는 SQL 문 작성)를 사용할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/409997 □ [XE5] 데이터베이스 내용을 엑셀 형식의 CSV 파일로 내보내고 가져오는 기능을 구현할 수 있습니다. FireDAC ETL FireDAC의 ETL은 Extract, Transform, Load의 약자로 아래 역할을 합니다. • Extract(추출) : 같은 종 또는 이기종 데이터 소스로부터 데이터를 추출 • Transform(변환) : 쿼리 또는 분석하기 위한 데이터로 저장하기 위해 적절한 포맷과 구조로 변환 • Load(로드) : 최종 목적(데이터베이스, 더 구체적으로, 운용 데이터 저장소, 데이터 마트, 또는 데이터 창고)으로 로드 FireDAC ETL로 아래의 기능을 구현할 수 있습니다. • Query문으로 조회한 데이터를 엑셀에서 사용할 수 있는 CSV 파일로 내보내기 • 텍스트파일의 데이터를 데이터베이스 테이블로 가져오기 • 데이터베이스에서 다른 데이터베이스로 데이터 이동하기 자세히 보기: https://tech.devgear.co.kr/delphi_news/410458 □ [XE5] 데이터베이스에 연결하지 않고, 메모리 데이터셋에 대해 필터링 정렬 등을 사용할 수 있습니다. FireDAC – TFDMemTable TFDMemTable은 메모리 기반 데이터셋입니다. 즉, 데이터베이스 연결 없이 파일 데이터나 코드로 추가한 데이터를 메모리에 올려 데이터셋의 기능(필터링, 정렬 등)을 사용할 수 있습니다. TFDMemTable은 아래 기능을 할 수 있습니다. 디자인타임과 런타임 시 파일 불러오기(Load File), 파일로 내보내기(Save File), 다른 데이터셋의 데이터가져오기(Assign Data) 기능 사용 런타임 시 파일과 스트림으로 데이터 내보내기, 불러오기 기능을 사용할 수 있으며, JSON, XML, Binary 포맷 선택 가능 멀티티어 애플리케이션(REST 클라이언트, 데이터스냅 등)에서 수신 데이터를 보관하는 데이터셋 역할 내부에서 데이터 보관할 시 컬랙션객체(TList, TStringList) 대신 메모리테이블 사용 시 데이터셋의 기능(UI 컨트롤에 데이터바인딩, Local SQL, 필터링, 정렬 등)을 사용해 다양한 기능 손쉽게 구현 가능 Local SQL을 이용해 메모리테이블(데이터셋)에서 쿼리 실행 ETL 기능으로 다른 데이터소스(텍스트, CSV 등)에서 가져온 데이터 보관 자세히 보기: https://tech.devgear.co.kr/delphi_news/410575 □ [XE5] DB에서 가져온 데이터를 대상으로 다시 SQL 쿼리를 실행할 수 있습니다. FireDAC – LocalSQL Local SQL은 DB로부터 애플리케이션의 메모리 상으로 가져온 데이터(데이터셋: TDataSet을 상속받은 객체)를 대상으로 다시 SQL 쿼리를 할 수 있는 기능으로 아래와 같이 사용할 수 있습니다. 여러 이기종 DB들에 대한 쿼리 : 다양한 DB에서 가져온 여러 데이터셋을 대상으로 원하는 데이터 쿼리(조인 가능) 인 메모리 데이터베이스 : TFDMemTable은 메모리상에 있는 데이터셋의 역할 오프라인 모드 쿼리 : 원격 DB에 연결할 수 없는 경우에도, 이미 가져온 데이터셋을 대상으로 쿼리 실행 데이터스냅 클라이언트 쿼리 : 데이터스냅 서버(미들웨어)에서 받아온 데이터셋을 대상으로 쿼리 실행 간편한 마이그레이션 : 애플리케이션 내에서 써드파티를 통해 가져온 데이터셋 객체를 대상으로 쿼리 실행 자세히 보기: https://tech.devgear.co.kr/delphi_news/410465 □ [XE3] 윈도우8의 메트로 UI 모양과 느낌의 애플리케이션을 개발 할 수 있습니다. 메트로 UI 애플리케이션 개발 화면 터치에 최적화된 메트로 UI 애플리케이션을 만들 수 있습니다. File > New > Other 메뉴에서 Delphi Project > VCL Metropolis UI Application 으로 메트로 UI 애플리케이션 개발을 시작할 수 있습니다. □ [XE2] VCL 애플리케이션의 외관을 멋진 현대식 스타일을 적용할 수 있습니다. VCL 스타일 VCL 스타일은 VCL 애플리케이션의 모든 컨트롤, 폼의 테두리, 메뉴, 시스템 메뉴까지 일관되게 현대식 스타일을 적용할 수 있습니다. 별도의 코드 추가나 컴포넌트 추가 없이 프로젝트 옵션의 Appearance 화면(Project > Options > Application > Appearnace)에서 스타일 선택 및 적용할 수 있습니다. □ [XE2] 여러분만의 VCL 스타일을 만들 수 있습니다. Bitmap Style Designer Bitmap Style Designer는 VCL과 파이어몽키 스타일 파일 저작 도구입니다. File > New > VCL Style 메뉴로 새로운 스타일을 만들거나, Open 메뉴로 기존의 스타일 파일을 불러와 편집해 새로운 스타일 파일을 만들 수 있습니다. Tools > Bitmap Style Designer 메뉴를 통해 사용할 수 있습니다. (기본 제공되는 VCL 스타일 파일의 경로는 C:\Users\Public\Documents\Embarcadero\Studio\16.0\Styles(XE8 기준) 입니다.) □ [XE] 정규표현식을 이용하는 프로그램을 개발할 수 있습니다. TRegEx 클래스로 정규표현식 지원 TRegEx 클래스를 이용해 정규표현식을 지원합니다.
  19. Kori

    XE8~XE IDE

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 XE8 ~XE "새 기능 한글 요약본: IDE" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 목록 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [XE8] 코드를 분석하고 더 좋은 품질의 코드를 만들 수 있습니다. 코드 품질을 추적하는 코드 분석기 코드의 라인 수, 파라미터의 수, 중첩된 구문들, 순환 복잡도(Cyclomatic Complexity) 등 여러 가지 코드 분석 통계를 제공합니다. □ [XE8] 여러분의 개발 패턴을 파악하고 개발 생산성을 높일 수 있습니다. 개발자에게 프로젝트 통계 제공 활동 추적을 통해 생산성의 명확한 그림을 제공합니다. □ [XE8] 번거로운 컴포넌트 검색과 설치를 손쉽게 할 수 있습니다. 겟잇(Getit)-패키지 관리자 겟잇 패키지 매니저는 번거로운 컴포넌트 검색과 설치 과정을 간편하게 만들어주는 기능입니다. 소스코드 라이브러리, 컴포넌트와 기타 기능들을 엠바카데로 갯잇 서버에서 손쉽게 찾고, 다운로드 받고 업데이트할 수 있습니다. 사용 방법: 아래 경로로 메뉴를 들어가 사용할 수 있습니다. IDE > Tools > Getit Package Manager .. 자세히 보기: https://tech.devgear.co.kr/delphi_news/412034 □ [XE8] 클립보드 이력을 보관하므로 이전에 복사했던 내용도 붙여넣기 할 수 있습니다. 클립보드 히스토리 클립보드 히스토리는 클립보드에 복사했던 데이터를 목록 제공해 다시 사용할 수 있는 기능입니다. 클립보드 데이터는 클립보드로 복사 시 이전의 클립보드 내용이 없어져 복사 > 붙여넣기를 반복해야 했는데요. 클립보드 히스토리에는 총 10개의 클립보드 데이터 이력을 제공해 개발작엡의 생산성을 작게나마 높여줍니다. 데이터를 클립보드로 다시 복사하는 Copy to clipboard와 코드 에디터로 데이터를 입력하는 Insert in Editor 2가지의 기능을 제공합니다. 자세한 내용은 카스탈리아 기술문서: Clipboard History를 참고하시기 바랍니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/411263 □ [XE8] 동일한 붙여넣기를 여러 소스코드 줄에 한번에 붙여 넣을 수 있습니다. 다중 붙여넣기 □ [XE8] 코드흐름과 중단되는 지점을 한눈에 파악할 수 있습니다. 코드 흐름 강조 코드를 건너뛰는 흐름을 코드 에디터 안에서 눈에 띄도록 표시 □ [XE8] 복잡한 For문, If문의 시작과 끝을 한눈에 알아볼 수 있습니다. 구문 강조표시 구문의 구조가 바로 파악되도록 표시 □ [XE8] 유닛 테스트 마법사를 통해 쉽고 빠르게 유닛테스트와 유닛테스트 프로젝트를 만들 수 있습니다. 유닛 테스트 도구 – DUnitX File > New > Other > Delphi Projects > DUnitX로 이용할 수 있습니다. □ [XE5] 마이그레이션 도구를 통해 컴포넌트 변경, 속성변경, uses절 정리 등의 수작업을 줄여줍니다. reFind.exe 마이그레이션 시 수작업을 줄여주는 도구 reFind는 정규표현식 패턴을 이용해 텍스트파일의 문자열을 찾아 바꿔주는 커맨드라인 도구입니다. reFind는 델파이 소스코드(*.PAS)와 폼파일(*.dfm, *.fmx)의 속성과 유닛명을 일괄적으로 치환(replace)하거나 제거 할 수 있어 마이그레이션의 수작업을 대폭 줄여줍니다. 자세히 보기: http://tech.devgear.co.kr/4107463 □ [XE5] RESTful 방식의 웹서비스를 분석하고 분석내용이 포함된 컴포넌트를 복사하면 웹서비스 연동 애플리케이션을 신속하게 개발할 수 있습니다. REST 디버거: RESTful 방식의 웹서비스를 분석하는 도구 RESTful 방식의 웹서비스에 요청, 응답, 인증, 연결 정보를 입력하면, 웹서비스 인터페이스를 분석하고 확인하는 도구입니다. 원하는 웹서비스를 확인했다면 ‘Copy Component’ 버튼을 클릭한 후, 델파이 프로젝트에서 붙여넣기만 하면 웹서비스의 결과를 델파이 프로젝트에서 로컬 데이터셋처럼 바로 사용할 수 있습니다. REST 디버거는 Tools > REST Debugger 메뉴로 이용할 수 있습니다. □ [XE] SVN, Git, Mercurial의 버전 관리 저장소에 연결하여 IDE 안에서 직접 체크 버전관리 컨트롤이 IDE 안에 통합됨 File > Open From Version Control 메뉴에서 소스 코드 저장소에 바로 연결할 수 있습니다.
  20. Kori

    10.0 시애틀 언어와 컴파일러

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 10.0 시애틀 "새 기능 한글 요약본: IDE" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 10.0 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [10] 표준 C++11이 Win32에도 적용 여러분의 기존 윈도우 앱을 C++11으로 가져오세요. C++11을 준수하는 새 32-bit 윈도우 컴파일러와 클래식 bcc32 컴파일러를 같은 윈도우 프로젝트에서 손쉽게 바꾸어 반영할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415119
  21. Kori

    10.0 시애틀 FMX

    RAD 스튜디오 10.0 시애틀 "새 기능 한글 요약본: FMX" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 10.0 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [10] iOS 64-bit 디버깅 iOS 64-bit와 유니버설 앱을 만들고 디바이스에서 디버깅할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415018 □ [10] 파이어몽키 스타일 디자이너 강화 내장된 파이어몽키 스타일 디자이너가 강화되어, 스타일북 컴포넌트에 여러가지 플랫폼 스타일을 담을 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415102 □ [10] 윈도우 10용 FMX 강화 롤오버 되는 컨트롤 힌트, TEdit, TMemo 용 플랫폼 네이티브 렌더링, ZOrder 강화, 멀티뷰 업데이트(윈도우 10 용), 스위치 컨트롤, 이미지를 지원하는 클립보드 등 자세히 보기: https://tech.devgear.co.kr/delphi_news/415125 □ [10] 파이어몽키 네이티브 윈도우 컨트롤 TEdit, TMemo, TPresentedScrollBox(신규) 세가지 컨트롤을 파이어몽키 스타일과 네이티브로 렌더링 할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415125 □ [10] 안드로이드 서비스 개발 안드로이드 서비스 앱을 개발하면 안드로이드 OS에서 백그라운드 작업을 실행할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415128 □ [10] 안드로이드 인텐트 강화 모든 종류의 인텐트 액션을 처리할 수 있도록 애플리케이션을 등록할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/416115 □ [10] TBeaconDevice 컴포넌트 블루투스 LE를 지원하는 장치(디바이스)에서 비콘의 광고데이터 신호를 발생할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/416134 □ [10-핫픽스] OS X 앨 캐피탠(El Capita: 10.11)에 맞춘 PAServer 핫픽스 이번 핫픽스에서는 OSX 엘 캐피탠 지원과 iOS SDK 호환성 업데이트가 추가되었습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415998
  22. Kori

    10.0 시애틀 RTL

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 10.0 시애틀 "새 기능 한글 요약본: RTL" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 10.0 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [10] JSON과 BSON 스트림 JSON 데이터를 DOM 모델이 아닌 스트리밍 모델로 읽고, 쓸수있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/416103 □ [10] FireDAC NoSQL 드라이버로 몽고DB 지원 몽고DB는 가장 인기 있는 NoSQL 데이터베이스입니다. FireDAC 기능 향상에는 API 맵핑, 데이터 처리, JSON과 BSON 포맷 지원 (새 RTL) 등이 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415015
  23. Kori

    10.0 시애틀 VCL

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 10.0 시애틀 "새 기능 한글 요약본: VCL" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 10.0 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [10] 윈도우 10 VCL 컨트롤 윈도우 10 용 새 VCL 컨트롤을 이용해 윈도우 10 UI를 손쉽게 적용할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/414834 □ [10] TSplitView 윈도우 10 시작 메뉴에서 사용하는 일명 햄버거 메뉴 형태 구현에 용이합니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/414834 □ [10] 윈도우 10 스타일 지원 VCL 스타일을 적용해 1분만에 윈도우 10 최신신 룩앤필을 적용할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/414848 □ [10] 공용 대화 상자와 웹브라우저에도 VCL 스타일 적용 VCL 스타일이 공용 대화 상자와 웹브라우저에도 적용됩니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/414855 □ [10] 윈도우 10 서비스 활용 알림, 계약(Contract) 등의 윈도우 10 플랫폼 서비스 기능을 컴포넌트와 API로 쉽게 활용할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/414873
  24. Kori

    10.0 시애틀 IDE

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 10.0 시애틀 "새 기능 한글 요약본: IDE" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 10.0 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. 10 시애틀 - IDE 관련 주요 업데이트 요약 [10.0] IDE 메모리 개선 [10.0] VCL 애플리케이션에 High DPI 인식을 활성화할 수 있는 옵션 새로 추가 [10.0] 멀티-모니터 구성으로 작업 환경을 크게 향상 [10.0] IDE 생산성 기능 추가 [10.0] 겟잇(GetIt) 라이브러리 확장 [10.0] 저장되지 않은 파일 자동 복구 [10.0] IDE 메모리 개선 RAD Studio IDE 메모리가 개선되어 더 큰 프로젝트를 더 빠르게 코딩하고 컴파일 할 수 있다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/416097 [10.0] VCL 애플리케이션에 High DPI 인식을 활성화할 수 있는 옵션 새로 추가 그림. VCL 애플리케이션이 High DPI를 인식할 수 있도록 하는 옵션이 IDE에 새로 추가되었다. Project > Options > Application 의 매니페스트(Manifest )에서 High-DPI 옵션을 선택하고 빌드한 VCL 애플리케이션은 4K 이상의 High DPI 모니터를 인식한다. [10.0] 멀티-모니터 구성으로 작업 환경을 크게 향상 개발 환경의 폼 디자이너와 오브젝트 인스펙터, 툴 팔레트 등의 창 여러 보조 모니터에 "분리하여" 배치/크기 조정 등을 할 수 있어서 작업 환경이 크게 향상된다. [10.0] IDE 생산성 기능 추가 20개 이상의 IDE 생산성 기능들이 내장되어 생산성, 품질, 안정성이 향상됩니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415038 [10.0] 겟잇(GetIt) 라이브러리 확장 비콘펜스(BeaconFence)등 새로운 오픈 소스와 컴포넌트 패키지를 IDE에서 직접 확보할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/415122 [10.0] 저장되지 않은 파일 자동 복구 시스템 충돌 등으로 비정상적으로 IDE가 종료되는 경우 IDE는 사용자의 저장하지 않은 작업을 복구를 지원합니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/416073
  25. Kori

    10.1 베를린 FMX

    << 위로 이동 (최신 버전 포함 모든 버전) RAD 스튜디오 10.1 베를린 "새 기능 한글 요약본: FMX" 입니다. 모든 새 기능, 강화된 기능, 버그 픽스 등에 대해서는 Docwiki의 What's New 10.1 (영문 보기, 한글번역 보기) 와 관련 페이지를 보기 바랍니다. □ [10.1] FireUI 앱 미리보기 개발중인 앱 화면을 각 디바이스에서 실시간으로 확인하며 개발할 수 있습니다. 자세히 보기: https://youtu.be/xO3g7Bz-bgk □ [10.1] 연락처 컴포넌트(TAddressBook) 연락처 컴포넌트로 연락처 정보를 읽고 쓸 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/421632 □ [10.1] 스타일 디자이너(Style Designer) 개선 스타일 디자이너에 미리보기, 클립보드 기능 등이 강화되어 더욱 사용하기 편리해졌습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/421717 □ [10.1.1] iOS 32비트 디버거 핫픽스 iOS 32 비트 타겟으로 빌드 후 디버깅이 되지 않는 이슈를 해결합니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/428450 □ [10.1.1] TGrid 네이티브 렌더링 지원 – iOS TGrid의 ControlType 속성을 변경해 스타일과 플랫폼 렌더링을 선택할 수 있습니다. 자세히 보기: https://tech.devgear.co.kr/delphi_news/425609 □ [10.1.1] 갤럭시 S7 Edge(안드로이드 6.0.1) 디버깅 이슈 해소 자세히 보기: https://tech.devgear.co.kr/delphi_news/422527
×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.