[Delphi] 프로그래밍 팁 모음

2026. 6. 9. 21:15·Programming/Delphi

로케일 정보 읽기시스템

로케일 정보 읽어오는 방법 지금 사용하는 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 드라이브 목록 가져오기

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로 저장하기

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;

'Programming > Delphi' 카테고리의 다른 글

[Delphi] 스트링그리드 제어하기  (0) 2026.06.22
[Delphi] 파일에서 이미지 타입 읽기  (0) 2026.06.14
[Delphi] 웹으로 파일 전송(POST) 하는 프로그램  (0) 2026.06.08
[Delphi] 웹브라우져 컨트롤을 이용하여 출력하기  (0) 2026.06.06
DirectShow 기본 Cam 프로그램  (0) 2026.05.31
'Programming/Delphi' 카테고리의 다른 글
  • [Delphi] 스트링그리드 제어하기
  • [Delphi] 파일에서 이미지 타입 읽기
  • [Delphi] 웹으로 파일 전송(POST) 하는 프로그램
  • [Delphi] 웹브라우져 컨트롤을 이용하여 출력하기
레이조(RayCho)
레이조(RayCho)
개발자 레이조(RayCho)의 블로그입니다. 똑똑하게 배우고 기록하는 공간
  • 레이조(RayCho)
    레이(Ray)의 개발이야기
    레이조(RayCho)
  • 전체
    오늘
    어제
    • 분류 전체보기 (73) N
      • Programming (73) N
        • Python (5)
        • Flutter (4)
        • Delphi (25)
        • Lazarus (1)
        • C#.NET (13) N
        • ASP.NET (5)
        • Database (6)
        • Game Dev (5)
        • Web (6)
        • ETC (3)
  • 블로그 메뉴

    • 홈
    • Introduce
    • 태그
    • 방명록
  • 링크

    • Naver Blog
    • Diary Blog
  • 공지사항

  • 인기 글

  • 태그

    Web
    델파이
    프로그래밍
    소스코드
    ASP.NET
    VCL
    POST
    PSP
    C#
    웹프로그래밍
    기초
    Python
    개발환경
    csharp
    delphi
    Flutter
    C++
    iis
    objectpascal
    mssql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
레이조(RayCho)
[Delphi] 프로그래밍 팁 모음
상단으로

티스토리툴바