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

델파이 소스코드의 컴포넌트 정보를 일괄 변경할 수 있는 데브기어 컴포넌트 컨버터 소개


Recommended Posts

이 문서의 목적:

델파이 소스코드의 컴포넌트 정보를 일괄변경 변경할 수 있는 데브기어 컴포넌트 컨버터를 소개합니다.

데브기어 컴포넌트 컨버터

image.png

데브기어 컴포넌트 컨버터는 델파이 컴포넌트를 일괄변경할 수 있는 자동화 도구이다. 

이 도구의 특징은 "변환패턴 자체를 델파이 코드로 작성할 수 있다"는 것이며, 이로 인해 복잡한 패턴도 원하는 방식으로 변환하도록 구현 가능하다.

다음 목적으로 데브기어 컴포넌트 컨버터가 개발 및 활용되었다.

  • TReadGrid를 퀀텀 그리드(TcxGrid, TcxGridLevel, TcxBandedTableView)로 변환(참고)
  • TRealDBGrid를 퀀텀 그리드(TcxGrid, TcxGridLevel, TcxDBBandedTableView)로 변환(참고)
  • TFDUpdateSQL의 Connection 속성을 TFDQuery의 Connection 속성을 복사해 추가(참고)
  • TFDAutoIncField에 AutoIncrementSeed 속성이 없는 경우에 한해, AutoIncrementSeed, AutoIncrementStep 속성 추가(참고)

사용방법

데브기어 마이그레이션 컨설팅 중 실사용 목적으로 개발된 프로그램으로 사용법위주로 설명한다.
(혹시, 부족하거나 추가로 궁금한 내용은 공개된 소스코드에서 직접 확인하거나 이글 또는 저장소의 이슈 기능으로 질문하시기 바랍니다.)

설치방법

데브기어 컴포넌트 컨버터는 오픈소스로 제공된다.

데브기어 컴포넌트 컨버터는 두가지 프로젝트를 제공한다.

  • 컴포넌트 컨버터(CompMigrationTool) : 델파이 폼파일과 소스파일에서 컴포넌트 정보를 변경
  • 소스코드 컨버터(SrcMigrationTool) : 델델파이 소스파일에서 컴포넌트를 사용한 코드를 찾아 변경

(MigrationToolGroup.groupproj 프로젝트 그룹 파일을 열어 2개 프로젝트를 한번에 열수 있다.)

변환 패턴 추가 방법

두개 프로젝트 공통으로 TConverter라는 베이스 클래스를 공통으로 제공한다.

기능을 추가는 TConverter 클래스를 상속받아 메소드를 제정의하는 방식으로 기능을 구현한다.

컴포넌트 컨버터(CompMigrationTool)

  TConverterLabelColor = class(TConverter)
  protected
    function FindComponentInDfm(AData: TConvertData): Boolean; override;

    function GetTargetCompClassName: string; override;
    function GetConvertCompClassName: string; override;

    function GetConvertedCompText(ACompText: TStrings; var Output: string): Boolean; override;

    function GetDescription: string; override;
  end;

initialization
  TConvertManager.Instance.Regist(TConverterLabelColor);

EtcPropsConverter.pas 일부로 주요 메소드를 설명한다.

  • FindComponentInDfm : DFM 파일에서 변환할 컴포넌트가 있는지 판단결과 반환
  • GetTargetCompClassName / GetConvertCompClassName : 변환대상 클래스명과 변환이후 클래스명을 반환
  • GetConvertedCompText : 컴포넌트 문자열(ACompText)를 받아 변환 후 반환(Output)
  • GetDescription : 컨버터의 설명을 반환

이후 컨버터 매니저(TConverterManager)에 컨버터 클래스를 등록하면 메인화면의 컨버터 목록에 표시된다.

소스코드 컨버터(SrcMigrationTool)

  TColumnConverter = class(TConverter)
  protected
    function GetCvtCompClassName: string; override;
    function GetDescription: string; override;
    function GetCvtBaseClassName: string; override;
  published
    [Impl]
    function ConvertFixedCount(AProc, ASrc: string; var ADest: string): Integer;
    [Impl]
    function ConvertColCount(AProc, ASrc: string; var ADest: string): Integer;
    ... 생략 ...
  end;

initialization
  TConvertManager.Instance.Regist(TColumnConverter);

ColumnConverter.pas 일부로 주요 메소드를 설명한다.

  • GetCvtCompClassName : 변환할 컴포넌트 클래스명을 반환하며, 소스코드가 해당 클래스명을 사용하는 경우 변환을 진행
  • GetDescription : 컨버터의 설명을 반환
  • [Impl] / [Intf] : 구현부(Implimentation 영역)과 선언부(interface 영역)를 대상으로 변환할지를 지정하는 Attribute
  • ConvertXXXXXX 함수들 : 실제 변환을 수행할 메소드들을 추가(Convert로 시작하고, 동일한 매개변수와 반환 데이터타입으로 지정할 것)

컨버터 메소드 구현 예시 - (Org)의 소스코드를 (Mig)로 변환하는 패턴 구현

function TColumnConverter.ConvertFixedCount(AProc, ASrc: string;
  var ADest: string): Integer;
//(Org) if not (RealDBGrid1.DataSource.DataSet.State in [dsInsert]) then
//(Mig) if not (RealDBGrid1DBBandedTableView1.DataController.DataSource.DataSet.State in [dsInsert]) then
const
  SEARCH_PATTERN  = GRIDNAME_REGEX + '\.[Ff]ixed[Cc]ount';
  REPLACE_FORMAT  = '[[COMP_NAME]]DBBandedTableView1.FixedCount';
begin
  Result := 0;

  if TryRegExGridConvert(ASrc, SEARCH_PATTERN, REPLACE_FORMAT, ADest) then
    Inc(Result);
end;

검색 패턴(SEARCH_PATTERN)과 변환 포맷(REPLACE_FORMAT)을 정의하고, 정규표현식을 이용해 검색 및 치환한다.

대부분의 기능은 내부적으로 구현(SrcConverter.pas, SrcConvertUtils.pas)되어 있다.

참조 컨버터

컴포넌트 컨버터 디렉토리소스코드 컨버터 디렉토리에 참고용 컨버터 클래스를 남겨두었다. 기존 진행한 프로젝트의 변환 패턴을 참고할 수 있다.

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

 공유하기

×
×
  • Create New...

중요한 정보

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