1. ServerContainerUnit

  a. ServerContainer1 Name

    제어판 서비스 속성의 서비스 이름 변경

    

  b. ServerContainer1 DisplayName

    제어판 서비스 속성의 표시 이름 변경


  c. 서비스 Description 추가 - AfterInstall 이벤트에 추가

    제어판 서비스 속성의 설명 변경




2. ServerMethodsUnit

  a. ServerMethods1 Name 변경

    클라이언트가 서비스에 접속할때 이용하는 TDSProviderConnection 컴포넌트의 ServerClassName에 설정할 이름





ShowMessage, MessageDlg를 쓰면 버튼, 캡션이 영문으로 나온다.


  ShowMessage( 'asdf' );

  MessageDlg( '가나다라', mtInformation, mbYesNo, 0 );






예전에는 메시지창을 만들어서 쓰곤 했었는데 귀...귀찬....


MessageDlg의 인자로 Winapi의 MessageBox를 쓰도록 Wrapping하려고 했으나...

Winapi의 MB_ 항목들에는 YesToAll, NoToAll, Abort 등 버튼이 없다.

MessageBox로 Wrapping하다가 델파이에 있는 기능이 더 많은데?라는 생각에 Stop!!


문자열을 바꿔버리면 될까나? 라는 생각이 들어서 Dialogs 유닛 확인~

Dialogs 유닛을 보니 Consts유닛에 있는 resourcestring 문자열들을 이용하고 있다.



작업


우선 Consts 유닛을 다른 이름으로 저장한 후에 수정했다.

우선은 메시지 창에서 사용하는 부분 정도만 수정


  SMsgDlgWarning = '경고';

  SMsgDlgError = '오류';

  SMsgDlgInformation = '알림';

  SMsgDlgConfirm = '확인';

  SMsgDlgYes = '예(&Y)';

  SMsgDlgNo = '아니오(&N)';

  SMsgDlgOK = '확인';

  SMsgDlgCancel = '취소';

  SMsgDlgHelp = '도움말(&H)';

  SMsgDlgHelpNone = '도움말 없음';

  SMsgDlgHelpHelp = '도움말';

  SMsgDlgAbort = '취소(&A)';

  SMsgDlgRetry = '재시도(&R)';

  SMsgDlgIgnore = '무시(&I)';

  SMsgDlgAll = '전부(&A)';

  SMsgDlgNoToAll = '전부 아니오(&o)';

  SMsgDlgYesToAll = '전부 예(&A)';

  SMsgDlgClose = '닫기(&C)';


그러고는 저장한 파일을 프로젝트에 추가~

(꼭 추가하지 않더라도 같은 경로에 넣어도 된다.)



위의 소스를 다시 돌려보자




최종 결과물




오홋!!! 됐다~

파일 저장해놨다가 프로젝트 할때 추가하면 될듯하다.

메시지창 말고 다른 메시지도 한글로 바꿔서 적용하면 국내 프로그램 만들 때 편하게 쓸 수 있을 것 같다.



-------------------------------------------------------------------------------------------


ps. 테스트를 해보니 따로 저장한 파일을 library path에 추가되어 있는 경로에 넣어도 된다.

 그러면 프로젝트에 넣지 않아도 한글로 표시된다.


그러므로 난 앞으로 메시지는 모두 한글로 보여줄래!! 라고 한다면 Consts유닛을 델파이의 라이브러리 경로에 추가되어 있는 폴더에 넣으면 되고

필요한 경우에만 쓰고자 한다면 Consts 유닛을 따로 보관하다가 필요한 경우 프로젝트 경로에 복사해 넣으면 되겠다.





MSDN에 있는 What's New in the Windows API 보다가 VHD 관련한 API가 보여서 포팅해봤다.

VHD 관련 API는 Windows 7 이상에서만 동작한다.
서버는 2008 R2 이상부터

포팅한 헤더 이름은 VirtDisk.h
헤더의 SDK는 v7.0의 것을 이용했다.
MSDN의 예제 링크는 여기
MSDN에 관련 VHD 페이지는 VHD Reference를 참고하면 되겠다.


Example


아아아~ 귀차니즘으로 인한 콘솔보다 못한 UI라니 ㅠ.ㅜ

1. Create

예제에서는 C:\aaa.vhd의 경로에 파일을 생성한다.
현재 예제에서는 사이즈가 256mb로 지정되어 있다.



2. Attach & Detach

VHD를 시스템에 Attach시킨다.
딸깍하는 Windows 효과음이 나면서 처음이라면 가상드라이브 관련 드라이버도 설치가 진행된다.
누르고 자시고 할 것도 없이 그냥 진행된다 -_-;
탐색기에서는 변화가 없으니 제어판의 디스크 관리 항목을 열어보자.


디스크 1이라는 항목이 추가되어 있다.
디스크 1이라고 씌여진 부분에서 마우스 우클릭 후 디스크 초기화를 하면 온라인으로 상태가 변화된다.
256 MB가 씌여진 부분에서 우클릭 후 새 단순볼륨를 누르고 포맷을 진행하면 드라이브가 추가된다.



포맷이 완료되면 위 그림처럼 드라이브가 생성되고 파일을 읽고 쓸 수 있게 된다.
물론 탐색기에서 드라이브처럼 이용할 수 있다.
Detach하면 드라이브가 제거되며 다시 Attach하면 위에서 설정된 드라이브로 바로 마운트된다.


