이번에 새로 출시된 RAD Studio 2009에서는 좀 더 구체적이고 혁신적인 델파이 개발 도구의 변화가 있었는데 Delphi .NET Compiler가 RemObjects사의 새 컴파일러 엔진으로 교체됨과 함께 일말의 개발 도구가 Delphi IDE로부터 독립하여 Visual Studio Shell 버전으로 통합되었습니다. 결과적으로 RemObjects사가 줄곧 선보였던 오브젝트 파스칼 기반 개발 환경을 이번에서야 제대로 선을 보이게 되었네요.

사용자 삽입 이미지

출처: RemObjects Homepage

Delphi Prism이라고 불리는 이번 릴리즈는 예전의 Delphi 프로그래밍 환경이 그랬던것처럼 크로스 플랫폼을 강점으로 내세우고 있습니다. Delphi Native의 경우 Delphi와 Kylix의 조합이었었던걸 기억하시는 분들이 많을 줄로 압니다. Delphi Prism의 경우, 별도의 브랜드를 두는 것은 아니며 Delphi Prism .NET을 통하여 빌드 타겟을 MS.NET과 Mono로 놓고 진행할 수 있습니다.

좀 더 자세한 정보는 아래 웹 사이트를 참고하시면 되겠습니다.

http://www.codegear.com/products/delphi/prism
http://www.remobjects.com/prism

스크린 샷

사용자 삽입 이미지


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

최근 일하고 있는 곳에서 Delphi 2007의 설치가 올바르게 이루어지지 않는 문제 때문에 고민을 하고 있었다. 여러 가지 방안을 시도해보았지만 해결이 되지 않아서 고민하고 있었던 중 CodeGear 측에서 제시한 솔루션 하나를 적용해보니 문제가 올바르게 해결되는 듯 하다.

일부 Antivirus 소프트웨어가 Windows 운영 체제의 설치나 일반 응용프로그램 설치에 간섭하여 문제를 발생시키는 것은 늘상 있어왔던 일이다. Install Aware 엔진 역시 이 문제를 피해갈 수 없었던 모양이다. 이 글을 작성하는 현 시점에서 최신 버전의 V3 엔진을 사용하는 컴퓨터에서는 아마도 Install Aware로 제작된 소프트웨어 설치 프로그램 상당수가 동작하지 않을 가능성이 있으니 설치를 하기 위해서는 V3 자동 감시 엔진 서비스를 일시적으로 중단해야 한다. 여기에는 Delphi 2007 - 또는 - CodeGear RAD Studio 2007도 포함된다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Delphi의 VCL 컨트롤 중에서 TStatusBar 컨트롤이 있습니다. 이 컨트롤은 대부분의 경우 정상적으로 원하는대로 Owner Draw를 구현하여 사용할 수 있지만 뜻하지 않게 일부 운영 체제에서는 Owner Draw가 회피당하거나 (Windows 2000), Owner Draw에 대한 처리가 정확히 마무리되지 않아서 잔상이 남는 버그 (Windows XP, Windows Server 2003)가 발생하곤 합니다. 이 문제를 해결하기 위한 두 가지 방법을 소개하고자 합니다. 참고로 이 버그는 Windows NT 4.0 + Delphi 5.0 환경에서도 발견이 되었으며 이에 그치지 않고 Delphi 2007 + Windows 2000/XP/Server 2003에서도 여전히 나타나는 버그로 보입니다.

Solution 1: 제일 손쉬운 방법은 TStatusBar 컨트롤의 부모를 TForm이 아닌 TPanel로 하여 TPanel을 대신 TForm에 올려놓는 방법입니다. 이렇게 하면 고질적인 Owner Draw 렌더링 버그를 원천적으로 해결하고 멤버 변수 선언에도 영향을 주지 않으므로 리팩터링이 필요하지 않습니다.

Solution 2: 이미 디자인타임에서 컨트롤을 많이 사용하였고 마우스로 조작하기 까다로운 UI를 가진 창에서 문제가 발생한다면 - 또는 - 프로그래밍 방식으로 문제를 해결할 필요가 있다면 다음의 지침에 따라 WndProc 메서드를 추가 구현합니다.

Procedure TForm1.WndProc(var Message: TMessage);
Begin
   Case Message.Msg Of
      { 이런저런 메시지 처리 코드가 포함될 것입니다. 생략합니다. }
      WM_DRAWITEM:
      Begin
         If (Message.WParam) <> 0 And (Message.LParam) <> 0 Then
         Begin
            With PDrawItemStruct(Message.LParam)^ Do
            Begin
               If ctlType = ODT_TYPE Then
                  ctlType := 0;
            End;
         End;
      End;
   End;
   { 상위 윈도 메시지 처리기를 호출하지 않으면 문제가 발생하므로 꼭 확인합니다. }
   Inherited WndProc(Message);
End;

굵게 표시한 코드가 문제를 해결하는데 필요한 코드와 잊지 말아야 할 코드들입니다. 만약 WndProc 메서드를 처음 오버라이드하는 경우 상위 메시지 처리기 호출을 놓치기 쉽습니다. 폼을 생성하지 못하고 에러 메시지만 나온 후 프로그램이 바로 종료되어버린다면 반드시 WndProc 메서드가 상위 메시지 처리기를 올바르게 호출하고 있는지 점검해야 하겠습니다.

도움이 되셨기를 바랍니다. :-)

자료 출처: http://buglist.jrsoftware.org/generated/entry0624.htm

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

종전의 Delphi 7.0 기반 프로젝트를 Delphi 2007으로 마이그레이션하면서 드디어 Delphi 2007에서 개인적으로 가장 쓰고 싶었던 기능인 msbuild 지원을 시험해보았다. msbuild는 .NET Framework 2.0때부터 추가된 기능으로 Unix의 make나 Java의 Ant와 같은 통합 빌드 도구이다.

마이그레이션했던 프로젝트의 규모가 상당히 크고 프로젝트의 수가 많았던 터라 "한번에 빌드하는 것"의 중요성이 참으로 크다. Delphi 2007 이전 버전의 경우에는 이런 일괄 빌드를 위하여 make 유틸리티 등을 도입하여야만 했지만 Delphi 2007은 프로젝트 파일 자체를 msbuild와 호환될 수 있게 생성하므로 바로 이용할 수 있다.

무엇보다도 Delphi 2007의 MSBUILD 지원은 Visual Studio 2005/2008 기반의 프로젝트와 같이 운용될 수 있기 때문에 그 의미가 더 크다. IDE 자체적으로 프로젝트 파일을 공유한다거나 하는 것은 아니지만 MSBUILD라는 단일 도구를 사용할 수 있다는 점이 참으로 즐거운 일이다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)