델파이로 만든 어플리케이션은 Vista에서 ALT 키 누를 때 화면이 깨진다

No Comments

문제

Delphi 2007 이전의 VCL로 만들어진 어플리케이션의 경우 Windows Vista에서 ALT 키를 누르면 버튼이나 체크박스 등의 기본 콘트롤들이 깨지는 현상이 발생한다. 

ALT 키 누르기 전 상태

ALT 키 누르기 전 상태


ALT 키 누른 후

ALT 키 누른 후

원인

 이 현상은 윈도 테마가 적용된 어플리케이션에서만 발생하며 ALT 키를 누르면 WM_UPDATEUISTATE 메시지가 각 콘트롤에게 전달되고 이 때 단축키가 표시되는데 VCL에서는 이 메시지를 처리하지 않는다.

해결

아래 링크에 나와 있는 방법을 사용하면 된다.
ALT Key press causes controls to disappear under Themes in Vista and XP

Delphi 7 이전 버전의 경우에는 한가지 다른 방법이 있다.
AcroEdit는 Delphi 6 버전으로 개발되고 있는데 Delphi 6 에서는 XP Theme를 기본적으로 지원하지 않는다. 그래서 대부분의 경우 Delphi 7부터 기본으로 포함된 Mike Lischke의 Theme Manager를 사용한다.

 Theme Manager는 어플리케이션이 실행될 때 모든 폼과 콘트롤의 윈도 프로시저를 후킹해서 테마 지원 코드를 삽입하도록 되어 있다. 따라서 대부분의 VCL 기본 콘트롤에 대해 별도의 윈도 프로시저가 소스 코드 상에 존재한다. ThemeMgr.pas 파일을 수정해서 각 콘트롤의 윈도 프로시저(ButtonControlWindowProc, GroupBoxWindowProc 등)에

WM_UPDATEUISTATE: Control.Invalidate;

를 삽입해 주면 상기 문제가 해결된다.

윈도에서 2GB 이상의 메모리를 사용하는 방법

No Comments

64비트 Windows에서 32비트 프로그램이 2GB 이상의 메모리를 사용하는 방법

32비트 윈도에서 돌아가는 프로그램이 최대한 사용할 수 있는 메모리는 2GB까지입니다. 32비트 윈도의 실행 스위치(/3GB)를 조절하면 3GB 까지 사용할 수 있고 64비트 윈도에서는 최대 4GB까지 사용할 수 있습니다(정확한 메모리 사용량 정보는 MS Knowledge Base Q889654 참조). 하지만 두가지 경우 모두 실행 파일의 옵션에 LARGEADDRESSAWARE 옵션이 켜져 있어야만 가능합니다.

델파이의 경우(Delphi 6 이상)

const
    IMAGE_FILE_LARGE_ADDRESS_AWARE = $0020;

{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}

Visual C++의 경우(VIsual Studio 2005 기준)

프로젝트 옵션의 Linker->System의 Enable Large Addresses 옵션을

Support Larger Than 2 GigaBytes (/LARGEADDRESSAWARE)

로 설정 한다.

델파이 관련 위키

No Comments

Delphi Wiki

Determine Delphi Application
Good Quality Applications Built With Delphi
Good Quality Applications Built With C++Builder

Typed list generator for Delphi

No Comments

 델파이로 프로그램 하다 보면 다양한 데이터 형을 관리하는 리스트 클래스가 필요할 때가 있습니다.(예 : TStringList) 저의 경우 필요할 때 마다 일일이 클래스를 직접 만들어 사용하곤 했는데요.

TeamB 멤버 Peter Below가 아주 오래전에 간단한 유틸리티(Typed Lists Generator)를 만들어서 배포했었네요. 생성되는 클래스의 템플릿은 소스를 직접 수정하면 변경할 수 있겠구요. 간단하지만 아주 유용한 유틸리티이네요.

Typed Lists Generator 동작 화면

Typed Lists Generator 동작 화면

Delphi 2007 for Win32 Compiler Version

No Comments

델파이 컴파일러 버전에 따라서 다른 루틴이 컴파일 되도록 조건부 컴파일을 하기 위해서 사용하는 컴파일러 버전 번호가 Delphi 2007 for Win32 에서는 VER185 랍니다.

Delphi 2006에서 컴파일된 DCU 파일과의 호환성을 위해 VER180 도 정의하고 있답니다.

Older Entries Newer Entries