3. 기타 API

CompactVirtualDisk와 MergeVirtualDisk는 예제에서도 실행이 잘 안되서 확인을 못했고 나머지 api는 Attach 혹은 Detach 여부에 따라 동작이 가능했다.



PS

1. MINENUMSIZE 까먹어서 테스트 하다가 삽질 -_-;
http://docwiki.embarcadero.com/RADStudio/en/Delphi_Compiler_Directives_(List)_Index 
컴파일러 지시자 링크

2. MSDN보니 Windows 8에서 API가 몇개(AddVirtualDiskParent 등) 추가됐다 -_-;;;
 어..어이~ 마소~ Windows7도 얼른 지원해주라구.

맨날 TOpenDialog로 코딩할때 이런식으로 했었다.
혹시나 사용자가 이름을 막 넣을 수도 있기 때문에 파일이 있는지 꼭 확인하곤 했었다.


if OpenDialog1.Execute then
begin
  if FileExists(OpenDialog1.FileName) then
  begin
    // Todo...
  end;
end;

사람이 머리가 나쁘면 손발이 고생이고
프로그래머가 머리가 나쁘면 코딩량이 늘어난다. ㅠ.ㅜ

TOpenDialog의 Property를 보면 Options라는 집합 프로퍼티가 보인다.

 ofReadOnly
 Causes the Read Only check box to be selected initially when the dialog box is created. This flag indicates the state of the Read Only check box when the dialog box is closed.
 ofOverwritePrompt  덮어쓰기 할것인지 확인한다.
 Save as 다이얼로그에서 이용한다.
 ofHideReadOnly  읽기 전용 체크박스를 숨긴다.
 
 동작 확인 불가
 ofNoChangeDir  사용자가 다를 폴더를 탐색하더라도 current directory가 변경되지 않도록 원래의 값으로 복원한다.
 ofShowHelp  도움말 버튼이 보이도록 한다.
 ofNoValidate  파일명이 시스템에 유효한 파일명인지 검사하지 않는다.
 ofAllowMultiSelect  여러개의 파일을 선택할수 있도록 한다.
 Files 프로퍼티에 선택한 파일명이 넘어온다.
 ofExtensionDifferent Specifies that the user typed a file name extension that differs from the extension specified by lpstrDefExt. The function does not use this flag if lpstrDefExt is NULL.

무슨 말인지 모르겠다 -_-;
 ofPathMustExist  폴더가 반드시 존재해야 한다.
 ofFileMustExist  파일이 반드시 존재해야 한다.
 파일이 없는 경우는 경고 메시지가 출력된다.
 이 플래그가 활성화되면 ofPathMustExist도 활성화된다.
 ofCreatePrompt  사용자가 입력한 파일명이 존재하지 않는 경우 생성할 것인지 물어보는 다이얼로그를 띄운다.
 ofShareAware Specifies that if a call to the OpenFile function fails because of a network sharing violation, the error is ignored and the dialog box returns the selected file name. If this flag is not set, the dialog box notifies your hook procedure when a network sharing violation occurs for the file name specified by the user. If you set the OFN_EXPLORER flag, the dialog box sends the CDN_SHAREVIOLATION message to the hook procedure. If you do not set OFN_EXPLORER, the dialog box sends the SHAREVISTRING registered message to the hook procedure.
 ofNoReadOnlyReturn  파일을 포함하고 있는 폴더가 읽기전용이거나 읽기 전용 파일을 반환하지 않도록 한다.
 ofNoTestFileCreate  다이얼로그가 닫히기 전에 파일이 생성되지 않도록 한다.
 ofNoNetworkButton  Network 버튼을 숨긴다.
 ofNoLongNames  8.3의 옛날 스타일로 보이게 한다.
 ofOldStyleDialog가 설정되어 있어야 한다.
 ofOldStyleDialog  다이얼로그가 고전 스타일로 보이도록 한다.
 ofNoDereferenceLinks  바로가기 파일(.LNK)의 원래 경로를 받을 수 있도록 한다.
 ofEnableIncludeNotify  폴더를 열었을때 CDN_INCLUDEITEM을 보낼것인지 설정한다.
 (델파이에는 OFN_ENABLEHOOK을 설정하는 옵션이 없는데 어떻게 사용할수 있는지는 모르겠음.)
 ofEnableSizing  다이얼로그 사이즈 변경 가능하도록 한다.
 ofDontAddToRecent  선택한 파일이 CSIDL_RECENT 즉 최근 폴더에 추가되지 않도록 한다.
 ofForceShowHidden
 hidden, system 파일을 보여준다.
 주의 : 파일이 hidden과 system 속성을 모두 가지고 있다면 보이지 않는다.

주황색 부분은 무슨 내용인지 확인 불가.
뭐 크게 필요하지는 않은 옵션같다.
TOpenDialog는 기본으로 ofHideReadOnly, ofEnableIncludeNotify 옵션이 켜져있다.


MSDN에 관련 내용이 더 있으니 확인하면 된다.
http://msdn.microsoft.com/en-us/library/ms646839%28VS.85%29.aspx

CFileDialog 도움말
http://msdn.microsoft.com/en-us/library/43xtah3y.aspx

+ Recent posts