[Delphi] 프로그래밍 팁 모음 #1
로케일 정보 읽기
시스템 로케일 정보 읽어오는 방법 지금 사용하는 OS가 어떤 언어를 사용하고 있는지구분하기 위한 코드 이번 프로젝트에 중국어를 표현해야 되서 사용하게 된 코드
var
Buffer: array[0..2] of Char;
begin
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME, Buffer, sizeof(Buffer));
//Buffer 이 "KOR" 이면 한국어 이다.
//"CHI", "CHT" 이건 중국어
end;
CD-ROM 드라이브 목록 가져오기
CD-ROM 드라기브 목록 가져오기
var
CDRom: Byte;
begin
for CDrom := 65 to 90 do begin
if GetDriveType(PChar(Chr(CDRom) + ':')) = 5 then
// CDROM 드라이브인지 체크
// 0 : 드라이브가 아님
// 1 : 루트 디렉토리 없음
// 2 : 이동식 디스크
// 3 : 고정 디스크
// 4 : 원격 디스크
// 5 : CDROM
// 6 : 램디스크
cboDrive.Items.Add(PChar(Chr(CDRom) + ':'));
end;
컨트롤 한/영 토글하기
설정하는 컨드롤(TEdit)등에 키보드의 한/영키를 누른 효과를 줍니다.
uses에 imm 을 추가합니다. 그리고 한/영 모드 타입 TImeInputMode = (imHangul, imEnglish); 선언해 줍니다.
procedure SetImeInputMode(const AHandle: THandle; const Value: TImeInputMode);
var
hContext: HIMC;
dwSentence : DWORD;
dwConversion : DWORD;
begin
hContext := ImmGetContext(AHandle);
try
ImmGetConversionStatus(hContext, dwConversion, dwSentence);
if Value = imHangul Then
ImmSetConversionStatus(hContext, IME_CMODE_HANGUL, dwSentence)
else
ImmSetConversionStatus(hContext, IME_CMODE_ALPHANUMERIC, dwSentence);
finally
ImmReleaseContext(AHandle, hContext);
end;
end;
사용법
SetImeInputMode(Handle,imHangul);
마우스로 폼 이동시키기
프로그램을 작성할때 기본폼은 타이틀을 마우스로 움직여야지만 폼이 이동합니다.
타이틀이 아닌 폼의 아무곳이나 드래그하여도 폼이 이동하도록 하는 코드 입니다.
폼이벤트의 MouseDown 이벤트나 원하는 컴포넌트에 코딩하면 됩니다.
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
Handle 인 기본 폼이동이고
Panel1.Handle 을 지정하면 패널을 품안에서 패널을 이동할수 있습니다.
윈도우즈 디렉토리/버전 구하기
Delphi 에서 Win32Api를 이용해서
윈도우즈 설치디렉토리와 윈도우즈 버전 구분하기
//윈도우 디렉토리 구하기
var
WinPath : array[0..MAX_PATH + 1] of char;
// Windows.pas 에 정의 되어 있음 MAX_PATH = 260;
begin
GetWindowsDirectory(WinPath,MAX_PATH);
end;
//윈도우즈 버전/플랫폼 구분
procedure GetOSVersion;
var
VersionInfo: TOSVersionInfo;
Platform: string;
MajorVersion,MinorVersion,Build: DWORD;
begin
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
GetVersionEx(VersionInfo);
with VersionInfo do begin
case dwPlatformId of
VER_PLATFORM_WIN32s: Platform := 'Windows 3x';
VER_PLATFORM_WIN32_WINDOWS: Platform := 'Windows';
VER_PLATFORM_WIN32_NT: Platform := 'Windows NT';
VER_NT_WORKSTATION : Platform := 'Windows NT Workstation';
VER_NT_SERVER: Platform := 'Windows NT Server';
end;
MajorVersion := dwMajorVersion;
MinorVersion := dwMinorVersion;
Build := dwBuildNumber;
end;
end;
Win32 Api를 이용하는 방법을 정리해봤습니다.
실행할때마다 (OCX,DLL) 등록하기
프로그램을 개발하면셔 사용되는 라이브러리(OCX,DLL)를 등록해서(Regsvr32 사용) 사용해야 할경우 에 설치프로그램 없이 프로그램을 실행하기 위한 코드 입니다.
이코드를 사용하게 된경우는 CD-ROM 에서 실행되는 프로그램을 만들때 사용하였습니다.
CD-ROW에서 동작하는 프로그램 특성상 설치하거나 라이브러리를 등록해주어야
실행되다는 조건이 있으면 안되기 때문에 이 소스가 필요했습니다.
* 프로젝트 .dpr 에 아래 소스를 삽입합니다.
uses ComObj;
begin
Application.Initialize;
WFileName := ExtractFilePath(Application.ExeName)+ DLLNAME; //driver
if FileExists(WFileName) then begin
// OCX, DLL 등록 Regsvr32 를 한 효과를 냅니다.
RegisterComServer(WFileName);
end
else begin
Application.Terminate;
Exit;
end;
Application.Title := ''Image viewer;
Application.CreateForm(TFmMain, FmMain);
Application.Run;
end.
텍스트를 UTF-8로 저장하기
텍스트를 UTF-8로 저장하기
UTF8String 타입은 System 에 선언 되어 있습니다.
델파이 6부터 사용할수 있는 코드 입니다.
var
U: UTF8String; //변수를 하나 선언하고
begin
// UTF-8변환
U := UTF8Encode(WideString('변환할내용'));
with TFileStream.Create('저장할파일명', fmCreate) do
try
Write(Pointer(U)^, Length(U));
finally
Free;
end;
end
UTF-8을 Ansi로 변환하려면 UTF8Decode('')
트루타입 폰트 체크하기
폰트명을 입력하면
트루타입 폰트인지 아닌지 체크하는 팁 입니다.
function IsTrueTypeFont(FontName : string) : boolean;
const
PITCH_MASK: byte = $0F;
var
TxMetric: TTextMetric;
TempCanvas : TCanvas;
PitchTest : byte;
begin
TempCanvas := TCanvas.Create;
TempCanvas.Handle := CreateCompatibleDC(0));
TempCanvas.Font.Name := FontName;
GetTextMetrics(TempCanvas.Handle, TxMetric);
PitchTest := TxMetric.tmPitchAndFamily and PITCH_MASK;
Result := ((PitchTest and TMPF_TRUETYPE) <> 0));
TempCanvas.free;
end;
댓글
댓글 쓰기