프로그래밍 319

PlaySound 함수 이용 소리 내기.

효과 소리를 내기 위해서 PlaySound API를 이용합니다. function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall; MMSystem 유닛에 위와 같이 정의되어 있습니다. 첫번재 파라미터 pszSound 는 효과 소리 파일에 대한 별명 / 리소스 아이디 / 파일명이 옵니다. 두번째 파라미터 hmod 는 별명이나 파일명인 경우, 0을 넣고 리소스인 경우 해당 리소스인 인스턴스 핸들을 넘겨줍니다. 세번째 파라미터 fdwSound에는 다음과 같은 파라미터가 올 수 있습니다. SND_SYNC = $0000; { play synchronously (default) } SND_ASYNC = $0001; { play as..

[GR32] 다각형 영역만 클립보드로 복사하기

공개 패키지 Graphics32 1.8 버전이 새로 나왔습니다. 이를 기존 프로젝트에 적용하였더니, 한군데서 오류가 발생하였습니다. 이미지의 Interpolate를 처리하기 위한 필터가 클래스 형태로 변경되었습니다. 기존 코드(1.7) FBuffer32.StretchFilter=sfLinear; 신규 코드(1.8) TLinearResampler.Create(FBuffer32); 이런식으로 적용하였더니, 바로 그대로 사용 가능하였습니다. 1.7 버전의 ImgView에 있던 레이어의 확대 버그가 1.8에서는 해결된것 같습니다. 다각형 영역만 클랩보드로 복사하는 것은 Examples의 Sprites 예제를 응용하면 됩니다. 다음 코드는 Sprites 예제의 생성자 코드의 일부입니다. procedure Load..

브라우저를 포함한 창의 크기를 HTML 소스에 따라 자동 조정하기

서론 델파이 프로그램을 만들다 보면 공지사항 팝업창의 경우 일일이 컴포넌트를 배치하여 프로그래밍 하는 것 보다는 손쉽게 HTML로 화면을 제적하고, 폼 안에 브라우저를 넣어서 필요한 화면을 HTML로 보여줄 경우가 있습니다. 이런 경우, 팝업 형태의 폼을 한 만들고 TWebBrowser나 TEmbeddedWB 컴포넌트를 위로 올려서 디자인된 HTML 화면 크기에 맞도록 ClientWidth, ClientHeight 값을 조정하여 하곤 하였습니다. 하지만, 이런 식으로 작업을 하게 되면 팝업 창으로 표시할 각 HTML 내용들이 모두 같은 크기라면 문제가 없지만, 서로 다른 크기라면 그 각각의 경우를 위하여 프로그램 소스에서 직접 ClientWidth, ClientHeight를 따로따로 코딩해 주어야 하고,..

WM_SYSCOMMAND로 NONCLIENT 영역의 마우스 동작 흉내내기

WM_SYSCOMMAND 메시지로 윈도우 폼의 타이틀 바가 아닌 클라이언트 영역에서 마우스를 눌렀을 때, WM_MOUSEDOWN 메시지에서 WM_SYSCOMMAND의 WParam으로 $F012를 보내면, 폼을 이동시키는 효과를 그대로 낼 수 있습니다. 보통 SC_CLOSE 등 미리정의된 상수가 있지만, 아래 값들은 상수로 정의되어 있지 않아서 WParam으로 직접 넣어 주면 됩니다. $F001 : 우측 고정 넓이 조절 $F002 : 좌측 고정 넓이 조절 $F003 : 하단 고정 높이 조절 $F004 : 우하단 고정 전체 크기 조절 $F005 : 좌하단 고정 전체 크기 조절 $F006 : 상단 고정 높이 조절 $F007 : 우상단 고정 전체 크기 조절 $F008 : 좌상단 고정 전체 크기 조절 $F009,..

문자열에서 숫자만 추출하는 함수

문자열에서 숫자만 추출하는 경우가 생겨 함수로 한번 만들어 봤습니다. 문자열 데이터에서 숫자(소수점 포함)만 추출합니다. 추출한 문자열을 StrToFloatDef 함수 등을 이용하여 숫자형으로 변환할 수 있습니다. function ExtractNumeric(const strData: string): string; var i, nLen: integer; p, d: PChar; begin nLen := Length(strData); SetLength(Result, nLen); p := @strData[1]; d := @Result[1]; for i := 0 to nLen - 1 do begin if (p^ in ['0'..'9', '.', '-']) then begin d^ := p^; inc(d); end..

TEdit에서 Alignement 처리하기.(왼쪽/가운데/오른쪽 정렬)

TLabel 등에는 TAlignment 속성이 있어서 정렬 처리가 가능합니다. 하지만 TEdit에는 TAlignment 관련 속성이 없습니다. 이를 처리하기 위해서 GetWindowLong 및 SetWindowLong Windows API를 이용합니다. TEdit는 윈도우의 기본 내장 클래스인 edit 컨트롤을 래핑해 놓은 것으로 다음과 같은 스타일을 적용할 수 있습니다. { Edit Control Styles } {$EXTERNALSYM ES_LEFT} ES_LEFT = 0; {$EXTERNALSYM ES_CENTER} ES_CENTER = 1; {$EXTERNALSYM ES_RIGHT} ES_RIGHT = 2; {$EXTERNALSYM ES_MULTILINE} ES_MULTILINE = 4; {$EX..

아파치(Apache) 서버의 서버 정보 표시 안하기.

웹 서버의 응답 헤더에 보면 해당 서버의 상세한 정보가 표시됩니다. 운영체제부터, 서버의 버전 및 설치된 모듈까지... 이러한 정보를 수집하여 공격자들은 서버의 버그 등을 이용하여 서버를 공격하게 됩니다. 이를 방지하기 위해서는 웹 서버의 응답 헤더에서 관련 정보가 표시되지 않도록 해야 합니다. 아파치는 아래와 같이 설정하면 됩니다. 2.x 이상 버전은 /extra/httpd-default.conf 파일에서 다음과 같이 수정합니다. 또는, 아래 강조한 부분을 httpd.conf에 적어 넣습니다. # # ServerTokens # This directive configures what you return as the Server HTTP response # Header. The default is 'Ful..

728x90